仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
说明: (1)当东西方向为绿灯时,此时南北方向为红灯; (2)当东西方向绿灯闪烁时,南北方向依旧保持红灯; (3)当东西方向绿灯闪烁完毕时,变为黄灯,南北方向依旧是红灯; (4)当东西方向黄灯结束后,变为红灯,南北方向变为绿灯; (5)南北方向绿灯闪烁时,东西方向依旧保持红灯; (6)当南北方向绿灯闪烁完毕时,变为黄灯,东西方向依旧是红灯; (7)当南北方向黄灯结束后,变为红灯,东西方向变为绿灯; (8)重复(1)。 交通灯控制系统的总体设计方案共有五个部分组成,分别是:单片机AT89C52、红、绿、黄灯显示电路、LED数显时间电路、晶振及复位控制电路。在进行仿真调试过程中,程序运行正确,五个部分就同时工作,从而实现了交通灯的基本功能及调时功能。 一个完整的交通灯相当于一个简单的单片机系统,该系统有交通灯设置电路、单片机、显示电路等构成。单片机是集成的IC芯片,只需根据实际设计要求选型。其他部分都需要根据应用要求和性能指标自行设计。首先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。再转状态3,东西绿灯通车,南北红灯。过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1。 单片机代码如下: - #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//七段数码管0~9的对应电平
- uchar time[4]; //time[]={南北灯十位,南北灯个位,东西灯十位,东西灯个位}
- uchar t3,t2,t1,t0;
- //单独设置两个绿灯对应端口便于设置闪烁
- sbit NSG=P2^3;//南北绿灯
- sbit EWG=P2^0;//东西绿灯
- sbit BEEM=P2^7; //语音
- void delay(uint ms)//延迟函数,功能为以毫秒为单位延迟,待微调,不要在意细节。
- {
- uint i;
- while(ms--)
- {
- for(i=0;i<81;i++);
- }
- }
- void timer(uchar i) //时间设置函数
- {
- switch (i)
- {
- case 0:{time[3]=num[t3];time[2]=num[--t2];time[1]=num[t1];time[0]=num[--t0];break;}
- //代表把time数组里的四个表示时间的电平设为对应t3、t2、t1、t0的时间的电平
- case 1:{t3=2;t2=8;t1=3;t0=1;break;} //南北红灯东西绿灯
- case 2:{t3=0;t2=4;t1=0;t0=4;break;} //黄灯
- case 3:{t3=3;t2=1;t1=2;t0=8;break;} //南北绿灯东西红灯
- }
- if(t2==0){t2=10;t3--;}
- if(t0==0){t0=10;t1--;}
- }
- void TR(uchar Gr) //数码管时间控制函数,通过片选将两个方向四个数码管作为一组进行刷新
- {
- uint i,j;
- for(i=1;i<=25;i++)
- {
- for(j=0;j<=3;j++)
- {
- P0=~(1<<j);P1=time[j];delay(10);
- }
- if(Gr==1 && i==12)EWG=0;
- if(Gr==1 && i==24)EWG=1;
- if(Gr==2 && i==12)NSG=0;
- if(Gr==2 && i==24)NSG=1;
- }
- }
- void main()
- {
- delay(500);
- while(1)
- {
- uint i;
- timer(1);P2=0x1e;
- for(i=1;i<=22;i++){timer(0);TR(0);}
- for(i=1;i<=5;i++){timer(0);TR(1);}
- timer(2);P2=0x1d;
- for(i=1;i<=3;i++){timer(0);TR(0);}
- timer(3);P2=0x33;
- for(i=1;i<=22;i++){timer(0);TR(0);}
- for(i=1;i<=5;i++){timer(0);TR(2);}
- timer(2);P2=0x2b;
- for(i=1;i<=3;i++){timer(0);TR(0);}
- }
- }
复制代码
全部资料51hei下载地址:
交通灯.zip
(24.95 KB, 下载次数: 65)
|