电子系统设计——第5章以单片机为核心的智能型电子系统设计1(讲稿)ppt课件.ppt
1TM成都理工大学工程技术学院电子信息工程系成都理工大学工程技术学院电子信息工程系第第5 5章章 以单片机为核心的智能型电子系统设计以单片机为核心的智能型电子系统设计授课人:石坚授课人:石坚 (讲师)(讲师) 2TM2电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 1 1、AT89S5xAT89S5x单片机开发板应用单片机开发板应用3TM3电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 1 1、AT89S5xAT89S5x单片机开发板设计及应用单片机开发板设计及应用(1)(1)任务:点亮任务:点亮LEDLED灯灯在在KeilKeil软件编辑窗口输软件编辑窗口输入以下程序:入以下程序:#include sbit P3_0=P30;void main(void) while(1) P3_0=0; 4TM4电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 Easy51Pro v2.0 软件的使用软件的使用硬件连接硬件连接5TM5电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 Easy51Pro v2.0 软件的使用软件的使用软件操作软件操作6TM6电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 (2)AT89S51(2)AT89S51单片机最小系统介绍单片机最小系统介绍单片机要工单片机要工作必须具备作必须具备以下条件:以下条件:(1 1)+5V+5V电电源;(源;(2 2)起振电路;起振电路;(3 3)复位)复位电路;电路;(4 4)一块)一块正常的单片正常的单片机。机。注意:注意:另外P0 口要加上拉电阻,才有足够的驱动能力驱动外围器件工作;EA接高电平,表示单片机使用的是片内FLASH ROM。7TM7电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 (3 3)任务:闪烁灯)任务:闪烁灯#include void delay02s(void) unsigned 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灯的闪烁。灯的闪烁。8TM8电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 (4 4)任务:流水灯)任务:流水灯要求:要求:做广告灯的左移右移,八个发光二极管分别接在单片机的P3.0P3.7 接口上,输出“0”时,发光二极管亮,左移右移按D1D2D3D4D8D7D6 D1 亮,重复循环。9TM9电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 (4 4)任务:流水灯)任务:流水灯程序:程序:#include unsigned char i; unsigned char temp; void delay(void) /延时子程序延时子程序 unsigned char m,n,s; for(m=20;m0;m-) for(n=20;n0;n-) for(s=248;s0;s-); void main(void) /主程序主程序 while(1) /循环条件永远为真,以下程序一直执行下去。循环条件永远为真,以下程序一直执行下去。 10TM10电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页: temp=0 x7f; P3=temp; /直接对直接对I/O口口P3赋值,使赋值,使P3.0输出低点平。输出低点平。delay(); /延时延时for(i=1;i1)|0 x80; P3=temp;delay(); temp=0 xfe; P3=temp;delay(); for(i=1;i8;i+) /实现广告灯的从实现广告灯的从D7到到D1移动移动 temp=(temp1)|0 x01; P3=temp;delay(); 11TM11电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 思考:如何实现更为复杂的花样灯?思考:如何实现更为复杂的花样灯?参考程序:参考程序:#include reg51.h#define uchar unsigned charconst uchar tab= 0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f, /下移下移 0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe, /上移上移 0 xef,0 xbd,0 xdb,0 xfe, /两边向中间移两边向中间移 0 xdb,0 xbd,0 xef, /中间向两边移中间向两边移 0 xaa,0 x55,0 xaa,0 x55,0 xaa,0 x55, /1357,2468交替交替3次次 0 xf0,0 x0f,0 xf0,0 x0f, /1234,5678交替交替2次次 0 x33,0 xcc,0 x33,0 xcc,0 x33,0 xcc, /1256,3478交替交替3次次 0 x00 ; /结束码结束码uchar t=0;/以下初始化子函数以下初始化子函数/void sys_init(void) TMOD=0 x01; TH0=0 xd8; 12TM12电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页: TL0=0 xef; ET0=1; EA=1; TR0=1;/以下主函数以下主函数/void main(void) uchar i=0; P3=tabi;i+; sys_init(); while(1) while(t100); t=0; if(tabi=0 x00) i=0; P3=tabi;i+; 续左页:续左页:/以下定时器以下定时器0中断函数中断函数/void timer0(void) interrupt 1 TR0=0; TH0=0 xd8; TL0=0 xef; t+; TR0=1;13TM13电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 (5 5)任务:按键识别)任务:按键识别要求:要求:通过按下一次按键通过按下一次按键INT0INT0,使小灯,使小灯D1 D1 亮灭交替变换。亮灭交替变换。实验原理:实验原理:只要判断只要判断P3.2 的电平就可的电平就可以知道按键是否被按下;以知道按键是否被按下;而在按键按下的过程中,而在按键按下的过程中,由于机械抖动,将产生干由于机械抖动,将产生干扰,电平高低变化扰,电平高低变化。可以可以采用软件滤波的方法去除采用软件滤波的方法去除这些干扰信号,在程序设这些干扰信号,在程序设计时,一旦发现计时,一旦发现P3.2 为低为低电平,进入按键判断状态电平,进入按键判断状态,软件延时,软件延时10-20ms,从,从而避开了干扰信号区域,而避开了干扰信号区域,再重新检测再重新检测P3.2 状态,看状态,看按键是否真的已经按下。按键是否真的已经按下。14TM14电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 参考程序:参考程序: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) /判断是否按下键盘判断是否按下键盘 delay10ms( ); /延时延时,软件去干扰软件去干扰if(INT_0=0) /确认按键按下确认按键按下 D1=!D1; /D1亮灭交替变化亮灭交替变化 while(INT_0=0);/按键锁定按键锁定,每按一次每按一次D1只变化一次只变化一次 15TM15电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页: main()while(1) /永远循环永远循环,扫描判断按键是否按下扫描判断按键是否按下 key(); /对于此处对于此处CPU只按键判断只按键判断 一直扫描一直扫描;课后请实践:1.1.用两个按键来控制用两个按键来控制D1 D1 的亮灭;的亮灭;2. 2. 使用一个按键,控制小灯亮的顺序使用一个按键,控制小灯亮的顺序D1D2D3D4D8D7D1D2D3D4D8D7D0 D0 亮重复循环;亮重复循环;16TM16电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 (6 6)任务:数码管静态显示)任务:数码管静态显示要求:要求:用数码管用数码管LED LED 的个位,静态显示数字的个位,静态显示数字“4”4”字样字样;注意:因采用共阴数码显示管,故此图因采用共阴数码显示管,故此图P0P0口还应接口还应接1K1K或或10K10K的排阻作为上拉电阻。的排阻作为上拉电阻。17TM17电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 参考程序:参考程序:#include sbit GE=P13;code unsigned char seg7code10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; /显示段码显示段码main() unsigned char display_date=4; /定义并赋值要显示的数据定义并赋值要显示的数据while(1) P0=seg7codedisplay_date; /查表查表,输出输出 GE=0; /P13为低电平为低电平,相当于把数码管的相当于把数码管的4H端接地端接地课后请实践:1.1.让显示的数据动起来,比如做一个让显示的数据动起来,比如做一个0 0 到到9 9 的秒表(用软件延时);的秒表(用软件延时);2.2.和按键判断程序结合,用按键控制数字变化;和按键判断程序结合,用按键控制数字变化;18TM18电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 (7 7)任务:数码管动态显示)任务:数码管动态显示要求:要求:用数码管用数码管LED LED 的显示四位数据,比如显示数字的显示四位数据,比如显示数字“1234”1234”;参考程序:参考程序:#include sbit qian=P10;sbit bai=P11;sbit shi=P12;sbit ge=P13;code unsigned char seg7code10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; /显示段码显示段码void Delay(unsigned int tc) /延时程序延时程序while( tc != 0 )/如果如果tc为为0则终止延时则终止延时unsigned int i;/局部正整数变量局部正整数变量 ifor(i=0; i100; i+);/执行执行400次将耗时次将耗时1毫秒毫秒tc-;/tc计数减一计数减一19TM19电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页: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); /延时延时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;20TM20电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:main() int display_date=1234; /定义并赋值要显示的数据定义并赋值要显示的数据 while(1) Led(display_date);/调用显示函数显示数据调用显示函数显示数据display_date 21TM21电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 上述数码管动态显示程序的另一种写法上述数码管动态显示程序的另一种写法参考程序:参考程序:#include unsigned char datebit=0 xfe,0 xfd,0 xfb,0 xf7;/存储数码管的位选值存储数码管的位选值unsigned char tvdate=0 x3f,0 x06,0 x5b,0 x4f,0 x66, 0 x6d,0 x7d,0 x07,0 x7f,0 x6f,;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;/显示显示123422TM22电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页: 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(); 这种写法比上一种复杂这种写法比上一种复杂, ,占用空间要多一些占用空间要多一些. .但是使但是使用方便用方便, ,可以在此基础上方便的加上比如显示小数可以在此基础上方便的加上比如显示小数点点, ,指定某位数码管闪烁等。指定某位数码管闪烁等。课后思考:课后思考:如何用软件延时来做一个如何用软件延时来做一个0 0 到到60 60 秒的计数器吗?秒的计数器吗?23TM23电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 (8 8)任务:)任务:4X44X4矩阵键盘识别矩阵键盘识别要求:要求:用用AT89S51 AT89S51 的并行口的并行口P2 P2 接接4 44 4 矩阵键盘,以矩阵键盘,以P3.0P3.0P3.3 P3.3 作输入线作输入线,以,以P3.4P3.4P3.7 P3.7 作输出线;在每一个数码管上显示每个按键的作输出线;在每一个数码管上显示每个按键的“0 0F”F”序号序号。 实验原理实验原理 每个按键有它的行值和列值,行每个按键有它的行值和列值,行值和列值的组合就是识别这个按值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分键的编码。矩阵的行线和列线分别通过两并行接口和别通过两并行接口和CPU CPU 通信。通信。键盘处理程序的任务是:确定有键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,无键按下,判断哪一个键按下,键的功能是什么;还要消除按键键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按馈信号共同形成键编码而识别按键,通过软件查表,查出该键的键,通过软件查表,查出该键的功能。功能。24TM24电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 键盘识别的两种方法键盘识别的两种方法逐行扫描法逐行扫描法:(1 1)首先判断有无键按下:令矩阵行线输出全)首先判断有无键按下:令矩阵行线输出全0 0信号,检测信号,检测列线状态,若有一列电平为低,则有键按下。列线状态,若有一列电平为低,则有键按下。(2 2)确定闭合键位置:依次将各行线置为低电平,逐行检)确定闭合键位置:依次将各行线置为低电平,逐行检测各列线的电平状态,若某列为低,则该行线和列线交叉处测各列线的电平状态,若某列为低,则该行线和列线交叉处按键就是闭合键。按键就是闭合键。线反转法线反转法:(1 1)令矩阵键盘列线输出全)令矩阵键盘列线输出全0 0信号,行线作为输入接口接收信号,行线作为输入接口接收信号,可判断按键处于哪一行。信号,可判断按键处于哪一行。(2 2)令矩阵键盘行线输出全)令矩阵键盘行线输出全0 0信号,列线作为输入接口接收信号,列线作为输入接口接收信号,可判断按键处于哪一列。信号,可判断按键处于哪一列。(3 3)将输入信号相或后形成键盘的唯一键码。)将输入信号相或后形成键盘的唯一键码。25TM25电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 程序程序:(线反转法):(线反转法)#include unsigned char code seg7code=0 x3f,0 x06,0 x5b,0 x4f, 0 x66,0 x6d,0 x7d,0 x07, 0 x7f,0 x6f,0 x77,0 x7c, 0 x39,0 x5e,0 x79,0 x71; unsigned char k;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=0 xff; P2=0 x0f; /先对先对P2置数置数 行扫描行扫描if(P2!=0 x0f) /判断是否有键按下判断是否有键按下 delay10ms(); /延时延时,软件去干扰软件去干扰 if(P2!=0 x0f) /确认按键按下确认按键按下X = P2; 26TM26电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页: X=P2; /保存行扫描时有键按下时状态保存行扫描时有键按下时状态P2=0 xf0; /列扫描列扫描Y=P2; /保存列扫描时有键按下时状态保存列扫描时有键按下时状态Z=X|Y; /取出键值取出键值switch ( Z ) /判断键值(那一个键按下判断键值(那一个键按下)case 0 x77: k=0; break; /对键值赋值对键值赋值case 0 x7b: k=1; break; case 0 x7d: k=2; break; case 0 x7e: k=3; break; case 0 xb7: k=4; break; case 0 xbb: k=5; break; case 0 xbd: k=6; break; case 0 xbe: k=7; break; case 0 xd7: k=8; break; case 0 xdb: k=9; break; case 0 xdd: k=10;break; case 0 xde: k=11;break; case 0 xe7: k=12;break; case 0 xeb: k=13;break; 27TM27电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页: case 0 xed: k=14;break; case 0 xee: k=15;break; void main(void) while(1) P2=0 xff; Getch( ); P0=seg7codek; /查表查表LED输出输出 P1=0 xf0; /输出相同的四位数据输出相同的四位数据。 28TM28电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 (9 9)任务:按键中断识别)任务:按键中断识别要求:要求:采用中断技术,每按一下按键,计数器加采用中断技术,每按一下按键,计数器加1 1,并用,并用LED LED 显示出来,注显示出来,注意只显示意只显示2 2位十进制数。位十进制数。原理:原理:以上的两个关于按键识别的实验的程序都是采用扫描的方式来实现的以上的两个关于按键识别的实验的程序都是采用扫描的方式来实现的,CPUCPU的利用率比较低;按键判断还可以用中断方式来判断。中断方式可以满的利用率比较低;按键判断还可以用中断方式来判断。中断方式可以满足快速响应的要求。足快速响应的要求。29TM29电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 程序程序:#include unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;unsigned char dispcount=0; /计数计数sbit gewei=P13; /个位选通定义个位选通定义sbit shiwei=P12; /十位选通定义十位选通定义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 /显示一位数显示一位数 31TM31电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:shiwei=1;gewei=0;P0=tabledispcount;Delay(8); void main() TCON=0 x01; /下降沿触发下降沿触发 IE=0 x81; /开总中断和允许外部中断开总中断和允许外部中断 while(1) /循环执行循环执行 LED( ); /调用显示函数调用显示函数/*课课后思考:后思考:在程序在硬件运行过程中在程序在硬件运行过程中, ,有时候按一下键会加几个数有时候按一下键会加几个数, ,是因为没有去除按键干是因为没有去除按键干扰请您想一想怎么消除抖动扰请您想一想怎么消除抖动. ./*/ 32TM32电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 (1010)任务:定时器)任务:定时器T0T0的应用的应用9.99.9秒计时设计秒计时设计要求:要求:开始时,显示开始时,显示“00”00”,第,第1 1 次按下次按下INT0 INT0 后就开始计时。后就开始计时。第第2 2 次按次按INT0 INT0 后,计时停止。第后,计时停止。第3 3 次按次按INT0 INT0 后,计时归零。后,计时归零。33TM33电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 程序程序:#include unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66, 0 x6d,0 x7d,0 x07, 0 x7f,0 x6f, ;unsigned char sec; /定义计数值,每过定义计数值,每过1/10 秒,秒,sec 加一加一unsigned char keycnt=1; /键值判断键值判断unsigned int tcnt; /中断次数计数器中断次数计数器 sbit gewei=P13; /个位选通定义个位选通定义sbit shiwei=P12; /十位选通定义十位选通定义sbit INT_0=P32; /按键定义位按键定义位void Delay(unsigned int tc) /延时程序延时程序while( tc != 0 )unsigned int i;for(i=0; i0;i-) /延时去干扰延时去干扰for(j=248;j0;j-);35TM35电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:if(INT_0=0)switch(keycnt) /按下次数判断按下次数判断case 1: /第一次按下第一次按下TH0=0 x06; /对对TH0 TL0 赋值赋值TL0=0 x06;TR0=1; /开始定时开始定时keycnt=2; /为第二次做准备为第二次做准备break;case 2: /第二次按下第二次按下TR0=0; /定时结束定时结束keycnt=3; /为第三次按下做准备为第三次按下做准备break;case 3: /第三次按下第三次按下keycnt=1; /重新开始判断键值重新开始判断键值sec=0; /计数重新从零开始计数重新从零开始break; 36TM36电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:while(INT_0=0);void t0(void) interrupt 1 using 0 /定时中断服务函数定时中断服务函数tcnt+; /每过每过250us,tcnt 加一加一if(tcnt=400) /计满计满400 次(次(0.1 秒)时秒)时tcnt=0; /重新再计重新再计sec+;if(sec=100) /定时定时10 秒,在从零开始计时秒,在从零开始计时sec=0;37TM37电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:void main(void)TMOD=0 x02; /定时器工作在方式定时器工作在方式2 自动重装方式自动重装方式ET0=1; /允许允许T0 产生中断产生中断EA=1; /开总中断开总中断sec=0;while(1)KEY();LED();38TM38电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 电子钟电路及程序示例:电子钟电路及程序示例:4位共阴数码显示管123456789RP1220VCCS112S29S38S46a11b7c4d2e1f10g5dp3U74DPY2-KDG1DG2DG3DG4Y111.0592MC130pfC230pfVCCEA/VPP31XTAL119XTAL218RESET9P3.7(RD)17P3.6(WR)16P3.2(INT0)12P3.3(INT1)13P3.4(T0)14P3.5(T1)15P1.01P1.12P1.23P1.34P1.45P1.5(MOSI)6P1.6(MISO)7P1.7(SCK)8P0.039P0.138P0.237P0.336P0.435P0.534P0.633P0.732P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.728PSEN29ALE/PROG30P3.1(TXD)11P3.0(RXD)10GND20VCC40U1AT89S52X2X1C3 10USJ17SW-PBR210KRSTVCC.电路原理图:电路原理图:39TM39电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 C C语言源程序:语言源程序:#includeunsigned char code dis_code11=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07, 0 x7f,0 x6f,0 x80;unsigned char data dis5;sec=0,min=11,hou=17,cou=0,sec_flag=0,sansuo_flag=0,dis_r=0;/*void main() P0=0 x00; P2=0 xff;TMOD=0 x11; TH0=0 xec;TL0=0 x78; /T0十毫秒定时十毫秒定时 TH1=0 xfe; TL1=0 x0c; /T1一毫秒定时一毫秒定时 EA=1; ET0=1;ET1=1; TR0=1; TR1=1; while(1) if(sec_flag=1) sec_flag=0; 40TM40电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:void time0(void) interrupt 1 cou+; if(cou=50) sansuo_flag=sansuo_flag; if(cou=100) sec_flag=1;cou=0;sec+; if(sec=60) sec=0; min+; if(min=60) min=0; hou+; if(hou=23) hou=0; TH0=0 xec; TL0=0 x78;41TM41电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:void time1(void) interrupt 3dis0=min%10;dis1=min/10;dis2=10;dis3=hou%10;dis4=hou/10; P0=dis_codedisdis_r; switch(dis_r) case 0:P2=0 xef;dis_r+;break; case 1:P2=0 xdf;dis_r+;break; case 2: if(sansuo_flag=0) P2=0 xcf; else P2=0 xff; dis_r+;break; case 3:P2=0 xbf;dis_r+;break; case 4:P2=0 x7f;dis_r+;break; default:dis_r=0;P2=0 xff; TH1=0 xfe; TL1=0 x0c;42TM42电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 如何加入按键校时程序并用如何加入按键校时程序并用ProteusProteus软件仿真软件仿真43TM43电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 含校时功能的数字电子钟完整含校时功能的数字电子钟完整C C语言源程序代码语言源程序代码#includeunsigned char code dis_code10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;unsigned char data dis4;unsigned char sec=0,min=59,hou=22,cou=0,sansuo_flag=0,dis_r=0;unsigned char int0_flag,int1_flag;/以下以下10ms延时函数延时函数/void delay10ms(void) unsigned char i,j; for(i=20;i0;i-) for(j=248;j0;j-); /以下为主函数以下为主函数/void main(void) P0=0 x00; P2=0 xff;TMOD=0 x11; TH0=0 xec;TL0=0 x78; /T0十毫秒定时十毫秒定时 TH1=0 xfe;TL1=0 x0c; /T1一毫秒定时码一毫秒定时码 EA=1;EX0=1;EX1=1; IT0=1;IT1=1;ET0=1;ET1=1;TR0=1;TR1=1;44TM44电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:while(1) /先判断是否有分钟校时键按下先判断是否有分钟校时键按下/ if(int0_flag=1) EX0=0;int0_flag=0; delay10ms(); if(P3_2=0) min+;EX0=1; if(min=60) min=0; /再判断是否有小时校时键按下再判断是否有小时校时键按下/ if(int1_flag=1) EX1=0;int1_flag=0; delay10ms(); if(P3_3=0) hou+;EX1=1; if(hou=24) hou=0; 45TM45电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:void int0(void) interrupt 0 /外部中断外部中断0函数函数/ int0_flag=1;void time0(void) interrupt 1 /定时器定时器0中断函数中断函数/ cou+; if(cou=50) sansuo_flag=sansuo_flag; if(cou=100) cou=0;sec+; if(sec=60) sec=0; min+; if(min=60) min=0; hou+; if(hou=24) hou=0; TH0=0 xec; TL0=0 x78;46TM46电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 续前页:续前页:void int1(void) interrupt 2 /外部中断外部中断1函数函数/ int1_flag=1;/以下为定时器以下为定时器1中断函数中断函数/void time1(void) interrupt 3dis0=min%10;dis1=min/10;dis2=hou%10;dis3=hou/10; switch(dis_r) case 0:P2=0 xef;P0=dis_codedisdis_r;dis_r+;break; case 1:P2=0 xdf;P0=dis_codedisdis_r;dis_r+;break; case 2:P2=0 xbf; if(sansuo_flag=0) P0=dis_codedisdis_r|0 x80; else P0=dis_codedisdis_r; dis_r+;break; case 3:P2=0 x7f;P0=dis_codedisdis_r;dis_r+;break; default:dis_r=0;P2=0 xff; TH1=0 xfe; TL1=0 x0c;47TM47电子系统设计电子系统设计 成都理工大学工程技术学院成都理工大学工程技术学院 石坚石坚 (1111)任务:)任务:PCPC机与单片机通信机与单片机通信要求:要求:单片机串口通信的应用,通过串口,电脑和单片机系统进行通信。电单片机串口通信的应用,通过串口,电脑和单片机系统进行通信。电脑作为上