该【模拟交通控制灯设计 】是由【学锋】上传分享,文档一共【20】页,该文档可以免费在线阅读,需要了解更多关于【模拟交通控制灯设计 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..模拟交通控制灯设计:..交通灯远程控制灯的设计一、总体设计1、任务交通灯的任务要求为:模拟十字路口的交通灯的亮、灭及闪烁控制及时间显示。.基本工作原理:根据交通灯的亮灭情况,可以分为四种状态,利用定时计数器每5毫秒产生一次中断,完成对LED显示模块的刷新,红绿灯的切换。通过串口对交通灯进行远程控制,实现pc机和单片机之间的通信程序编写,学习单片机和pc机之间的串口连接方法和编程技巧。2、要求设计并实现单片机交通灯控制系统,实现以下三种情况下的交通灯控制。(1)正常情况下双方向轮流点亮。(2)特殊情况时A道运行。(3)有紧急车辆通行时,AB道均为红灯。紧急情况优先级高于况。.1/.3/.5//.1//.5//..2/.4/.6/WR**********.////////A1**********///././/、-D9F:..本任务实现用pc机作为控制机、单片机控制信号灯为从机的远程控制系统。主从机双方除了要有一定的通信格式,波特率外,还要约定一些握手应答信号,即通信协议。通信协议如下:二、硬件设计1、根据总体设计要求,确定系统功能接口,设计出系统的电路原理图。2、若不考虑左行转弯,则南北方向只用红、绿、黄3只灯控制,东西方向也只用红、绿、黄3只灯控制,即共用6只灯。不必对单片机的I/O口进行扩展。3、4个共阳极数码管自右至左以两位数的形式显示秒数。为了保证数码管的亮度,必须保证输入电流的大小,因此,选用PNP型三极管作为位驱动放大器。如下图::..分析可知,三极管相当于反向器,数码管位选低电平有效。4、按键模拟紧急情况和特殊情况的发生,当s1、s2为高电平时(不按按键时)表示正常情况,当s1为低电平时表示紧急情况,s1信号接至INT0*引脚,s2为低电平时表示特殊情况,s2信号接至INT1*引脚(若为矩阵式键盘,可采用扫描方式识别按键)。三、软件设计1、::..A通行,B禁止110,1011EB状态2:交替A绿灯变换闪,B禁止101011状态3:A警告,B禁止011110DE状态4:A禁,B通01110,1状态5:交替A禁,B变换闪011101DD状态6:A禁,B警告2、函数流程图:..开中断1A绿灯,B关延时保护A绿灯闪开A黄灯,BA绿灯,B延延时A红灯,B关延时恢复B绿灯闪开B黄灯,A中断延保护A红灯,B延时恢复返:..四、硬件电路图:..五、源程序#include<>#defineucharunsignedchar#defineuintunsignedintucharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharDispX[]={0xfb,0xf3,0xfb,0xeb,0xde,0xdf,0xde,0xdd};voidAFangXing(void);//函数声明voidShanShuo(uchar*PTR);voidJingGao(uchar*PTR);voidBFangXing(void);voiddelay_5ms(void)//5ms定时{uchari;for(i=0;i<5;i++)//T0方式1,定时1毫秒,循环5次即实现5毫秒定时{TH0=0xfc;TL0=0x18;:..TR0=1;//T/C0开始工作while(!TF0);TF0=0;}}voidint_0()interrupt0{uinti,x,y,l,m;EA=0;//关中断i=P1;l=TH1;m=TL1;EA=1;P1=0xdb;for(x=10;x>0;x--){for(y=100;y>0;y--){P2=0xf5;P0=led[x%10];delay_5ms();P2=0xfa;P0=led[x/10];//紧急情况倒计时:..delay_5ms();}}EA=0;P1=i;TH1=l;TL1=m;EA=1;}voidint_1()interrupt2//{uinti,l,m,x,y;EA=0;//关中断i=P1;l=TH1;m=TL1;EA=1;P1=0xF3;for(x=10;x>0;x--){for(y=100;y>0;y--){P2=0xf5;P0=led[x%10];:..P2=0xfa;P0=led[x/10];//delay_5ms();}}EA=0;P1=i;TH1=l;TL1=m;EA=1;}voidmain()//主函数{uchar*PTR=&DispX;TMOD=0x21;//工作方式寄存器TMOD用于选择定时器/计数器的工作模式和工作方式,由TMOD可知,定时器T1工作在方式2,定时器T0工作在方式1TH1=0xf4;//由波特率为2400kb/s,,可知定时器T1的初值,又因为定时器T1采用方式2,8位初值自动重装入:..位定时器/计数器,故TH1,TL1初值相同TL1=0xf4;TR0=1;TR1=1;SCON=0x50;//SCON为串行口控制寄存器,采用方式1,允许串行接收PCON=0x00;//设置波特率SMODIE=0x95;//IE为中断允许寄存器,允许串行口中断,允许外部中断1中断,允许外部中断0中断IP=0x11;//串行口中断、外部中断0设定为高优先级中断IT0=1;//外部中断0的中断请求信号为边沿触发(下降沿有效)IT1=1;//外部中断1的中断请求信号为边沿触发(下降沿有效)while(1){AFangXing();//A道绿灯B道红灯ShanShuo(PTR);//A绿灯闪烁2次,B道红灯ShanShuo(++PTR);ShanShuo(++PTR);:..JingGao(++PTR);//AB道红灯BFangXing();//B道绿灯A道红灯ShanShuo(++PTR);//B绿灯闪烁2次,A道红灯ShanShuo(++PTR);ShanShuo(++PTR);JingGao(++PTR);//B道黄灯A道红灯PTR=&DispX;}}voidAFangXing(void){uchari,j;P1=0xf3;//A道绿灯B道红灯for(i=55;i>0;i--){for(j=50;j>0;j--){P2=0xfd;P0=led[i%10];//显示A方向秒个位delay_5ms();P2=0xfe;:..A方向秒十位delay_5ms();P2=0xf7;P0=led[(i+5)%10];//显示B秒个位delay_5ms();P2=0xfb;P0=led[(i+5)/10];//显示B秒十位delay_5ms();}}}voidShanShuo(uchar*PTR){uchari,j;for(i=1;i>0;i--){P1=*PTR;for(j=25;j>0;j--){P2=0xfd;P0=led[i%10];//显示A方向秒个位delay_5ms();:..P0=led[i/10];//A方向秒十位delay_5ms();P2=0xf7;P0=led[i%10];//显示B方向个位delay_5ms();P2=0xfb;P0=led[i/10];//显示B方向十位delay_5ms();}}}voidJingGao(uchar*PTR){uchari,j;P1=*PTR;for(i=2;i>0;i--){for(j=50;j>0;j--){P2=0xfd;P0=led[i%10];//显示A方向秒个位:..delay_5ms();P2=0xfe;P0=led[i/10];//显示A方向秒十位delay_5ms();P2=0xf7;P0=led[i%10];//显示B方向个位delay_5ms();P2=0xfb;P0=led[i/10];//显示B方向十位delay_5ms();}}}voidBFangXing(void){uchari,j;P1=0xde;//A道红灯B道绿灯for(i=55;i>0;i--){for(j=50;j>0;j--){P2=0xfd;:..P0=led[(i+5)%10];//显示A方向秒个位delay_5ms();P2=0xfe;P0=led[(i+5)/10];//显示A方向秒十位delay_5ms();P2=0xf7;P0=led[i%10];//显示B方向个位delay_5ms();P2=0xfb;P0=led[i/10];//显示B方向秒十位delay_5ms();}}}voidserial()interrupt4{uchari;EA=0;if(RI==1){RI=0;if(SBUF==0x01):..{SBUF=0x01;while(!TI);TI=0;i=P1;P1=0xdb;while(SBUF!=0x02){while(!RI);RI=0;}SBUF=0x02;while(!TI);TI=0;P1=i;EA=1;}else{EA=1;}:..}}六、设计总结本次实训运用Keil作为编译环境,用Proteus作为仿真软件。然后将程序下载到自己焊接的硬件电路中。由于Proteus软件功能的局限性,当仿真电路的数码管位选加上三极管作为驱动放大器时,数码管不能成功显示要显示的数,只显示8888或者9999这两个数,但为了与硬件电路一致,用Proteus仿真时改用非门代替三极管。当老师给我们布置这个课程设计时,我感到无从下手,不知道该怎样写程序。后来通过读老师的程序,慢慢明白了,知道了如何去做。对于这样的课程设计,应该先用Proteus画出仿真电路,然后根据电路图编写程序。通过编写程序,对单片机C语言有了更进一步的掌握。经过本次设计对Keil和Proteus更加熟悉了。在焊接电路的过程中,一定要注意:不能虚焊,更不能连焊,对某个元件焊接时间不能太长,焊锡不要用太多,容易造成连焊。电路上电前一定要仔细检查单片机等芯片是否装反,确认无误后再下载程序。总的来说,通过本次课程设计,学到了很多知识,为以后再用单片机做电路时积累了经验。
模拟交通控制灯设计 来自淘豆网m.daumloan.com转载请标明出处.