阿里有做网站,wordpress站点赏析,影视网站模板怎么做,小红书搜索关键词排名一、基本原理
利用51单片机控制各个路口红绿灯及时间显示。
设计的重点#xff1a;
1、各个路口红绿灯亮灭的规则#xff0c;暂不考虑左转方向#xff1b;
2、倒计时的实现#xff0c;利用单片机的定时器进行计数得到秒信号#xff1b;
3、时间显示#xff1a;东西南…一、基本原理
利用51单片机控制各个路口红绿灯及时间显示。
设计的重点
1、各个路口红绿灯亮灭的规则暂不考虑左转方向
2、倒计时的实现利用单片机的定时器进行计数得到秒信号
3、时间显示东西南北四个方向的时间一致当东西方向为60秒绿灯通行时间同时南北方向为60秒红灯禁止时间因此硬件连接时可考虑东西南北方向可采用同一接法最后相当于2个数码管动态显示。
4、按键设置扩展要求设置键按一次设置主干道通信时间即次干道禁止时间按第二次设置主干道禁止时间即次干道通信时间按第三次可作为紧急通信键。设置时间需要确定可通过确定键实现也可通过延时确定如10秒。当然也可根据需要增加相应的按键。
仿真图 注意修改每个灯的管脚位选管脚等。
#include REGX52.H
#define ON 0
#define OFF 1
unsigned char tab[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
short EW_Time60,NS_Time60,EW_SetTime60,NS_SetTime60;
unsigned char Time_Mode0,Flag_Blink0;
sbit Switch_Time1P3^3;//数码管位选
sbit Switch_Time2P3^2;
sbit EW_RedP2^0; //东西向红灯
sbit EW_GreenP2^3; //东西向绿灯
sbit EW_YellowP2^2; //东西向黄灯
sbit NS_RedP2^5; //南北向红灯
sbit NS_GreenP2^7; //南北向绿灯
sbit NS_YellowP2^6; //南北向黄灯
sbit PowerP2^4;void delay_ms(unsigned int ms)//ms延时函数
{unsigned int i,j;for(ims;i0;i--)for(j110;j0;j--);}void Timer_Init()//定时器初始化
{TMOD0x01; //设置为定时器0工作模式1TL0(65536-50000)%256;//低八位TH0(65536-50000)/256;//高八位TR0 1; //定时器0开始计时EA1;//开启总中断ET01;//开启定时器0中断
}void Nixie(unsigned char Data)//数码管显示
{Switch_Time11;Switch_Time20;P0tab[Data%10];//显示个位delay_ms(1);Switch_Time21;Switch_Time10;P0tab[Data/10];//显示十位delay_ms(1);
}unsigned char Scan_Key()//获取按键键码
{unsigned char KeyNumber0;if(P1_00){delay_ms(10);while(P1_00);delay_ms(10);KeyNumber1;}if(P1_10){delay_ms(10);while(P1_10);delay_ms(10);KeyNumber2;}if(P1_20){delay_ms(10);while(P1_20);delay_ms(10);KeyNumber3;}if(P1_30){delay_ms(10);while(P1_30);delay_ms(10);KeyNumber4;}if(P1_40){delay_ms(10);while(P1_40);delay_ms(10);KeyNumber5;}if(P1_50){delay_ms(10);while(P1_50);delay_ms(10);KeyNumber6;}if(P1_60){delay_ms(10);while(P1_60);delay_ms(10);KeyNumber7;}if(P1_70){delay_ms(10);while(P1_70);delay_ms(10);KeyNumber8;}return KeyNumber;
}void traffic()//红绿灯主要逻辑
{if(Time_Mode0)//东西南北转换{Nixie(EW_Time);if(EW_Time5){EW_RedOFF;//东西红灯灭NS_YellowOFF;//南北黄灯灭NS_GreenOFF;//南北绿灯灭EW_GreenON;//东西绿灯亮NS_RedON;//南北红灯亮}else if(Flag_Blink0EW_Time5EW_Time0)//闪烁{EW_GreenOFF;//东西绿灯灭EW_YellowON;//东西黄灯亮}else{EW_GreenOFF;//东西绿灯灭EW_YellowOFF;//东西黄灯灭}}if(Time_Mode1)//东西南北转换{Nixie(NS_Time);if(NS_Time5){NS_RedOFF;//南北红灯灭EW_YellowOFF;//东西黄灯灭EW_GreenOFF;//东西绿灯灭EW_RedON;//东西红灯亮NS_GreenON;//南北绿灯亮}else if(Flag_Blink0NS_Time5NS_Time0)//闪烁{NS_GreenOFF;//南北绿灯灭NS_YellowON;//南北黄灯亮}else{NS_GreenOFF;//南北绿灯灭NS_YellowOFF;//南北黄灯灭}}
}void Set_Time()
{char Key_Num0,Key_Value0,mode1;while(1){Key_ValueScan_Key();//获取键值if(Key_Value!0)Key_NumKey_Value;if(Key_Num1){mode;if(mode3)break;Key_Num0;}if(mode1)//按下第二次显示东西通讯时间可加减设置{Nixie(EW_SetTime);if(Key_Num2){EW_SetTime;Key_Num0;}if(Key_Num3){EW_SetTime--;Key_Num0;}}if(mode2)//按下第二次显示南北通讯时间可加减设置{Nixie(NS_SetTime);if(Key_Num2){NS_SetTime;Key_Num0;}if(Key_Num3){NS_SetTime--;Key_Num0;}}if(mode3)//按下第三次时显示00红灯亮紧急通行{P20xFF;Nixie(0);NS_RedON;EW_RedON;}if(Key_Num4)//确认键上传主副干道通行时间{EW_TimeEW_SetTime;NS_TimeNS_SetTime;break;}}
}
void Yellow_Blink()//黄灯闪烁
{char Key_Num0,Key_Value0,Mode1;while(1){Key_ValueScan_Key();//获取键值if(Key_Value!0)ModeKey_Value;P20xFF;Nixie(0);if(Flag_Blink){EW_YellowON;NS_YellowON; }else{EW_YellowOFF;NS_YellowOFF; }if(Mode5){break;}}
}void main()
{char Key_Mode0,Key_Value0;P20xFF;Power1;Timer_Init();//初始化定时器
// NS_GreenOFF;while(1) { Key_ValueScan_Key();if(Key_Value!0)Key_ModeKey_Value;switch(Key_Mode){case 0:traffic();break;case 1:Set_Time();Key_Mode0;break;case 5:Yellow_Blink();Key_Mode0;break;default:Key_Mode0;}}
}void Timer0() interrupt 1
{static unsigned char count0,count10;TL0(65536-50000)%256;//低八位TH0(65536-50000)/256;//高八位if(count10){count0;if(Time_Mode0)//东西时间减{EW_Time--;if(EW_Time0){EW_TimeEW_SetTime;Time_Mode!Time_Mode;}}if(Time_Mode1)//南北时间减{NS_Time--;if(NS_Time0){NS_TimeNS_SetTime;Time_Mode!Time_Mode;}}}if(count15)//闪烁标志位{count10;Flag_Blink!Flag_Blink;}count;count1;
}