51单片机控制交通灯原理图及C语言程序

合集下载

51单片机的交通灯c程序

51单片机的交通灯c程序

#include<reg52.h>#define uint unsigned int#define uchar unsigned charchar TAB[11]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7,0x00}; //数码管状态表void delay_100ms(uint );void delay(uint );void display(uint );void yejian(void);int i,k,t,flag=0;sbit A1=P1^0;sbit A2=P1^1;sbit A3=P1^2;sbit A4=P1^3;sbit SB=P3^7;void main () //主程序{EA=1;//初始化,开所有中断ET1=1;//开定时器T1中断TMOD=0x10;//设置定时器工作方式2TH1=(65536-50000)/256;//设置定时器初值TL1=(65536-50000)%256;while(1){if(SB==0) flag=1;if(flag==1) yejian();P2=0x69;k=8;while(k>0)//状态1南北红灯,东西绿灯{if(SB==0) flag=1;if(flag==1) yejian();TR1=1;//开启T1while(t!=10) display(k); //显示倒计时if(t==10) t=0;k--;TR1=0;//关闭T1}if(k==0) k=3;while(k>=0)//状态2南北红灯,东西绿灯闪烁三次{if(SB==0) flag=1;if(flag==1) yejian();P2=0x69;delay_100ms(5);P2=0x41;delay_100ms(5);k--;}k=2;flag=1;while(k>=0)//状态3南北红灯,东西黄灯{if(SB==0) flag=1;if(flag==1) yejian();P2=0x7d;delay_100ms(10);k--;}P2=0x96;k=8;while(k>0)//状态4南北绿灯,东西红灯{if(SB==0) flag=1;if(flag==1) yejian();TR1=1;//开启T1while(t!=10) display(k);// 显示倒计时if(t==10) t=0;k--;TR1=0;//关闭T1}k=3;while(k>=0)//状态5东西红灯,南北绿灯闪烁三次{if(SB==0) flag=1;if(flag==1) yejian();P2=0x96;delay_100ms(5);P2=0x14;delay_100ms(5);k--;}k=2;while(k>=0)//状态6东西红灯,南北黄灯{if(SB==0) flag=1;if(flag==1) yejian();P2=0xd7;delay_100ms(10);k--;}}}void yejian(void){uint m=k;while(flag==1){if(SB==1) flag=0;k=11;P2=0xff;delay_100ms(5);P2=0x00;delay_100ms(5);}k=m;}void delay_100ms(uint z)//显示数码管延时100ms {TR1=1;//开启T1while(t!=z) display(k);if(t==z){t=0;TR1=0;//关闭T1}}void exter0() interrupt 3//定时器中断程序{TH1=(65536-50000)/256;TL1=(65536-50000)%256;t++;}void display(uint i)//倒计时显示{A1=A2=A3=A4=0;A4=1;P0=TAB[i];//显示第一位数值delay(4);A4=0;A3=1;P0=TAB[i];//显示第二位数值delay(4);A3=0;A2=1;P0=TAB[i];//显示第三位数值delay(4);A2=0;A1=1;P0=TAB[i];//显示第四位数值delay(4);A1=0;}void delay(uint z)//软件延时{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}。

51单片机设计交通灯仿真图

51单片机设计交通灯仿真图
}
}
void init1()//第一个状态:主干道、支干道均亮红灯5S
{
uint temp;
temp=6;//变量赋初值
TMOD=0x01;//定时器0工作于方式1
TH0=0x4c;
TL0=0x00;//定时器赋初值
EA=1;//开外部中断
ET0=1;//开定时中断
TR0=1;//开定时器0
while(1)
#define uchar unsigned char//宏定义
#define uint unsigned int//宏定义
sbit RED_ZHU = P1^0;
sbit YELLOW_ZHU = P1^1;
sbit GREEN_ZHU = P1^2;
sbit RED_ZHI = P1^3;
sbit YELLOW_ZHI = P1^4;
delay0(5);
}
void xint0() interrupt 0 //外部中断0,这里用2是INT1的优先级为0
{
LED_ON();
}
void LED_ON()//外部中断0显示子程序
{
RED_ZHI=0;
RED_ZHU=0;
GREEN_ZHI=1;
GREEN_ZHU=1;
YELLOW_ZHI=1;
}
/*********************************************************
500ms延时函数
晶振:11.0592MHz
*********************************************************/
void delay(unsigned char j)

基于80C51单片机的交通灯C语言源程序

基于80C51单片机的交通灯C语言源程序

#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit SH_CP=P2^0;sbit DS=P2^1;sbit ST_CP=P2^2;uchar temp;uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; void NB_tong();void DX_tong();void NBY_show();void DXY_show();sbit RED_A=P1^0;//A代表NB南北sbit YELLOW_A=P1^1;sbit GREEN_A=P1^2;sbit RED_B=P1^3;//B代表DX东西sbit YELLOW_B=P1^4;sbit GREEN_B=P1^5;sbit K1=P3^0;sbit K2=P3^1;sbit K3=P3^3;sbit SPK=P3^7;//蜂鸣器uchar time=0,Count=0;//--------------------------------//延时//--------------------------------void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}//---------------------------------------//74HC595的驱动//---------------------------------------void In_595(){uchar i;for(i=0;i<8;i++){temp<<=1;DS=CY;SH_CP=1;_nop_();_nop_();SH_CP=0;}void Out_595(){ST_CP=0;_nop_();ST_CP=1;_nop_();ST_CP=0;}//---------------------------------------//T0定时器定时及各种情况下灯亮的调用//---------------------------------------void Timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;Count++;time=time%60;if(Count==20){time++;Count=0;}if(time<=30) NB_tong();if((time>30)&&(time<=35)) NBY_show();if((time>35)&&(time<=55)) DX_tong();if((time>55)&&(time<=60)) DXY_show();}//------------------------------------//按键处理//------------------------------------void EX_INT0() interrupt 0{if(K1==0) //K1按下强制NB南北通行,倒计时黑屏暂停;断开继续以前动作。

51单片机交通灯设计.

51单片机交通灯设计.

摘要交通信号灯是交通信号中的重要组成部分,是道路交通的基本语言,是为了加强道路交通管理,减少交通事故的发生,提高道路使用效率,改善交通状况的一种重要工具。

适用于十字、丁字等交叉路口,由道路交通信号控制机控制,指导车辆和行人安全有序地通行。

交通信号灯由红灯(表示禁止通行)、绿灯(表示允许通行)、黄灯(表示警示)组成。

分为:机动车信号灯、非机动车信号灯、人行横道信号灯、车道信号灯、方向指示信号灯、闪光警告信号灯、道路与铁路平面交叉道口信号灯。

近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制技术日益更新。

接下来将介绍基于单片机控制的交通信号灯的自动指挥系统。

交通信号灯控制方式很多。

本系统采用MSC-51系列单片机80C51和芯片74LS245为中心器件来设计交通灯控制系统。

、关键字:单片机,信号灯,控制前言道路交通信号灯是交通安全产品中的一种类别,是为了加强道路交通管理,减少交通事故的发生,提高道路使用效率,改善交通状况的一种重要工具。

适用于十字、丁字等交叉路口,由道路交通信号控制机控制,指导车辆和行人安全有序地通行。

最早的时候只有红、绿两种颜色,后来经过改良后,增加了一盏黄色的灯,红灯表示停止,黄灯表示准备,绿灯则表示通行。

之所以采用这三种颜色,一方面是三原色,其他颜色也是在此基础上调出来的,另一方面,用这三种颜色作为交通讯号也和人们的视觉结构和心理反应有关。

人的视网膜含有杆状和三种锥状感光细胞,杆状细胞对黄色的光特别敏感,三种锥状细胞则分别对红光、绿光及蓝光最敏感。

由于这种视觉结构,人最容易分辨红色与绿色。

虽然黄色与蓝色也容易分辨,但因为眼球对蓝光敏感的感光细胞较少,所以分辨颜色,还是以红、绿色为佳。

交通信号灯是交通信号指挥中的重要组成部分,是道路交通的基本语言。

交通信号灯由红灯(表示禁止通行)、绿灯(表示允许通行)、黄灯(表示警示)组成。

分为:机动车信号灯、非机动车信号灯、人行横道信号灯、车道信号灯、方向指示信号灯、闪光警告信号灯、道路与铁路平面交叉道口信号灯。

基于51单片机控制交通灯的电路图与C语言程序

基于51单片机控制交通灯的电路图与C语言程序
}
}
p2=0x12; //南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1); //南北黄灯闪烁三秒完毕
}
void main() //主函数入口处
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
东西道为人行道(20秒),南北道为车行道(60秒),黄灯延时最后三秒时,闪烁并切换。
三、硬件电路设计
此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管显示其延时值,四个红、黄、绿指示灯。硬件设计关键在于,延时显示时,要考虑到当个位数字显示时,要确保十位数字显示输出的不变。因此,可加输出锁存器。在延时最后三秒时,要让黄灯进行闪烁,并同时显示数字(这一步在软件设计上很关键)。
p2=0x12; //南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
else

51单片机用C语言实现交通灯_红绿灯_源程序

51单片机用C语言实现交通灯_红绿灯_源程序

c o d eu n s i g n e dc h a rt a b [ ] = { 0 x 3 f , 0 x 0 6 , 0 x 5 b , 0 x 4 f , 0 x 6 6 , 0 x 6 d , 0 x 7 d , 0 x 0 7 , 0 x 7 f , 0 x 6 f } ; / / 共阴数码管 0 9 u n s i g n e dc h a rD i s _ S h i w e i ; / / 定义十位 u n s i g n e dc h a rD i s _ G e w e i ;/ / 定 g n e di n tc n t ) { w h i l e ( c n t ) ; } m a i n ( ) { T M O D| = 0 x 0 1 ; / / 定时器设置 1 0 m si n1 2 Mc r y s t a l 定时器 0 ,工作方式 1 ,1 6 位定时器 T H 0 = 0 x d 8 ; / / 6 5 5 3 5 1 0 0 0 0 = 5 5 5 3 5 = D 8 F 0 (十六进制) T L 0 = 0 x f 0 ; I E =0 x 8 2 ;/ / 中断控制,E A = 1 开总中断,E T 0 = 1 :定时器 0 中断允许 T R 0 = 1 ; / / 开定时器 0 中断 P 1 = 0 x f c ; / / 红灯亮,根据红黄绿接灯的顺序。 r e d= 1 ; w h i l e ( 1 ) { P 0 = D i s _ S h i w e i ; / / 显示十位,这里实现用 8 位数码管,即左 1 位 P 2 = 0 ; d e l a y ( 3 0 0 ) ; / / 短暂延时 P 0 = D i s _ G e w e i ;/ / 显示个位,左数,2 位 P 2 = 1 ;

51单片机用C语言实现交通灯

51单片机用C语言实现交通灯

51单片机用C语言实现交通灯51 单片机用C 语言实现交通灯(红绿灯)源程序交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改。

源程序如下:#include bit red,green,yellow,turnred; //定义红、黄、绿及转红标志code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管0- 9unsigned char Dis_Shiwei;//定义十位unsigned char Dis_Gewei; //定义个位void delay(unsigned int cnt) //用于动态扫描数码管的延时程序{while(--cnt);}main() {TMOD |=0x01;//定时器设置10ms in 12M crystal 定时器0,工作方式1,16 位定时器TH0=0xd8; //65535-10000=55535=D8F0(十六进制)TL0=0xf0;IE= 0x82; //中断控制,EA=1 开总中断,ET0=1:定时器0 中断允许TR0=1; //开定时器0中断P1=0xfc;//红灯亮,根据红黄绿接灯的顺序。

red =1;while(1) {P0=Dis_Shiwei;//显示十位,这里实现用8 位数码管,即左1 位P2=0;delay(300); //短暂延时P0=Dis_Gewei; //显示个位,左数,2 位P2=1;delay(300);}}void tim(void) interrupt 1 using 1{static unsigned char second=60,count; //初值60TH0=0xd8;//重新赋值,10 毫秒定时TL0=0xf0;count++;if (count==100) {count=0;second--;//秒减1if(second==0){ //这里添加定时到0 的代码,可以是灯电路,继电器吸合等,或者执行一个程序if(red) //红灭,先转黄{red=0;yellow=1;second=4;P1=0xF3;//黄灯亮4 秒,黄灯为过渡灯,再根据情况转绿或转红}else if(yellow && !turnred){yellow=0;green=1;second=25;P1=0xCF;// 绿灯亮25 秒,}else if(green){yellow=1;green=0;second=4;P1=0xF3;//黄灯亮4 秒turnred=1;}else if(yellow && turnred) //绿灯灭,转黄灯,后红灯,turnred=1 时{red=1;yellow=0;P1=0xFC;//红灯亮60 秒second=60;turnred=0; //接下来是转黄,绿。

51单片机控制交通灯原理图及C语言程序

51单片机控制交通灯原理图及C语言程序

Proteus仿真原理图:Keil C源程序:#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit RED_DONGXI = P1^0;//南北方向红灯亮sbit YELLOW_DONGXI = P1^1;//南北方向黄灯亮sbit RED_NANBEI = P1^3;//东西方向红灯亮sbit GREEN_DONGXI = P1^2;//南北方向绿灯亮sbit YELLOW_NANBEI = P1^4;//东西方向黄灯亮sbit GREEN_NANBEI = P1^5;//东西方向绿灯亮sbit DXweixuan1 = P1^6;//南北方向数码管位选1sbit DXweixuan2 = P1^7;//南北方向数码管位选2sbit NBweixuan1 = P3^0;//东西方向数码管位选1sbit NBweixuan2 = P3^1;//东西方向数码管位选2sbit L1=P3^5;sbit L2=P3^6;sbit L3=P3^7;uint aa, bai,shi,ge,bb;uint shi1,ge1,shi2,ge2;uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uint code table1[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};void delay(uint z);void init(uint a);void display(uint shi1,uint ge1,uint shi2,uint ge2);void xtimer0();void init1();void init2();void init3();void init4();void init5();void xint1();void xint0();void LED_ON();void LED_OFF();void main(){P0=0xFF;P1=0xFF;P2=0x00;P3=0xFF;EA=1;EX0=1;IT0=0;init1();while(1){init2();//第2个状态init3(); //第3个状态init4(); //第4个状态init5();//第5个状态}}void init1()//第一个状态:东西、南北方向均亮红灯5S {uint temp;temp=5;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=0; //第一个状态东西、南北均亮红灯5SRED_NANBEI=0;GREEN_DONGXI=1;GREEN_NANBEI=1;YELLOW_DONGXI=1;YELLOW_NANBEI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;}shi1=shi2=temp/10;ge1=ge2=temp%10;if(temp==0){temp=5;break;}display(ge1,shi1,ge2,shi2);}}void init2()//第二个状态:东西亮红灯30S~5S、南北亮绿灯25~0S;{uint temp;temp=26;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=1;RED_NANBEI=0;GREEN_DONGXI=0;GREEN_NANBEI=1;YELLOW_DONGXI=1;//第二个状态:东西亮绿灯25S、南北亮红灯YELLOW_NANBEI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;shi1=(temp+5)/10;ge1=(temp+5)%10;shi2=temp/10;ge2=temp%10;if(temp==0){temp=26;break;}}display(ge1,shi1,ge2,shi2);}}void init3() //第三个状态:东西绿灯变为黄灯闪5次、南北亮红灯5S {uint temp;temp=6;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_NANBEI=0;GREEN_DONGXI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;YELLOW_DONGXI=~YELLOW_DONGXI;shi1=temp/10;shi2=shi1;ge1=temp%10;ge2=ge1;}if(temp==0){temp=6;break;}display(ge1,shi1,ge2,shi2);}}void init4()//第四个状态:东西亮绿灯25~0S,南北方向亮红灯30~5S;{uint temp;temp=26;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=0;RED_NANBEI=1;YELLOW_DONGXI=1;//第一个状态东西、南北均亮红灯5SGREEN_NANBEI=0;if(aa==20){aa=0;temp--;shi1=temp/10;shi2=(temp+5)/10;ge1=temp%10;ge2=(temp+5)%10;if(temp==0){temp=26;break;}}display(ge1,shi1,ge2,shi2);}}void init5()//第五个状态:东西亮红灯、南北绿灯闪5次转亮黄灯5S {uint temp;temp=6;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_NANBEI=1;RED_DONGXI=0;GREEN_DONGXI=1;GREEN_NANBEI=1;if(aa==20){aa=0;temp--;YELLOW_NANBEI=~YELLOW_NANBEI;shi1=temp/10;shi2=shi2;ge1=temp%10;ge2=ge1;if(temp==0){temp=6;break;}}display(ge1,shi1,ge2,shi2);}}void display(uint shi1,uint ge1,uint shi2,uint ge2) {DXweixuan1=0;DXweixuan2=1;NBweixuan1=1;NBweixuan2=1;P0=table[ge1];delay(5);DXweixuan1=1;DXweixuan2=0;NBweixuan1=1;NBweixuan2=1;P0=table[shi1];delay(5);DXweixuan1=1;DXweixuan2=1;NBweixuan1=0;NBweixuan2=1;P0=table[ge2];delay(5);DXweixuan1=1;DXweixuan2=1;NBweixuan1=1;NBweixuan2=0;P0=table[shi2];delay(5);}void xint0() interrupt 0 {RED_NANBEI=0;RED_DONGXI=0;GREEN_NANBEI=1;GREEN_DONGXI=1;YELLOW_NANBEI=1;YELLOW_DONGXI=1;P0=0x00;NBweixuan1=0;NBweixuan2=0;DXweixuan1=0;DXweixuan2=0;delay(2);return ;}void xint1() interrupt 2 {RED_NANBEI=1;RED_DONGXI=1;GREEN_NANBEI=0;GREEN_DONGXI=0;YELLOW_NANBEI=1;YELLOW_DONGXI=1;P0=0x00;NBweixuan1=0;NBweixuan2=0;DXweixuan1=0;DXweixuan2=0;delay(2);return ;}void xtimer0() interrupt 1 {TH0=(65535-50000)/256;TL0=(65535-50000)%256;aa++;}void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<110;y++); }。

基于51单片机的交通灯C语言程序

基于51单片机的交通灯C语言程序
p120p140南北绿东西红elseiftime19南北绿熄灭南北黄闪烁p121
基于51单片机的交通灯C语言程序
/*南北:P1-0红,P1-1黄,P1-2绿,
东西:P1-4红,P1-5黄,P1-6绿,*/
#include"REG51.H"
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
TR0=1;
EA=1;ET0=1;
while (1)
{
if(time>24)
P1=0xeb; //P1--2=0,P1_4=0,南北绿东西红
else if(time>19)
{ //南北绿熄灭,南北黄闪烁
P1_2=1;
P1_1=~P1_1; }
//P1=0xed;
else if(time>4 )
P1=0xbe; //P1--0=0,P1_6=0,南北红东西绿
else
{
P1_6=1; //东西绿熄灭,东西黄闪烁
P1_5=~P1_5;
}
if(time>=25)
display((time-20)+(time-25)*100);
else if(time>=20)
display((time-20)*101);
else if(time>=5)
display(time*100+(time-5));
zt=zt/10;
a[1]=zt%10;
zt=zt/10;
a[0]=zt%10;
lie=0x01;
for ( i=0;i<4;i++)
{
P3=~lie;
P2=chr[a[i]];

MSC-51系列单片机IntelAT89C51为中心器件设计交通灯控制器(附源程序和电路图)

MSC-51系列单片机IntelAT89C51为中心器件设计交通灯控制器(附源程序和电路图)

MSC-51系列单片机IntelAT89C51为中心器件设计交通灯控制器(附源程序和电路图)一、工程简介(一)、概述本设计是交通灯的控制实验,必须要先了解实际交通灯的变化规律。

假设一个路口为东西南北走向,即十字路口,初始状态零为东西南北灯都熄灭。

然后转状态一东西绿灯通车,南北为红灯。

过段时间转状态二,东西绿灯闪几次转黄灯,延时几秒,南北仍为红灯。

再转状态三南北绿灯通车,东西红灯。

过段时间转状态四南北绿灯闪几次转黄灯,延时几秒,东西仍为红灯。

最后循环至状态一。

交通信号灯模拟控制系统设计利用单片机的定时器定时,控制十字路口红绿灯交替电亮和熄灭,并且用LED数码管显示时间,但由于时间及水平的不足,在此实验中不显示。

用十二个发光二极管代替交通灯进行实验设计。

这次设计是《微机接口与控制技术》课程的综合训练,我们通过理论学习,课题选择,资料查阅,软、硬件设计,系统调试等环节,巩固所学的知识及提高应用水平.在此我们要学会从提出问题,观察与分析问题,到最终解决问题科学方法.提高自己的思维能力和动手能力,在设计中获得一些实操经验,更是要培养我们的工作作风和工作态度。

为今后的毕业设计、及从事微机控制系统的设计与维护奠定坚实的基础。

这次课题设计的意义在于通过具体的控制系统的设计,掌握微机控制系统设计的一般方法和处理问题的思路,特别是一些常用的技术手段。

使我们能在实践教学环境中累积设计经验,开拓思维空间,全面提高个人的综合能力。

(二)、工艺流程图因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。

假设一个十字路口为东西南北走向。

初始状态0为东西南北灯都熄灭。

然后转状态1东西绿灯通车,南北红灯。

过一段时间转状态2,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。

再转状态3,南北绿灯通车,东西红灯。

过一段时间转状态4,南北绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。

最后循环至状态1。

交通信号灯模拟控制系统设计利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭,并且用LED 数码管显示时间,但由于时间和水平的限制就不显示时间。

51单片机交通灯

51单片机交通灯

/*交通灯控制系统C语言源程序*//*Author:ZhaoWenjie All Rights Reserved*/ /*2009/10/18*/#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar data buf[4];uchar data sec_dx=20;//东西数默认uchar data sec_nb=30;//南北默认值uchar data set_timedx=20;uchar data set_timenb=30;int n;uchar data b;//定时器中断次数//sbit k1=P1^6;//定义5组开关//sbit k2=P1^7;//sbit k3=P2^7;//sbit k4=P3^0;//sbit k5=P3^1;//定义5组开关sbit k4=P3^7; //切换方向sbit k1=P3^5; //时间加sbit k2=P3^6; //时间减sbit k3=P3^4; //确认sbit k5=P3^1; //禁止// P3^2 //只允许东西方向通行// P3^3 //只允许南北方向通行sbit Y ellow_nb=P2^5; //南北黄灯标志sbit Y ellow_dx=P2^2; //东西黄灯标志sbit Green_nb=P2^4;sbit Green_dx=P2^1;sbit Buzz=P3^0;bit Buzzer_Indicate;bit time=0;//灯状态循环标志bit set=1;//调时方向切换键标志uchar code table[11]={ //共阴极字型码0x3f, //--00x06, //--10x5b, //--20x4f, //--30x66, //--40x6d, //--50x7d, //--60x07, //--70x7f, //--80x6f, //--90x00 //--NULL};//函数的声明部分void delay(int ms);//延时子程序void key();//按键扫描子程序void key_to1();//键处理子程序void key_to2();void key_to3();void display();//显示子程序void logo(); //开机LOGOvoid Buzzer();//主程序void main(){TMOD=0X01;TH0=0XD8;TL0=0XF0;EA=1;ET0=1;TR0=1;EX0=1;EX1=1;logo();P2=0Xc3;// 开始默认状态,东西绿灯,南北黄灯sec_nb=sec_dx+5;while(1){key(); //调用按键扫描程序display(); //调用显示程序Buzzer();}}//函数的定义部分void key() //按键扫描子程序{if(k1!=1){delay(10);if(k1!=1){while(k1!=1){key_to1();for(n=0;n<40;n++){ display();}}}}if(k2!=1){delay(10);if(k2!=1){while(k2!=1){key_to2();for(n=0;n<40;n++){ display();}}}}if(k3!=1){TR0=1; //启动定时器Buzzer_Indicate=0;sec_nb=set_timenb; //从中断回复,仍显示设置过的数值sec_dx=set_timedx;if(time==0){ P2=0X99;sec_nb=sec_dx+5; }else { P2=0xC3;sec_dx=sec_nb+5; }}if(k4!=1){delay(5);if(k4!=1){while(k4!=1);set=!set;}}if(k5!=1){delay(5);if(k5!=1){while(k5!=1)key_to3();}}}void display() //显示子程序{buf[1]=sec_dx/10; //第1位东西秒十位buf[2]=sec_dx%10; //第2位东西秒个位buf[3]=sec_nb/10; //第3位南北秒十位buf[0]=sec_nb%10; //第4位南北秒个位P1=0xff; // 初始灯为灭的P0=0x00;P1=0xfe; //片选LCD1P0=table[buf[1]];delay(1);P1=0xff;P0=0x00;P1=0xfd; //片选LCD2P0=table[buf[2]];delay(1);P1=0xff;P0=0x00;P1=0Xfb; //片选LCD3P0=table[buf[3]];delay(1);P1=0xff;P0=0x00;P1=0Xf7;P0=table[buf[0]]; //片选LCD4delay(1);}void time0(void) interrupt 1 using 1 //定时中断子程序{b++;if(b==19) // 定时器中断次数{ b=0;sec_dx--;sec_nb--;if(sec_nb<=5&&time==0) //东西黄灯闪{ Green_dx=0;Y ellow_dx=!Y ellow_dx;}if(sec_dx<=5&&time==1) //南北黄灯闪{ Green_nb=0;Y ellow_nb=!Y ellow_nb;}if(sec_dx==0&&sec_nb==5)sec_dx=5;if(sec_nb==0&&sec_dx==5)sec_nb=5;if(time==0&&sec_nb==0){ P2=0x99;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5;}if(time==1&&sec_dx==0){P2=0Xc3;time=!time;sec_dx=set_timedx;sec_nb=set_timedx+5;}}}void key_to1() //键盘处理子程序之+{TR0=0; //关定时器if(set==0)set_timenb++; //南北加1Selseset_timedx++; //东西加1Sif(set_timenb==100)set_timenb=1;if( set_timedx==100)set_timedx=1; //加到100置1sec_nb=set_timenb ; //设置的数值赋给东西南北sec_dx=set_timedx;}void key_to2() //键盘处理子程序之-{TR0=0; //关定时器if(set==0)set_timenb--; //南北减1Selseset_timedx--; //东西减1Sif(set_timenb==0)set_timenb=99;if( set_timedx==0 )set_timedx=99; //减到1重置99sec_nb=set_timenb ; //设置的数值赋给东西南北sec_dx=set_timedx;}void key_to3() //键盘处理之紧急车通行{TR0=0;P2=0Xc9;sec_dx=00;sec_nb=00;Buzzer_Indicate=1;}void int0(void) interrupt 0 using 1 //只允许东西通行{TR0=0;P2=0Xc3;Buzzer_Indicate=0;sec_dx=00;sec_nb=00;}void int1(void) interrupt 2 using 1 //只允许南北通行{TR0=0;P2=0X99;Buzzer_Indicate=0;sec_nb=00;sec_dx=00;}void logo()//开机的Logo "- - - -"{ for(n=0;n<50;n++){P0=0x40;P1=0xfe;delay(1);P1=0xfd;delay(1);P1=0Xfb;delay(1);P1=0Xf7;delay(1);P1 = 0xff;}}void Buzzer(){if(Buzzer_Indicate==1)Buzz=!Buzz;else Buzz=0;}void delay(int ms) //延时子程序{uint j,k;for(j=0;j<ms;j++)for(k=0;k<124;k++);}。

利用51单片机实现交通红绿灯讲解

利用51单片机实现交通红绿灯讲解


END
谢谢大家!
MOV A,#0B6H
MOVX @DPTR,A ;从A口输出数据0B6H,来控制相应二极管发光
INC DPTR
MOV A,#0DH
MOVX @DPTR,A ;从B口输出数据0DH,来控制相应二极管发光

西


黄绿红 110
黄绿红 110
黄绿红 黄绿红 110 11 0
B口低4位(ODH)
;允许定时器1中断

SEYB TR1
;打开定时器1

SJMP $
SER: MOV TH1,#3CH

MOV TL1,#0B0H ;定时器重装初值

DJNZ R1,NO ;循环定时(20H)次

MOV R1,20H

DJNZ R2,NO ;循环定时(21H)次

MOV R2,21H

RET
NO: RETI
MOV 20H,#0AH

MOV 21H,#01H
LCALL DELY
;延时0.5s
MOV DPTR,#0FF7CH
MOV A,#0BEH
MOVX @DPTR,A
INC DPTR
MOV A,#0FH
MOVX @DPTR,A
;东西红灯亮
MOV 20H,#0AH

MOV 21H,#01H

LCALL DELY

MOVX @DPTR,A
;南北红灯亮
MOV 20H,#0AH

MOV 21H,01H

LCALL DELY
;延时0.5s
DJNZ R7,JOD1
;闪烁次数未到继续

C51单片机的交通灯控制系统.

C51单片机的交通灯控制系统.

基于C51单片机的交通灯控制系统1、实验方案论证:进行十字路口的交通信号灯控制电路设计,画出电路原理图及实验电路图,进行软件编程、以及使用说明文档的建立等一整套工作任务。

进行十字路口的交通信号灯控制程序设计,提交一个符合上述功能要求的十字路口的交通信号灯控制系统设计。

2、控制流程分析:对设计要求进行分析后可得出以下交通工作状态表:3、硬件设计概要:根据设计要求,可用6个LED灯分别模拟东西、南北的交通灯。

具体接法如下:AT89C51的P1口接LED灯,P1.0、P1.1、P1.2分别接东西方向红、绿、黄交通灯,P1.3、P1.4、P1.5分别接南北方向的红、绿、黄交通灯。

P1口和LED 灯之间要接限流保护电阻。

两位数码管段选接P2口,位选接P0口低两位,P0口低两位接上拉电阻使其可以输出高电平。

紧急情况按钮一端接地,另一端与外中断1引脚相连;恢复正常按钮一端接地,另一端与外中断0引脚相连。

三、原理图设计1、LED显示部分电路设计:把单片机AT89C51的P1口作为红黄绿灯显示部分,用6个LED灯分别模拟东西、南北的交通灯。

P1.0、P1.1、P1.2各通过一个300Ω的限流保护电阻接东西方向的红、绿、黄LED灯;P1.3、P1.4、P1.5各通过一个300Ω的限流保护电阻接南北方向的红、绿、黄LED灯。

LED灯的一端接电源,另一端经电阻接P1口,因此当P1口引脚输出低电平时LED灯发光,即此方案采取低电平驱动方式。

具体电路如下:2、紧急情况处理电路设计:紧急情况按钮一端接地,另一端与外中断1引脚相连;恢复正常按钮一端接地,另一端与外中断0引脚相连。

在程序设计时,我会将其设置为下降沿触发方式。

具体电路如下:3、数字显示电路设计:选用共阴极两位数码管。

两位数码管A~G引脚各通过一个300Ω的限流保护电阻分别接P2.0~P2.6,位选1引脚和2引脚分别接P0.0口低两位,P0口低两位接5kΩ的上拉电阻使其可以输出高电平。

C51代码交通灯Proteus原理图

C51代码交通灯Proteus原理图

吉首大学单片机交通灯设计原理图局部放大程序代码#include<reg51.H>#define uchar unsigned char #define uint unsigned intuchar code table[]={ //共阴极数码管码表0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xC9,0xFF,0x40};//设置码,测试码,不计时码void delay(uint x);//延时函数void display(uchar,uchar,uchar,uchar); //数码管显示函数void mkeys(); //键盘函数void traffic(); //交通灯函数uchar num,num1,num2, //1南北 2东西shi1,ge1,shi2,ge2,value1,value2,//南北绿灯时间黄灯时间value3,value4,//东西绿灯时间黄灯时间count1,count2,flag1,flag2; //南北标记东西标记void main(){TMOD=0x01;TH0=(65536-45872)/256;TL0=(65536-45872)%256;EA=1;ET0=1;TR0=1;/*初状态*/value1=15; //南北黄绿灯默认值value2=5;value3=10; //东西黄绿灯默认值value4=5;num1=value1; //南北数码管先绿灯时间num2=value2+value1;//东西红灯时间shi1=num1/10;ge1=num1%10;shi2=num2/10;ge2=num2%10;P1=0x41;//初始状态:东西红灯南北绿灯 20 15while(1){if(num==20) //定时器1s{num=0;num1--;num2--;traffic();shi1=num1/10;ge1=num1%10;shi2=num2/10;ge2=num2%10;}mkeys();display(shi1,ge1,shi2,ge2);}}void traffic() //红绿灯主控制程序{if(num1==0){count1++;if(count1==1){P1=0x42;//东西红灯南北黄灯 5 5num1=value2;}if(count1==2){num1=value3+value4;//东西绿灯南北红灯10 15 P1=0x14;}if(count1==3){P1=0x41;// 东西黄灯南北红灯 5 5num1=value4;count1=0;}}if(num2==0){count2++;if(count2==1){//P1=0x14;//东西绿灯南北红灯num2=value3;}if(count2==2){P1=0x24;//东西黄灯南北红灯num2=value4;}if(count2==3){num2=value1+value2; //东西红灯南北绿灯num1=value1;count2=0;}}}void display(uchar shi1,uchar ge1,uchar shi2,uchar ge2) //数码管显示子函数{uchar temp;temp=P2;P2=0xfe;P0=table[shi1];delay(5);P2=0xfd;P0=table[ge1];delay(5);P2=0xfb;P0=table[shi2];delay(5);P2=0xf7;P0=table[ge2];delay(5);}void delay(uint x)//延时子函数{uinti,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}void mkeys() //4*4矩阵键盘功能子函数{uchartemp,key;P3=0xfe;//第一行线temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xee:key=0;break;case 0xde:key=1;break;case 0xbe:key=2;break;case 0x7e:key=3;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}if(key==0) {//按键1:暂停TR0=~TR0; //定时器取反flag1=~flag1;//南北能够设置标志 0有效flag2=~flag2;//东西能够设置标志}if(key==1&&flag1==0){ //按键2:设置时间按钮TR0=0;P1=0x44;//禁止东南西北车辆全为红灯可以设置shi1=ge1=shi2=ge2=16;}if(key==2&&flag2==0){//按键3:设置完成重启TR0=1;num=0; //定时器初始化P1=0x41; //重新开始初状态num1=value1; //南北数码管先绿灯时间num2=value2+value1;//东西红灯时间shi1=num1/10;ge1=num1%10;shi2=num2/10;ge2=num2%10;}if(key==3&&P1==0x44){ //按键4:测试交通灯各个设备的好坏P1=0xff;delay(1000);P1=~P1;shi1=ge1=shi2=ge2=17;P1=0x44;}}}P3=0xfd;//第二行线temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xed:key=0;break;case 0xdd:key=1;break;case 0xbd:key=2;break;case 0x7d:key=3;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}if(key==0&&P1==0x44){ //按键5:设置南北绿灯时间+num1=value1;if(num2!=159){ //@@@@保证交通合理,红灯最大值计时159s,绿灯不再增加num1++;value1=num1;}shi1=num1/10;ge1=num1%10;num2=value1+value2;//显示东西红灯时间shi2=num2/10;ge2=num2%10;}if(key==1&&P1==0x44){ //按键6:设置南北黄灯时间+num1=value2;if(num2!=159){num1++;value2=num1;}shi1=num1/10;ge1=num1%10;num2=value1+value2;//显示东西红灯时间shi2=num2/10;ge2=num2%10;}if(key==2&&P1==0x44&&value1>3){ //按键7:设置南北绿灯时间- @@@@保证交通合理,绿灯最小值计时3s,绿灯不再减少num1=value1;num1--;value1=num1;shi1=num1/10;ge1=num1%10;num2=value1+value2;//显示东西红灯时间shi2=num2/10;ge2=num2%10;}if(key==3&&P1==0x44&&value2>3){ //按键8:设置南北黄灯时间- num1=value2;num1--;value2=num1;shi1=num1/10;ge1=num1%10;num2=value1+value2;//显示东西红灯时间shi2=num2/10;ge2=num2%10;}}}////||||||||||||||||||P3=0xfb;//第三行线temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xeb:key=0;break;case 0xdb:key=1;break;case 0xbb:key=2;break;case 0x7b:key=3;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}if(key==0&&P1==0x44){ //按键9:设置东西绿灯时间+num2=value3;if(num1!=159){num2++;value3=num2;}shi2=num2/10;ge2=num2%10;num1=value3+value4;//显示南北红灯时间shi1=num1/10;ge1=num1%10;}if(key==1&&P1==0x44){ //按键10:设置东西黄灯时间+ num2=value4;if(num1!=159){num2++;value4=num2;}shi2=num2/10;ge2=num2%10;num1=value3+value4;//显示南北红灯时间shi1=num1/10;ge1=num1%10;}if(key==2&&P1==0x44&&value3>3){ //按键11:设置东西绿灯时间- num2=value3;num2--;value3=num2;shi2=num2/10;ge2=num2%10;num1=value3+value4;//显示南北红灯时间shi1=num1/10;ge1=num1%10;}if(key==3&&P1==0x44&&value4>3){ //按键12:设置东西黄灯时间- num2=value4;num2--;value4=num2;shi2=num2/10;ge2=num2%10;num1=value3+value4;//显示南北红灯时间shi1=num1/10;ge1=num1%10;}}}P3=0xf7;//第四行线 2未用temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xe7:key=0;break;case 0xd7:key=1;break;case 0xb7:key=2;break;case 0x77:key=3;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}if(key==0&&P1==0x44){ //按键13:南北紧急情况:南北绿灯常亮东西红灯常亮P1=0x41;shi1=ge1=shi2=ge2=18;}if(key==1&&P1==0x44){ //按键14:东西紧急情况:东西绿灯常亮南北红灯常亮P1=0x14;shi1=ge1=shi2=ge2=18;}if(key==2&&P1==0x44){//按键15:}if(key==3&&P1==0x44){//按键16:}}}}void T0_time() interrupt 1 //定时器T0 中断子程序{TH0=(65536-45872)/256;TL0=(65536-45872)%256; num++;}。

51单片机用C语言实现交通灯(红绿灯)源程序

51单片机用C语言实现交通灯(红绿灯)源程序

51单片机用C语言实现交通灯(红绿灯)源程序2009-10-29 23:00交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改。

源程序如下:/*1、程序目的:使用定时器学习倒计时红绿灯原理主要程序和倒计时一样2、硬件要求:数码管、晶振12M*/#include <reg52.h>bit red,green,yellow,turnred; //定义红、黄、绿及转红标志code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管 0-9unsigned char Dis_Shiwei;//定义十位unsigned char Dis_Gewei; //定义个位void delay(unsigned int cnt) //用于动态扫描数码管的延时程序{while(--cnt);}main(){TMOD |=0x01;//定时器设置 10ms in 12M crystal定时器0,工作方式1,16位定时器TH0=0xd8; //65535-10000=55535=D8F0(十六进制)TL0=0xf0;IE= 0x82; //中断控制,EA=1开总中断,ET0=1:定时器0中断允许TR0=1; //开定时器0中断P1=0xfc;//红灯亮,根据红黄绿接灯的顺序。

red =1;while(1){P0=Dis_Shiwei;//显示十位,这里实现用8位数码管,即左1位P2=0;delay(300);//短暂延时P0=Dis_Gewei; //显示个位,左数,2位P2=1;delay(300);}}/********************************//* 定时中断 *//********************************/void tim(void) interrupt 1 using 1{static unsigned char second=60,count; //初值60TH0=0xd8;//重新赋值,10毫秒定时TL0=0xf0;count++;if (count==100){count=0;second--;//秒减1if(second==0){ //这里添加定时到0的代码,可以是灯电路,继电器吸合等,或者执行一个程序 if(red) //红灭,先转黄{red=0;yellow=1;second=4;P1=0xF3;//黄灯亮4秒,黄灯为过渡灯,再根据情况转绿或转红}else if(yellow && !turnred){yellow=0;green=1;second=25;P1=0xCF;//绿灯亮25秒,}else if(green){yellow=1;green=0;second=4;P1=0xF3;//黄灯亮4秒turnred=1;}else if(yellow && turnred) //绿灯灭,转黄灯,后红灯,turnred=1时{red=1;yellow=0;P1=0xFC;//红灯亮60秒second=60;turnred=0; //接下来是转黄,绿。

51单片机交通灯工作原理

51单片机交通灯工作原理

51单片机交通灯工作原理
交通灯是交通运输中的基本设施,它能起到指示行人和车辆行驶的作用。

现代交通灯工作原理是利用单片机控制红绿灯闪烁的时间长短来控制交通,单片机的工作原理是利用计时器来控制灯闪烁的时间长短。

单片机通过检测红绿灯的亮度来判断红绿灯是否正常工作,如果红绿灯不正常工作,单片机就会自动开启保护模式,红绿灯不亮,保护模式就会开启,以防止交通灯的烧坏。

单片机交通灯工作原理:
1、利用单片机控制红绿灯闪烁的时间长短来控制交通。

2、单片机通过检测红绿灯的亮度来判断红绿灯是否正常工作。

3、如果红绿灯不正常工作,单片机就会自动开启保护模式。

4、红绿灯不亮,保护模式就会开启。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Proteus 仿真原理图:
Keil C 源程序: #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit RED_DONGXI = P1^0;//南北方向红灯亮 sbit YELLOW_DONGXI = P1^1;//南北方向黄灯亮 sbit RED_NANBEI = P1^3;//东西方向红灯亮 sbit GREEN_DONGXI = P1^2;//南北方向绿灯亮 sbit YELLOW_NANBEI = P1^4;//东西方向黄灯亮 sbit GREEN_NANBEI = P1^5;//东西方向绿灯亮 sbit DXweixuan1 = P1^6;//南北方向数码管位选 1 sbit DXweixuan2 = P1^7;//南北方向数码管位选 2 sbit NBweixuan1 = P3^0;//东西方向数码管位选 1 sbit NBweixuan2 = P3^1;//东西方向数码管位选 2 sbit L1=P3^5; sbit L2=P3^6; sbit L3=P3^7; uint aa, bai,shi,ge,bb; uint shi1,ge1,shi2,ge2; uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uint code table1[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
ge1=(temp+5)%10; shi2=temp/10; ge2=temp%10; if(temp==0) { temp=26; break; } } display(ge1,shi1,ge2,shi2); } } void init3() //第三个状态:东西绿灯变为黄灯闪 5 次、南北亮红灯 5S { uint temp; temp=6; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) { RED_NANBEI=0; GREEN_DONGXI=1; if(aa==20)//定时 20*50MS=1S { aa=0; temp--; YELLOW_DONGXI=~YELLOW_DONGXI; shi1=temp/10; shi2=shi1; ge1=temp%10; ge2=ge1; } if(temp==0) { temp=6; break; } display(ge1,shi1,ge2,shi2); } }
while(1) { RED_NANBEI=1; RED_DONGXI=0; GREEN_DONGXI=1; GREEN_NANBEI=1; if(aa==20) { aa=0; temp--; YELLOW_NANBEI=~YELLOW_NANBEI; shi1=temp/10; shi2=shi2; ge1=temp%10; ge2=ge1; if(temp==0) { temp=6; break; } } display(ge1,shi1,ge2,shi2); } } void display(uint shi1,uint ge1,uint shi2,uint ge2) { DXweixuan1=0; DXweixuan2=1; NBweixuan1=1; NBweixuan2=1; P0=table[ge1]; delay(5); DXweixuan1=1; DXweixuan2=0; NBweixuan1=1; NBweixuan2=1; P0=table[shi1]; delay(5); DXweixuan1=1; DXweixuan2=1; NBweixuan1=0; NBweixuan2=1;
void main() { P0=0xFF; P1=0xFF; P2=0x00; P3=0xFF; EA=1; EX0=1; IT0=0; init1(); while(1) { init2();//第 2 个状态 init3(); //第 3 个状态 init4(); //第 4 个状态 init5();//第 5 个状态 } } void init1()//第一个状态:东西、南北方向均亮红灯 5S { uint temp; temp=5; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) {
void init4()//第四个状态:东西亮绿灯 25~0S,南北方向亮红灯 30~5S; { uint temp; temp=26; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) { RED_DONGXI=0; RED_NANBEI=1; YELLOW_DONGXI=1;//第一个状态东西、南北均亮红灯 5S GREEN_NANBEI=0; if(aa==20) { aa=0; temp--; shi1=temp/10; shi2=(temp+5)/10; ge1=temp%10; ge2=(temp+5)%10; if(temp==0) { temp=26; break; } } display(ge1,shi1,ge2,shi2); } } void init5()//第五个状态:东西亮红灯、南北绿灯闪 5 次转亮黄灯 5S { uint temp; temp=6; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1;
P0=table[ge2]; delay(5); DXweixuan1=1; DXweixuan2=1; NBweixuan1=1; NBweixuan2=0; P0=table[shi2]; delay(5); } void xint0() interrupt 0 { RED_NANBEI=0; RED_DONGXI=0; GREEN_NANBEI=1; GREEN_DONGXI=1; YELLOW_NANBEI=1; YELLOW_DONGXI=1; P0=0x00; NBweixuan1=0; NBweixuan2=0; DXweixuan1=0; DXweixuan2=0; delay(2); return ; } void xint1() interrupt 2 { RED_NANBEI=1; RED_DONGXI=1; GREEN_NANBEI=0; GREEN_DONGXI=0; YELLOW_NANBEI=1; YELLOW_DONGXI=1; P0=0x00; NBweixuan1=0; NBweixuan2=0; DXweixuan1=0; DXweixuan2=0; delay(2); return ; } void xtimer0() interrupt 1 { TH0=(65535-50000)/256;
//第一个状态东西、南北均亮红灯 5S
void init2()//第二个状态:东西亮红灯 30S~5S、南北亮绿灯 25~0S; { uint temp; temp=26; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) { RED_DONGXI=1; RED_NANBEI=0; GREEN_DONGXI=0; GREEN_NANBEI=1; YELLOW_DONGXI=1;//第二个状态:东西亮绿灯 25S、南北亮红灯 YELLOW_NANBEI=1; if(aa==20)//定时 20*50MS=1S { aa=0; temp--; shi1=(temp+5)/10;
TL0=(65535-50000)%256; aa++; } void delay(uint z) {uint x,y; for(x=0;x<z;x++) for(y=0;y<110;y++); }
RED_DONGXI=0; RED_NANBEI=0; GREEN_DONGXI=1; GREEN_NANBEI=1; YELLOW_DONGXI=1; YELLOW_NANBEI=1; if(aa==20)//定时 20*50MS=1S { aa=0; temp--; } shi1=shi2=temp/10; ge1=ge2=temp%10; if(temp==0) { temp=5; break; } display(ge1,shi1,ge2,shi2); } }
void void void void void void void void void volay(uint z); init(uint a); display(uint shi1,uint ge1,uint shi2,uint ge2); xtimer0(); init1(); init2(); init3(); init4(); init5(); xint1(); xint0(); LED_ON(); LED_OFF();
相关文档
最新文档