|
城市道路错综复杂,相互交错,交通灯是城市交通的重要指挥系统。交通信号灯作为管制交通流量、提高道路通行能力的有效手段,对减少交通事故有明显效果。但是车流量是随时变化的,而传统的交通灯模式采用的是定时控制,反而容易造成交通堵塞。因此设计一种基于Proteus与单片机的交通灯控制系统的设计与仿真,对减少交通事故,缓解交通阻塞,提高畅通率具有很重要的现实意义
东西、南北两干道交于一个十字路口,各干道有一组交通指示灯,每一个状态方向上均有一组红、绿灯,即一组交通指示灯都有左转、直行、右转3组红、绿灯和一个黄灯,指示车辆和行人安全通行.红灯点亮禁止通行,绿灯点亮允许通行.黄灯闪烁提示人们注意交通灯状态即将切换
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code smg_dw[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳0-9
- sbit beiR=P0^0;
- sbit beiY=P0^1;
- sbit beiG=P0^2;
- sbit nanR=P0^3;
- sbit nanY=P0^4;
- sbit nanG=P0^5;
- uint a,b,c,type,j,i;
- void Delay(uint x) //延时
- {
- uchar i;
- while(x--)for(i=0;i<120;i++);
- }
- void delay_ms(uint q) //延时
- {
- uint i,j;
- for(i=q;i>0;i--)
- for(j=141;j>0;j--);
- }
- void shumaguan(uint k) //数码管显示
- {
- b=k/10;
- c=k%10;
- P3=11111101;
- P2=smg_dw[b];//选段码
- delay_ms(20);//延时5ms
- P3=11111110;
- P2=smg_dw[c];//选段码
- delay_ms(20);//延时5ms
- }
- main()
- {
- TMOD=0x01; //设置定时器T0为工作方式1定时
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TR0=1; //启动T0计数
- ET0=1; //允许T0中断
- EX0=1; //允许外部中断0中断
- EA=1; //开中断
- IT0=1; //允许外部中断0为边沿触发方式
- a=10; //倒计时10s
- type=1;
- while(1){
- switch(type)
- {
- case 1: //东西向绿灯与南北向红灯亮
- beiR=0;beiY=1;beiG=1;
- nanR=1;nanY=1;nanG=0;
- shumaguan(a);
- break;
- case 2: //东西向黄灯闪烁,绿灯关闭
- if(a%2!=0)
- {
- beiR=1;beiY=0;beiG=1;
- }
- if(a%2==0)
- {
- beiR=1;beiY=1;beiG=1;
- }
- shumaguan(a);
- break;
- case 3: //东西向红灯,南北向绿灯亮
- beiR=1;beiY=1;beiG=0;
- nanR=0;nanY=1;nanG=1;
- shumaguan(a);
- break;
- case 4: //南北向黄灯闪烁3次
- if(a%2!=0)
- {
- nanR=1;nanY=0;nanG=1;
- }
- if(a%2==0)
- {
- nanR=1;nanY=1;nanG=1;
- }
- shumaguan(a);
- break;
- }
- }
- }
- void T0_int0(void) interrupt 1 //中断
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- i++;
- if(i==20)
- {
- i=0;
- a--;
- if(a==0)
- {
- if(type==1||type==3)
- {
- a=5;
- }
- if(type==2||type==4)
- {
- a=10;
- }
- type++;
- if(type==6)
- {
- type=1;
- }
- }
- }
- }
复制代码 |
-
交通灯.png
(29.01 KB, 下载次数: 138)
交通灯
-
-
交通灯.rar
51.68 KB, 下载次数: 47, 下载积分: 黑币 -5
|