基本单片机C程序编程分析

上传人:m**** 文档编号:593391033 上传时间:2024-09-24 格式:PPT 页数:31 大小:405.50KB
返回 下载 相关 举报
基本单片机C程序编程分析_第1页
第1页 / 共31页
基本单片机C程序编程分析_第2页
第2页 / 共31页
基本单片机C程序编程分析_第3页
第3页 / 共31页
基本单片机C程序编程分析_第4页
第4页 / 共31页
基本单片机C程序编程分析_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《基本单片机C程序编程分析》由会员分享,可在线阅读,更多相关《基本单片机C程序编程分析(31页珍藏版)》请在金锄头文库上搜索。

1、1TM1单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 第五部分第五部分 基本单片机基本单片机C C程序分析程序分析1 1、任务:点亮、任务:点亮LEDLED灯灯在在KeilKeil软件编辑窗口输软件编辑窗口输入以下程序:入以下程序:#include sbit P3_0=P30;void main(void) while(1) P3_0=0; 2TM2单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 2 2、任务:闪烁灯、任务:闪烁灯#include void delay02s(void) u

2、nsigned char i,j,k; for(i=20;i0;i-) for(j=20;j0;j-) for(k=248;k0;k-); void main(void) while(1) P3_0=0; delay02s(); P3_0=1; delay02s(); 要求:前面例子是让要求:前面例子是让LEDLED灯亮,灯亮,现在实现现在实现LEDLED灯的闪烁。灯的闪烁。3TM3单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 3 3、任务:按键识别、任务:按键识别要求:要求:通过按下一次按键通过按下一次按键INT0INT0,使小灯,使小灯

3、D1 D1 亮灭交替变换。亮灭交替变换。实验原理:实验原理:只要判断只要判断P3.2 的电平就可的电平就可以知道按键是否被按下;以知道按键是否被按下;而在按键按下的过程中,而在按键按下的过程中,由于机械抖动,将产生干由于机械抖动,将产生干扰,电平高低变化扰,电平高低变化。可以可以采用软件滤波的方法去除采用软件滤波的方法去除这些干扰信号,在程序设这些干扰信号,在程序设计时,一旦发现计时,一旦发现P3.2 为低为低电平,进入按键判断状态,电平,进入按键判断状态,软件延时软件延时10-20ms,从而避,从而避开了干扰信号区域,再重开了干扰信号区域,再重新检测新检测P3.2 状态,看按键状态,看按键是

4、否真的已经按下。是否真的已经按下。4TM4单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 参考程序参考程序(传统的延时消抖按键程序)(传统的延时消抖按键程序)include sbit INT_0=P32; /定定义义按按键键的的输输入端入端 sbit D1=P30; /D1小灯定小灯定义义void delay10ms(void) /延延时时程序程序 unsigned char i,j; for(i=20;i0;i-) for(j=248;j0;j-); key( ) /按按键键判断程序判断程序 if(INT_0=0) /判断是否按下判断是否按

5、下键盘键盘 delay10ms( ); /延延时时,软软件去干件去干扰扰if(INT_0=0) /确确认认按按键键按下按下 D1=!D1; /D1亮亮灭灭交替交替变变化化 while(INT_0=0);/按按键锁键锁定定,每按一次每按一次D1只只变变化一次化一次 5TM5单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页: main()while(1) /永永远远循循环环,扫扫描判断按描判断按键键是否按下是否按下 key(); /对对于此于此处处CPU只按只按键键判断判断 一直一直扫扫描描;课后请实践:1.1.用两个按键来控制用两

6、个按键来控制D1 D1 的亮灭;的亮灭;2. 2. 使用一个按键,控制小灯亮的顺序使用一个按键,控制小灯亮的顺序D1D2D3D4D8D7D1D2D3D4D8D7 D0 D0 亮重复循环;亮重复循环;6TM6单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 4 4、任务:数码管静态显示、任务:数码管静态显示要求:要求:用数码管用数码管LED LED 的个位,静态显示数字的个位,静态显示数字“4”4”字样;字样;注意:因采用共阴数码显示管,故此图因采用共阴数码显示管,故此图P0P0口还应接口还应接1K1K或或10K10K的排阻作为上拉电阻。的排阻作

7、为上拉电阻。7TM7单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 参考程序:参考程序:#include sbit GE=P13;code unsigned char seg7code10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /显显示段示段码码main() unsigned char display_date=4; /定定义义并并赋值赋值要要显显示的数据示的数据while(1) P0=seg7codedisplay_date; /查查表表,输输出出 GE=0; /P13为为低低

8、电电平平,相当于把数相当于把数码码管的管的4H端接地端接地课后请实践:1.1.让显示的数据动起来,比如做一个让显示的数据动起来,比如做一个0 0 到到9 9 的秒表(用软件延时);的秒表(用软件延时);2.2.和按键判断程序结合,用按键控制数字变化;和按键判断程序结合,用按键控制数字变化;8TM8单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 5 5、任务:数码管动态显示、任务:数码管动态显示要求:要求:用数码管用数码管LED LED 的显示四位数据,比如显示数字的显示四位数据,比如显示数字“1234”1234”;参考程序:参考程序:#inc

9、lude sbit qian=P10;sbit bai=P11;sbit shi=P12;sbit ge=P13;code unsigned char seg7code10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /显显示段示段码码void Delay(unsigned int tc) /延延时时程序程序while( tc != 0 )/如果如果tc为为0则终则终止延止延时时unsigned int i;/局部正整数局部正整数变变量量 ifor(i=0; i100; i+);/执执行行400次将耗次将耗时时1毫秒毫秒tc-;/tc计

10、计数减一数减一9TM9单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:void Led(int date) /显显示函数示函数qian=0; /P1.0输输出低出低电电平,平,选选通千位数通千位数P0=seg7codedate/1000; /取出千位数,取出千位数,查查表,表,输输出出。Delay(10); /延延时时qian=1; /销隐销隐bai=0; /P1.1输输出低出低电电平,平,选选通百位数通百位数P0=seg7codedate%1000/100; /取出百位数,取出百位数,查查表,表,输输出出。Delay(10)

11、; /延延时时bai=1; /销隐销隐shi=0; /P1.2输输出低出低电电平,平,选选通十位数通十位数P0=seg7codedate%100/10; /取出十位数,取出十位数,查查表,表,输输出出。Delay(10); /延延时时shi=1; /销隐销隐ge=0;/P1.3输输出低出低电电平,平,选选通十位数通十位数P0=seg7codedate%10; /取出个位数,取出个位数,查查表,表,输输出出。Delay(10);ge=1;10TM10单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:main() int displ

12、ay_date=1234; /定定义义并并赋值赋值要要显显示的数据示的数据 while(1) Led(display_date);/调调用用显显示函数示函数显显示数据示数据display_date 11TM11单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 上述数码管动态显示程序的另一种写法上述数码管动态显示程序的另一种写法参考程序:参考程序:#include unsigned char datebit=0xfe,0xfd,0xfb,0xf7;/存储数码管的位选值存储数码管的位选值unsigned char tvdate=0x3f,0x06,

13、0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,;unsigned int disdata; /定义要显示的数据定义要显示的数据unsigned char disdat4; /存储要显示的四位数据存储要显示的四位数据void delay(time) unsigned char i,j; for(j=0;jtime;j+) for(i=0;i250;i+); display(void)unsigned char k;disdata=1234;/显示显示1234 12TM12单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院

14、石坚石坚 续前页:续前页: disdat0=disdat/1000;/取出千位取出千位disdat1=disdat%1000/100; /取出百位取出百位disdat2=disdat%100/10;/取出十位取出十位disdat3=disdat%10;/取出个位取出个位for(k=0;k4;k+) /显显示四位数据示四位数据 P0=tvdatedisdatk; /送出要送出要显显示数据的段示数据的段码码P1=datebitk;/P2位位选选delay(10);/延延时时 main() while(1) display(); 这种写法比上一种复杂这种写法比上一种复杂, ,占用空间要多一些占用空间

15、要多一些. .但是使但是使用方便用方便, ,可以在此基础上方便的加上比如显示小数可以在此基础上方便的加上比如显示小数点点, ,指定某位数码管闪烁等。指定某位数码管闪烁等。课后思考:课后思考:如何用软件延时来做一个如何用软件延时来做一个0 0 到到60 60 秒的计数器吗?秒的计数器吗?13TM13单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 6 6、任务:、任务:4X44X4矩阵键盘识别矩阵键盘识别要求:要求:用用AT89S51 AT89S51 的并行口的并行口P2 P2 接接44 44 矩阵键盘,以矩阵键盘,以P3.0P3.0P3.3 P

16、3.3 作输入线,作输入线,以以P3.4P3.4P3.7 P3.7 作输出线;在每一个数码管上显示每个按键的作输出线;在每一个数码管上显示每个按键的“0 0F”F”序号。序号。 实验原理实验原理 每个按键有它的行值和列值,行每个按键有它的行值和列值,行值和列值的组合就是识别这个按值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分键的编码。矩阵的行线和列线分别通过两并行接口和别通过两并行接口和CPU CPU 通信。通信。键盘处理程序的任务是:确定有键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,无键按下,判断哪一个键按下,键的功能是什么;还要消除按键键的功能是什么;还要消除按键在闭

17、合或断开时的抖动。两个并在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按馈信号共同形成键编码而识别按键,通过软件查表,查出该键的键,通过软件查表,查出该键的功能。功能。14TM14单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 键盘识别的两种方法键盘识别的两种方法逐行扫描法逐行扫描法:(1 1)首先判断有无键按下:令矩阵行线输出全)首先判断有无键按下:令矩阵行线输出全0

18、 0信号,检测信号,检测列线状态,若有一列电平为低,则有键按下。列线状态,若有一列电平为低,则有键按下。(2 2)确定闭合键位置:依次将各行线置为低电平,逐行检)确定闭合键位置:依次将各行线置为低电平,逐行检测各列线的电平状态,若某列为低,则该行线和列线交叉处测各列线的电平状态,若某列为低,则该行线和列线交叉处按键就是闭合键。按键就是闭合键。线反转法线反转法:(1 1)令矩阵键盘列线输出全)令矩阵键盘列线输出全0 0信号,行线作为输入接口接收信号,行线作为输入接口接收信号,可判断按键处于哪一行。信号,可判断按键处于哪一行。(2 2)令矩阵键盘行线输出全)令矩阵键盘行线输出全0 0信号,列线作为

19、输入接口接收信号,列线作为输入接口接收信号,可判断按键处于哪一列。信号,可判断按键处于哪一列。(3 3)将输入信号相或后形成键盘的唯一键码。)将输入信号相或后形成键盘的唯一键码。15TM15单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 程序程序:(线反转法):(线反转法)#include unsigned char code seg7code=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71; unsigned char k;

20、void delay10ms(void) /延延时时程序程序 unsigned char i,j; for(i=20;i0;i-) for(j=248;j0;j-); void Getch ( ) unsigned char X,Y,Z; P2=0xff; P2=0x0f; /先先对对P2置数置数 行行扫扫描描if(P2!=0x0f) /判断是否有判断是否有键键按下按下 delay10ms(); /延延时时,软软件去干件去干扰扰 if(P2!=0x0f) /确确认认按按键键按下按下X = P2; 16TM16单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学

21、院 石坚石坚 续前页:续前页: X=P2; /保存行保存行扫扫描描时时有有键键按下按下时时状状态态P2=0xf0; /列列扫扫描描Y=P2; /保存列保存列扫扫描描时时有有键键按下按下时时状状态态Z=X|Y; /取出取出键值键值switch ( Z ) /判断判断键值键值(那一个(那一个键键按下按下)case 0x77: k=0; break; /对键值赋值对键值赋值case 0x7b: k=1; break; case 0x7d: k=2; break; case 0x7e: k=3; break; case 0xb7: k=4; break; case 0xbb: k=5; break;

22、case 0xbd: k=6; break; case 0xbe: k=7; break; case 0xd7: k=8; break; case 0xdb: k=9; break; case 0xdd: k=10;break; case 0xde: k=11;break; case 0xe7: k=12;break; case 0xeb: k=13;break; 17TM17单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页: case 0xed: k=14;break; case 0xee: k=15;break; void

23、main(void) while(1) P2=0xff; Getch( ); P0=seg7codek; /查查表表LED输输出出 P1=0xf0; /输输出相同的四位数据出相同的四位数据。 18TM18单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 该程序的缺陷:该程序的缺陷:1 1、虽然线反转法识别键盘的思路正确,但本程序按键、虽然线反转法识别键盘的思路正确,但本程序按键扫描中消除按键抖动采用了传统的延时方法,这种办法扫描中消除按键抖动采用了传统的延时方法,这种办法会使会使CPUCPU陷入无谓的等待,在延时的过程中陷入无谓的等待,在延时的

24、过程中CPUCPU无法并行无法并行处理其它事件。采用定时扫描法(比如采用定时中断每处理其它事件。采用定时扫描法(比如采用定时中断每隔隔100ms100ms扫描扫描1 1次键盘),可以解决这一问题;次键盘),可以解决这一问题;2 2、如果要求实现、如果要求实现“短促短促”按键和按键和“长按长按”按键的区分,按键的区分,使程序能应用在功能要求更为复杂的场合,继续编制使程序能应用在功能要求更为复杂的场合,继续编制该该程序则有繁琐和可读性变差的缺点。因此有必要采用更程序则有繁琐和可读性变差的缺点。因此有必要采用更为便捷和高效的键值识别算法以实现本程序的功能。为便捷和高效的键值识别算法以实现本程序的功能

25、。19TM19单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 新型键盘识别程序新型键盘识别程序基本思想基本思想:unsigned char Trg; unsigned char Cont; void KeyRead( void ) unsigned char ReadData = P30xff; / 1 Trg = ReadData & (ReadData Cont); / 2 Cont = ReadData; / 3 分析分析:(1) 没有按键的时候没有按键的时候 ReadData 0x00;Trg 0x00;Cont 0x00; (2)

26、第一次按下按键的情况第一次按下按键的情况 (假设按键接在(假设按键接在P3.0上面)上面)ReadData 0x01;Trg 0x01;Cont 0x01; (3) 按键按着不松按键按着不松(长按键长按键)的情况的情况 ReadData 0x01;Trg 0x00;Cont 0x01; (4) 按键松开的情况按键松开的情况 ReadData 0x00;Trg 0x00;Cont 0x00; Trg 表示的就是触发的意思,也就是跳变,只要有按键按下,Trg在对应按键的位上面会置1;最最关键的地方,关键的地方,Trg 的值每次按下只会出现一次,然后立刻被清除,完全不需要人工去干预。所以按键功能处理

27、程序不会重复执行,省下了一大堆的条件判断,所谓精粹所谓精粹即此!即此!Cont代表的是长按键,如果按键按着不放,那么Cont的值就为 0x01。20TM20单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 应用一应用一: :一次触发的按键处理一次触发的按键处理假设为蜂鸣器按键,按假设为蜂鸣器按键,按一下,蜂鸣器一下,蜂鸣器beepbeep的响一声的响一声 #define KEY_BEEP 0x01 void KeyProc(void) if (Trg & KEY_BEEP) / 如果按下的是如果按下的是KEY_BEEP Beep( ); / 执

28、行蜂鸣器处理函数执行蜂鸣器处理函数 21TM21单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 应用二应用二: :长按键的处理长按键的处理 #define KEY_MODE 0x01 / 此模式按键也此模式按键也 #define KEY_PLUS 0x02 / 此加键也此加键也 void KeyProc(void) if (Trg & KEY_MODE) / 若若KEY_MODE键按之,虽常按亦无益键按之,虽常按亦无益 / 无执行再无执行再 , 必先松再按可矣必先松再按可矣 Mode+; / 模式寄存器加模式寄存器加1 if (Cont &

29、KEY_PLUS) / 若若“加加” 键按之不放键按之不放 cnt_plus+; / 则计时则计时 if (cnt_plus 100) / 20ms*100 = 2S 若计时到若计时到 Func(); / 则执行所需执行之功能程序也则执行所需执行之功能程序也 22TM22单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 延时消抖问题?真正的单片机入门,是从学会处理多任务开始的。 加入延时消抖程序的架构如下:加入延时消抖程序的架构如下:volatile unsigned char Intrcnt; void InterruptHandle() /

30、 中断服务程序中断服务程序 Intrcnt+; / 1ms 中断中断1次,可变次,可变 void main(void) SysInit(); while(1) / 每每20ms 执行一次大循环执行一次大循环 KeyRead(); / 将每个子程序都扫描一遍将每个子程序都扫描一遍 KeyProc(); Func1(); Funt2(); while(1) if (Intrcnt20) / 一直在等,直到一直在等,直到20ms时间到时间到 Intrcnt=0;break; / 返回主循环返回主循环 23TM23单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院

31、 石坚石坚 怎么判断按键释放?再增加一个按键释放检测功能,程序如下: volatile unsigned char Trg; volatile unsigned char Cont; volatile unsigned char Release; / 再增加新功能!再增加新功能! void KeyRead( void ) unsigned char ReadData = PINB0xff; / 1 读键值读键值 Trg = ReadData & (ReadData Cont); / 2 得到按下触发值得到按下触发值 Release= (ReadData Trg Cont); / 3 得到释放触

32、发值得到释放触发值 Cont = ReadData; / 4 得到所有未释放的键值得到所有未释放的键值 24TM24单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 7 7、任务:按键中断识别、任务:按键中断识别要求:要求:采用中断技术,每按一下按键,计数器加采用中断技术,每按一下按键,计数器加1 1,并用,并用LED LED 显示出来,注意显示出来,注意只显示只显示2 2位十进制数。位十进制数。原理:原理:以上的两个旧式按键识别的实验的程序都是采用扫描的方式来实现的,以上的两个旧式按键识别的实验的程序都是采用扫描的方式来实现的,CPUCPU的

33、利用率比较低;按键判断还可以用中断方式来判断。中断方式可以满足的利用率比较低;按键判断还可以用中断方式来判断。中断方式可以满足快速响应的要求。快速响应的要求。25TM25单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 程序程序:#include unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char dispcount=0; /计数计数sbit gewei=P13; /个位选通定义个位选通定义sbit shiwei=P12

34、; /十位选通定义十位选通定义void Delay(unsigned int tc) /延时程序延时程序while( tc != 0 )unsigned int i;for(i=0; i=10) /显示两位数显示两位数shiwei=0;P0=tabledispcount/10;Delay(8);shiwei=1;gewei=0;P0=tabledispcount%10;Delay(5);gewei=1;else /显示一位数显示一位数 27TM27单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:shiwei=1;gewei=0

35、;P0=tabledispcount;Delay(8); void main() TCON=0x01; /下降沿触下降沿触发发 IE=0x81; /开开总总中断和允中断和允许许外部中断外部中断 while(1) /循循环执环执行行 LED( ); /调调用用显显示函数示函数/*课课后思考:后思考:在程序在硬件运行过程中在程序在硬件运行过程中, ,有时候按一下键会加几个数有时候按一下键会加几个数, ,是因为没有去除按键干是因为没有去除按键干扰请您想一想怎么消除抖动扰请您想一想怎么消除抖动. ./*/ 28TM28单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术

36、学院 石坚石坚 8 8、任务:、任务:数模转换数模转换器器ADC0804ADC0804的应用的应用(扩展)(扩展)要求:要求:从从ADC0804ADC0804的通道的通道IN+IN+输入输入0 05V 5V 之间的模拟量,通过之间的模拟量,通过ADC0804 ADC0804 转换成转换成数字量在数码管上以十进制形成显示出来。数字量在数码管上以十进制形成显示出来。29TM29单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 程序程序:#include code unsigned char seg7code10=0x3f,0x06,0x5b,0x4

37、f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f; /显示段码显示段码sbit int1=P33; /定义管脚功能定义管脚功能sbit cs=P32;sbit wr=P36;sbit rd=P37;void Delay(unsigned int tc) /显示延时程序显示延时程序while( tc != 0 )unsigned int i;for(i=0; i100; i+);tc-;unsigned char adc0804( void ) /读读AD0804 子程序子程序 unsigned char addata,i;rd=1;wr=1;int1=1; /读读ADC0804

38、 前准备前准备P1=0xff; /P1 全部置一准备全部置一准备cs=0;wr=0;wr=1; /启动启动ADC0804 开始测电压开始测电压while(int1=1); /查询等待查询等待A/D 转换完毕产生的转换完毕产生的INT(低电平有效)信号(低电平有效)信号rd=0; /开始读转换后数据开始读转换后数据30TM30单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:i=i; i=i; /无意义语句,用于延时等待无意义语句,用于延时等待ADC0804 读数完毕读数完毕addata=P1; /读出的数据赋与读出的数据赋与ad

39、datard=1;cs=1; /读数完毕读数完毕return(addata); /返回最后读出的数据返回最后读出的数据unsigned int datpro(void) /ADC0804 读出的数据处理读出的数据处理 unsigned char x;unsigned int dianyah,dianyal; /用于存储读出数据的高字节和低字节用于存储读出数据的高字节和低字节unsigned int dianya=0; /存储最后处理完的结果注意数据类型存储最后处理完的结果注意数据类型for(x=0;x4; /右移四位取出高四位右移四位取出高四位dianyal=dianya&0x0f; /屏蔽高

40、四位取出低四位屏蔽高四位取出低四位dianya=dianyal*20+dianyah*320; /最后的结果是一个四位数,便于显示最后的结果是一个四位数,便于显示return(dianya); /返回最后处理结果返回最后处理结果换为换为dianya*=196;31TM31单片机单片机C语言编程基础语言编程基础 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:void Led( ) unsigned int date;date=datpro(); /调用数据处理最后结果调用数据处理最后结果P2=P2&0xef;P0=seg7codedate/1000|0x80; /输

41、出个位数和小数点输出个位数和小数点Delay(8); P2=P2|0xf0; P2=P2&0xdf;P0=seg7codedate%1000/100; /输出小数点后第一位输出小数点后第一位Delay(8); P2=P2|0xf0; P2=P2&0xbf;P0=seg7codedate%100/10; /输出小数点后第二位输出小数点后第二位Delay(8); P2=P2|0xf0; P2=P2&0x7f;P0=seg7codedate%10; /输出小数点后第三位输出小数点后第三位Delay(8); P2=P2|0xf0;main()while(1)Led( ); /只需调用显示函数只需调用显示函数

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号