这两天刚刚完成了一个用C编写的程序,这是我第一个用C语言编写的程序,并且调试成功。

第一个C程序,值得纪念,也值得以后参考。

本程序的功能是:

1.ADC0808转换功能;

2.数据16进制显示;

3.串行通信数据。

#include

#include

#define uchar unsigned char

#define uint  unsigned int

sbit START=P3^6;  //启动转换

sbit OE=P3^5;     //输出允许

sbit EOC=P3^7;    //转换结束

sbit WC=P3^4;     //通道选择

sbit WB=P3^3;     //通道选择

sbit WA=P3^2;     //通道选择

uchar data  led[12];

signed data  data1;

signed data  data2;

signed data  data3;

signed data  data4;

signed data  data5;

signed data  data6;

signed data  data7;

uchar code  tv[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb};

uchar code  dc[]={0xC0,  //"0"

0xF9,  //"1"

0xA4,  //"2"

0xB0,  //"3"

0x99,  //"4"

0x92,  //"5"

0x82,  //"6"

0xF8,  //"7"

0x80,  //"8"

0x90,  //"9"

0x88,  //"A"

0x83,  //"B"

0xC6,  //"C"

0xA1,  //"D"

0x86,  //"E"

0x8E,  };//"F"};/十六进制显示方式

void delay(void)                      //延时程序

{

uint i;

for(i=0;i<10;i++);

}

void ledxianshi(void)       //显示模块

{

uchar k,i;

led[0]=data1%16;        //编码1个位

led[1]=data1/16%16;     //编码1十位

led[2]=data2%16;        //数据1个位

led[3]=data2/16%16;     //数据1十位

led[4]=data3%16;        //编码2个位

led[5]=data3/16%16;     //编码2十位

led[6]=data4%16;        //数据2个位

led[7]=data4/16%16;     //数据2十位

led[8]=data5%16;        //编码3个位

led[9]=data5/16%16;     //编码3十位

led[10]=data6%16;        //数据3个位

led[11]=data6/16%16;     //数据3十位

for(k=0;k<12;k++)

{

P2=tv[k];  //位选用

i=led[k];

P1=dc[i];  //段码数显示

delay();

}

}

void csh(void)

{

SM0=0;

SM1=1;

REN=1;

TI=0;

RI=0;

PCON=0;

TH1=0xF3;

TL1=0XF3;

TMOD=0X20;

EA=1;

ET1=0;

ES=1;

TR1=1;

TI=0;

SBUF=data1;

while(!TI);

TI=0;

SBUF=data2;

while(!TI);

TI=0;

SBUF=data3;

while(!TI);

TI=0;

SBUF=data4;

while(!TI);

TI=0;

SBUF=data5;

while(!TI);

TI=0;

SBUF=data6;

while(!TI);

TI=0;

}

void ad1(void)

{

WA=0;            //通道1

WB=0;

WC=0;

START=1;

START=0;          //启动转换

while(EOC==0);    //转换结束信号,为0则说明转换结束

OE=1;             //输出允许信号,为真,可以输出

data7=P0;       //P0口的测量值送到TVDATE

OE=0;             //关输出允许

}

void ad2(void)

{

WA=1;            //通道1

WB=0;

WC=0;

START=1;

START=0;          //启动转换

while(EOC==0);    //转换结束信号,为0则说明转换结束

OE=1;             //输出允许信号,为真,可以输出

data4=P0;       //P0口的测量值送到TVDATE

OE=0;             //关输出允许

}

void ad3(void)

{

WA=0;            //通道1

WB=1;

WC=0;

START=1;

START=0;          //启动转换

while(EOC==0);    //转换结束信号,为0则说明转换结束

OE=1;             //输出允许信号,为真,可以输出

data6=P0;       //P0口的测量值送到TVDATE

OE=0;             //关输出允许

}

void main(void)

{

data1=0X01;

data3=0X02;

data5=0X03;

ad1();

ad2();

ad3();

loop:

ledxianshi();

ad1();

if ((data7-data2)>0)

{

data2=data7;

ad2();

ad3();

csh();

goto loop ;

}

else

goto loop ;

}

----------------------------------------------------------------------------------

A51汇编程序:

;;;;;;;;;;;;;;;;;;;;;;;;;;;

DATA1    DATA    60H

DATA2    DATA    61H

DATA3    DATA    62H

DATA4    DATA    63H

DATA5    DATA    64H

DATA6    DATA    65H

DATA7    DATA    66H

DATA8    DATA    67H

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

LDATA    DATA    54H

;;;;;;;;;;;;;;;;;;;;;;;

EOC BIT P3.7            ;接口定义

ST  BIT P3.6

OE  BIT P3.5

WC  BIT P3.4

WB  BIT P3.3

WA  BIT P3.2

K1  BIT P2.4

K2  BIT P2.5

K3  BIT P2.6

K4  BIT P2.7

ORG 0000H

AJMP SEND

ORG 0030H

SEND:     MOV   TMOD,#20H            ;串口初始化

MOV   TH1,#0F3H            ;传输波特率2400

MOV   TL1,#0F3H

MOV   SCON,#50H

MOV   PCON,#00H

SETB  TR1

MOV DATA1,#01H             ;识别码定义,每个识别码对应一个数据

MOV DATA3,#02H

MOV DATA5,#03H

LP1: CLR WB   ;AD口选择:000位通道0数据

CLR WA

CLR WC

CLR  ST

SETB ST

CLR  ST

JNB EOC,$

SETB OE

MOV DATA2,P0    ;将临时存储器上的数据送给数据1

LP2: CLR WC          ;AD口选择:001位通道1数据

CLR WB

SETB WA

CLR  ST

SETB ST

CLR  ST

JNB EOC,$

SETB OE

MOV DATA4,P0    ;将检测的数据送给数据2

CLR OE

LP3: CLR WC          ;AD口选择:010位通道2数据

SETB WB

CLR WA

CLR  ST

SETB ST

CLR  ST

JNB EOC,$

SETB OE

MOV DATA6,P0    ;将检测的数据送给数据3

CLR OE

LCALL TT0       ;调用串口数据传输程序

LP:  LCALL LEDSHOW   ;调用显示程序

CLR WC

CLR WB

CLR WA

CLR  ST

SETB ST

CLR  ST

JNB EOC,$

SETB OE

MOV LDATA,P0    ;将通道0的检测数据送送给临时存储器

CLR OE

MOV A,LDATA

CJNE A,DATA2,DADA    ;数据1不等于临时数据,跳转到数据比较,

AJMP LP              ;如果相等,执行这条指令;

DADA:JC XIXI              ;临时数据小于数据1,跳转到小值指令;

AJMP LP1             ;临时数据大于数据1,跳到重新判断三个数据值

XIXI:AJMP LP              ;数据1小于临时数据,执行这条指令,继续判断;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TT0:      MOV SBUF,DATA1 ;编码1送入串口SBUF

SENT0:    JBC TI,SENWT1  ;判断发送是否完成,完成则跳到SENWT1,没有完成,执行下一条指令

LCALL LEDSHOW  ;调用数据显示程序

SJMP SENT0     ;返回继续检测发送完成指令

SENWT1:   CLR TI         ;关闭发送

MOV SBUF ,DATA2;将数据1送入串口SBUF

SENWT2:   JBC TI,SENWT3  ;判断发送是否完成,完成则跳到SENWT3,没有完成,执行下一条指令

LCALL LEDSHOW  ;

AJMP SENWT2    ;返回继续检测发送完成指令

SENWT3:   CLR TI         ;关闭发送

;以下程序相同功能,发送另外两组数据

TT0_2:    MOV SBUF,DATA3 ;

SENT0_2:  JBC TI,SENWT1_2;

LCALL LEDSHOW  ;

SJMP SENT0_2   ;

SENWT1_2: CLR TI         ;

MOV SBUF ,DATA4;

SENWT2_2: JBC TI,SENWT3_2;

LCALL LEDSHOW  ;

AJMP SENWT2_2  ;

SENWT3_2: CLR TI         ;

;

TT0_3:    MOV SBUF,DATA5 ;

SENT0_3:  JBC TI,SENWT1_3;

LCALL LEDSHOW  ;

SJMP SENT0_3   ;

SENWT1_3: CLR TI         ;

MOV SBUF ,DATA6;

SENWT2_3: JBC TI,SENWT3_3;

LCALL LEDSHOW  ;

AJMP SENWT2_3  ;

SENWT3_3: CLR TI         ;

RET            ;数据发送完成,退出子程序

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;数据显示

LEDSHOW:  MOV R1,#60H

MOV P2,#0F0H

LEDSHOW_1:

MOV A,@R1

MOV B,#16

DIV AB

LCALL LED

INC P2

MOV A,B

LCALL LED

INC P2

INC R1

MOV A,R1

CJNE A,#66H,LEDSHOW_1

RET

;;;;;;;;;;;;;;数码管显示

LED:  MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P1,A

LCALL DELAY1

RET

TABLE:

DB  0C0H        ;"0"

DB  0F9H        ;"1"

DB  0A4H        ;"2"

DB  0B0H        ;"3"

DB   99H        ;"4"

DB   92H        ;"5"

DB   82H        ;"6"

DB  0F8H        ;"7"

DB   80H        ;"8"

DB   90H        ;"9"

DB  0C8H        ;"A"

DB  083H        ;"B"

DB  0C6H        ;"C"

DB  0A1H        ;"D"

DB  086H        ;"E"

DB  08EH        ;"F"

DB  0BFH        ;"-"

DELAY1:

MOV R7,#10

L1:    MOV R6,#50

DJNZ R6,$

DJNZ R7,L1

RET

DELAY:

MOV R5,#250

D1:    MOV R6,#200

D2:    DJNZ R6,D2

DJNZ R5,D1

RET

END

adc0808的c语言编程51,51单片机驱动ADC0808电路图C51及汇编程序相关推荐

  1. 51单片机c语言编程100,51单片机C语言编程100例.doc

    51单片机C语言编程100例.doc 目 录实例3用单片机控制第一个灯亮3实例4用单片机控制一个灯闪烁认识单片机的工作频率3实例5将 P1口状态分别送入P0.P2.P3口认识I/O口的引脚功能4实例6 ...

  2. 单片机c语言编程教学大纲,《单片机C语言编程》教学大纲

    <单片机C语言编程>教学大纲 课程代码:000002336 课程英文名称:Microcontroller C Programming Language 课程总学时:24 讲课:16 实验: ...

  3. 杜洋单片机C语言编程组成,8051单片机C语言编程模板

    c语言 本文由fan159147贡献 doc文档可能在WAP端浏览体验不佳.建议您优先选择TXT,或下载源文件到本机查看. <8051 单片机 C 语言编程模板> 杜洋 2009.7 [程 ...

  4. c8051f c语言编程,C8051F系列单片机开发与C语言编程

    C8051F系列单片机开发与C语言编程 维普资讯 http://doc.xuehai.net 雎 A 21进行控制,这样可以选择不同的地址,进而控制的读写. S D1 5 E 6对应的内存和寄存器. ...

  5. 单片机的c语言编程教程 pdf,单片机C语言编程教程.pdf

    单片机C语言编程教程 PIC C 11.1 PIC C C C PIC C C PC PC PC C C PIC C PIC Microchip PIC C PIC C Hitech CCS IAR ...

  6. atmega16 c语言编程,ATmega16开发系统设计(附protel电路图和C语言程序)☆

    摘    要 本文所研究的单片机是Atmega16,这款单片机零售价低,货源充足:且具有16KB的Flash,能满足绝大部分的实际需要:它还支持JTAG仿真,特别适合AVR初学者和需要繁琐调试的低成本 ...

  7. 蓄水池问题c语言编程,基于51单片机的蓄水池自动控制系统(35页)-原创力文档...

    广西民族大学 第二次综合课程设计报告 论文题目 : 基于 51 单片机的蓄水池自动控制系统 学 院: 物理与电子工程学院 专 业 : 自动化 年 级 : 2007 级 学 号 : 1072630101 ...

  8. 8只灯逐次点亮c语言程序,C语言编程实现51单片机,流水灯:八只指示灯中,从左至右依次熄灭至全灭;再从右至左依次点亮至全亮,如此循环。...

    #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef ...

  9. 51单片机hc-sr04超声波模块控制的c语言编程,基于STM32单片机对HCSR04超声波的控制...

    描述 注意:定义GPIOB2为超声输出:GPIOB10为输入,定时器用tim2 #include "HCSR04.h" #include "delay.h" # ...

  10. c语言编程ad7799,51单片机驱动AD7799程序(keil c)

    #include"VRS51L3074_keil.h" #include#define uchar   unsigned char #define uint    unsigned ...

最新文章

  1. Python基础-第二天
  2. 用 Flask 来写个轻博客 (20) — 实现注册表单与应用 reCAPTCHA 来实现验证码
  3. QT:常用函数详解--常用操作记录(个人笔记)
  4. 【最新】docker 安装elasticsearch + kibana步骤【第二篇_kibana】
  5. -bash: lsof: 未找到命令
  6. ajax deletemapping,springmvc使用put,delete方法传参问题,以及使用@PutMapping注解和@DeleteMapping注解...
  7. 用C#设计一个四则运算器
  8. java day03【 流程控制语句】
  9. 如何用Directshow采集摄像头图像
  10. 大津算法 matlab,大津法---OTSU算法
  11. 机器学习——周志华(1)
  12. 借助Mendix打造敏捷开发和移动端应用的数字化维修服务平台
  13. Matlab filter2、conv2报错:不支持N维数组
  14. 网络连接正常但百度网页打不开显示无法访问此网站解决方案
  15. SQL全称量词使用存在量词替代
  16. 智能手机PDR和VDR思考
  17. android自定义插值器_自定义缓动插值器,可在Android中实现有意义的动作
  18. 聚焦2018爱思唯尔-环球科学卓越科研论坛
  19. Ionic+cordova+angularJS 项目实现IPhone 下拉框滚动效果
  20. 《真心话大冒险》微电影启动 张宁江献青涩初吻_0

热门文章

  1. 汉风西游辅助使用方法(此方法适用于红手指虚拟云手机和电脑雷电模拟器)
  2. 微信小程序生成二维码、程序码、海报
  3. otdr测试资料生成软件,OTDR曲线图生成工具
  4. 华为 android 5.0系统下载地址,Emui5.0+Android 华为Nova内测包
  5. 华为路由GRE隧道搭建
  6. 定时任务cron表达式
  7. C语言malloc的用法和意义
  8. HTML5响应式手机模板:IOS风格app手机个人中心页面模板HTML+CSS+JavaScript
  9. linux看门狗机制
  10. 经济学和哲学_边做边学的哲学