1、n电子技术锡焊技艺电子技术锡焊技艺n常用元器件及仪器常用元器件及仪器n单片机系统设计概述单片机系统设计概述n单片机开发系统的使用单片机开发系统的使用n单片机系统设计实例单片机系统设计实例n1、确定任务确定任务n2、总体设计总体设计n3、硬件设计硬件设计n4 4、软件设计、软件设计n5 5、系统调试、系统调试1、设计任务:交通灯控制系统设计、设计任务:交通灯控制系统设计n设计要求设计要求n1 1)东西道()东西道(A A)和南北道()和南北道(B B)上均有车)上均有车辆要求通过时,辆要求通过时,A A、B B道轮流放行。道轮流放行。n2 2)有紧急车辆要求通过时,系统要能禁)有紧急车辆要求通过
2、时,系统要能禁止普通车辆通行,止普通车辆通行,A A、B B道均为红灯,紧道均为红灯,紧急车由急车由K1K1开关模拟。开关模拟。n3 3)绿灯转换为红灯时黄灯亮)绿灯转换为红灯时黄灯亮 5 5秒钟。秒钟。n4 4)能显示剩余时间。)能显示剩余时间。n5 5)能对时间进行调整。)能对时间进行调整。2、总体设计、总体设计单片机键盘LED数码管显示LED指示灯复位电路晶振电路3、硬件设计、硬件设计n1 1)单片机选型:)单片机选型:AT89S51AT89S51n2 2)复位电路:上电)复位电路:上电+按钮按钮n3 3)晶振电路)晶振电路n4 4)键盘:独立键盘)键盘:独立键盘+中断中断n5 5)数码
3、管显示:)数码管显示:LEDLEDn6 6)LEDLED指示灯显示指示灯显示3.1单片机基本电路设计单片机基本电路设计n1 1)复位电路:上电)复位电路:上电+按钮按钮n2 2)晶振电路)晶振电路n3 3)EAEA处理处理n4 4)电源设计)电源设计3.2键盘电路设计键盘电路设计较合理的原理图形式较合理的原理图形式1较合理的原理图形式较合理的原理图形式23.3指示灯电路设计指示灯电路设计3.4 剩余时间显示电路设计剩余时间显示电路设计LEDLED数码管的数码管的结构结构:(1 1)共阳)共阳(2 2)共阴)共阴公共阳极公共阳极h g f e d c b ah g f e d c b aa ab
4、 bc cd dg ge ef fh h公共阴极公共阴极h g f e d c b ah g f e d c b aa ab bc cd dg ge ef fh hh g f ah g f a高电平点亮高电平点亮低电平点亮低电平点亮接高电平接高电平接地接地共阳共阳LEDLED数码管:数码管:公共端公共端(字位字位)接高电平,接高电平,笔划笔划(字段字段)置为低电平置为低电平就被点亮了就被点亮了比如要显示比如要显示“0”0”须令须令a b c d e fa b c d e f 为为“0 0”电平,电平,g hg h为为“1 1”电平。电平。共阳极共阳极h g f e d c b ah g f e
5、 d c b aa ab bc cd dg ge ef fh hh g f e d c b ah g f e d c b a累加器累加器 A1 1 0 0 0 0 0 01 1 0 0 0 0 0 00C0H=“0”0C0H=“0”3.4 剩余时间显示电路设计剩余时间显示电路设计4、软件设计、软件设计东西绿灯东西绿灯南北红灯南北红灯东西黄灯东西黄灯南北红灯南北红灯东西红灯东西红灯南北绿灯南北绿灯东西红灯东西红灯南北黄灯南北黄灯控制流程:控制流程:4、软件设计、软件设计n程序组成:程序组成:n初始化(系统初始化,中断初始化)初始化(系统初始化,中断初始化)n定时(交通灯状态转换)定时(交通灯状态
6、转换)n显示(指示灯、剩余时间)显示(指示灯、剩余时间)n参数调整参数调整n紧急状态紧急状态n主程序主程序入口初始化显示入口状态灯显示南北剩余时间显示东西剩余时间显示返回定时中断入口当前显示时间减11秒到?是否有一个为0?状态变换判断状态S东西绿灯东西绿灯南北红灯南北红灯东西黄灯东西黄灯南北红灯南北红灯东西红灯东西红灯南北绿灯南北绿灯东西红灯东西红灯南北黄灯南北黄灯返回YNYNS=0S=1S=2S=3中断0入口更换当前显示值:南北:绿灯时间东西:黄灯时间K3键按下?返回N调显示子程序绿灯+1K4键按下?黄灯+1K5键按下?绿灯时间处理黄灯时间处理中断1入口更换当前显示值:南北0,东西0状态灯:
7、红色K5键按下?返回N调显示子程序关中断开中断Y入口初始化显示n初始化程序初始化程序n#include /对单片机的口进行了定义对单片机的口进行了定义n#define uint unsigned intn#define uchar unsigned charnuchar code a10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;/段码组合段码组合,共阴极共阴极nuchar code b4=0 xfe,0 xfd,0 xfb,0 xf7;/位码组合,低有效位码组合,低有效nuchar code c4=0 x78,0
8、xb8,0 xcc,0 xd4;/不同状态下的不同状态下的LEDnuchar green=30,yellow=5;nuchar m=35,n=30,s=0,cnt=0;nvoid delay(uchar t);nuchar key();nvoid display();nvoid main(void)nnwhile(1)nn display();nn状态灯显示南北剩余时间显示东西剩余时间显示返回入口nvoid display()nnP1=cs;nP2=0 xfe,P0=am%10;ndelay(20);nP2=0 xfd,P0=am/10;ndelay(20);nnP2=0 xfb,P0=an%
9、10;ndelay(20);nP2=0 xf7,P0=an/10;ndelay(20);nnvoid delay(uchar t)/延时延时0.1*n毫秒毫秒 0 n n uchar i;n do n n for(i=0;i=20)n s+;n if(s3)n s=0;n switch(s)n case 0:m=green+yellow,n=green;break;n case 1:n=yellow;break;n case 2:m=green,n=green+yellow;break;n case 3:m=yellow;break;n n n中断1入口更换当前显示值:南北0,东西0状态灯:红
10、色K5键按下?返回N调显示子程序关中断开中断Ynvoid int1(void)interrupt 2nP1=0 xd8,P0=a0;nEA=0;nfor(;)n P2=0 xfe;n delay(20);n P2=0 xfd;n delay(20);n P2=0 xfb;n delay(20);n P2=0 xf7;n delay(20);n if(P3_7=0)n EA=1;nbreak;n n n中断0入口更换当前显示值:南北:绿灯时间东西:黄灯时间K3键按下?返回N调显示子程序绿灯+1K4键按下?黄灯+1K5键按下?绿灯时间处理黄灯时间处理nvoid int0(void)interrup
11、t 0n EA=0;n while(1)n m=green;n n=yellow;n display();n if(P3_5=0)n delay(40);nif(P3_5=0)n n while(!P3_5)n display();n green+;n if(green=70)/绿灯最长绿灯最长70Sn green=0;n n nif(P3_6=0)nndelay(40);nif(P3_6=0)n nwhile(!P3_6)ndisplay();nyellow+;nif(yellow=20)/黄灯最长黄灯最长20Snyellow=0;nnnif(P3_7=0)ndelay(40);nif(P3_7=0)nnwhile(!P3_7)ndisplay();nm=green+yellow;nn=green;ns=0;nEA=1;nbreak;nnnn