目录
具体实现功能
具体功能:
(1)主干道方向通行30秒,辅干道通行20秒,单独左转信号15秒,先直行信号,后左转信号;绿灯转红灯时黄灯亮5秒;
(2)具有自动、手动、特殊情况三种模式。自动模式下红绿灯自动切换;手动模式下可以根据道路车流量情况手动调节红灯绿灯相应时间;紧急情况下所有路口红灯亮,黄灯亮,以便120、110等及时通行。
(3)具有远程控制功能,串口发送"W"进入紧急模式,发送"Q"退出紧急模式。

仿真演示视频:
182-基于51单片机的交通灯远程控制系统
设计介绍

51单片机简介
51单片是一种低功耗、高性能CMOS-8位微控制器,拥有灵巧的8位CPU和可编程Flash,使得51单片机为众多嵌入式控制应用系统提供灵活、高效的解决方案。
本设计所使用的芯片可兼容以下所有的51系列单片机(包括AT系列和STC系列)。

资料内容
仿真实现(protues8.7)
本设计利用protues8.7软件实现仿真设计,具体如图。

程序(Keil5)
本设计利用KEIL5软件实现程序设计。
主函数如下:
///////////////////////////////////////////////////
/*********************主程序开始***********************/
void main(void)
{
//IT0=1; //INT0负跳变触发 设置成 低电平触发方式,IT0=1为下降沿触发
TMOD=0X21; //定时器工作于方式1
SCON=0X50; //设置为工作方式1
TH0=(65536-50000)/256; //定时器赋初值
TL0=(65536-50000)%256;
ET0=1; //开定时中断
EX0=1; //开外部INTO中断
TR0=1; //启动定时
TH1=0XFD; //9600
TL1=0XFD;
ES=1; //打开接收中断
TR1=1; //打开计数器
EA=1; //CPU开中断总允许
while(1)
{
Flag_zhuanhuan=0; //南北倒计时
/*******S0状态,南北直行30S倒计时**********/
Flag_EW_Yellow=0; //EW关黄灯显示信号,黄灯不亮
Time_EW=EW;//赋倒计时初值20S
Time_SN=SN;//赋倒计时初值30S
while(Time_SN>=0)//南北倒计时大于零则继续循环
{
P1 = S[0]; //给P1口赋值,使SN绿灯,EW红灯
Display();//调用显示函数,显示
// 全局紧急状态检测
if(Flag_Emergency || Special_Btton==0)
{
P1 = 0xCC; // 所有红灯亮
while(Flag_Emergency || Special_Btton==0)
{
Display(); // 保持显示刷新
}
}
if(zj==0) //增加按键按下
{
Delay(3);//延时消抖
if(zj==0)//确认增加按键按下
{
while(!zj); //去除抖动,确认是否增加按键按下
Time_SN=Time_SN+1; //倒计时加一
}
}
if(jx==0) //减少按键按下 //减少按键按下
{
Delay(3);//延时消抖
if(jx==0) //确认按键按下
{
while(!jx); //去除抖动,确认是否减少按键按下
Time_SN=Time_SN-1; //倒计时减一
}
}
}
/*******S1状态,南北左转15S绿灯**********/
Flag_SN_Yellow=0; //SN关黄灯显示信号
Time_SN=SNL;
while(Time_SN>=6)//大于6S一直倒计时
{
P1=S[2]; //SN左拐绿灯亮,EW红灯
Display();
// 全局紧急状态检测
if(Flag_Emergency || Special_Btton==0)
{
P1 = 0xCC; // 所有红灯亮
while(Flag_Emergency || Special_Btton==0)
{
Display(); // 保持显示刷新
}
}
if(zj==0) //增加按键按下
{
Delay(3);
if(zj==0)
{
while(!zj); //去除抖动,确认是否增加按键按下
Time_SN=Time_SN+1;
}
}
if(jx==0) //减少按键按下
{
Delay(3);
if(jx==0)
{
while(!jx); //去除抖动,确认是否减少按键按下
Time_SN=Time_SN-1;
}
}
}
/*******S2状态,绿灯转黄灯**********/
P1=0x00;
while(Time_SN>=0)//倒计时6S到0S转黄灯
{
Flag_SN_Yellow=1; //SN开黄灯信号位
Flag_EW_Yellow=1; //SN开黄灯信号位
P1=P1|0x44; //保持EW红灯
Display();
// 全局紧急状态检测
if(Flag_Emergency || Special_Btton==0)
{
P1 = 0xCC; // 所有红灯亮
while(Flag_Emergency || Special_Btton==0)
{
Display(); // 保持显示刷新
}
}
if(zj==0) //增加按键按下
{
Delay(3);
if(zj==0)
{
while(!zj); //去除抖动,确认是否增加按键按下
Time_SN=Time_SN+1;
}
}
if(jx==0) //减少按键按下
{
Delay(3);
if(jx==0)
{
while(!jx); //去除抖动,确认是否减少按键按下
Time_SN=Time_SN-1;
}
}
}
Flag_zhuanhuan=1;
/***********赋值*********/
EW=EW1; //重新给倒计时时间赋初始值
SN=SN1; //重新给倒计时时间赋初始值
EWL=EWL1; //重新给倒计时时间赋初始值
SNL=SNL1; //重新给倒计时时间赋初始值
/*******S3状态,东西直行30S**********/
Flag_SN_Yellow=0; //SN关黄灯显示信号
Time_EW=EW;
Time_SN=SN; //倒计时时间赋值
while(Time_EW>=0) //30S倒计时
{
P1=S[4]; //EW通行,SN红灯
Display();
// 全局紧急状态检测
if(Flag_Emergency || Special_Btton==0)
{
P1 = 0xCC; // 所有红灯亮
while(Flag_Emergency || Special_Btton==0)
{
Display(); // 保持显示刷新
}
}
if(zj==0) //增加按键按下
{
Delay(3);
if(zj==0)
{
while(!zj); //去除抖动,确认是否增加按键按下
Time_EW=Time_EW+1;
}
}
if(jx==0) //减少按键按下
{
Delay(3);
if(jx==0)
{
while(!jx); //去除抖动,确认是否减少按键按下
Time_EW=Time_EW-1;
}
}
}
/*******S4状态,东西左转15S倒计时**********/
Flag_EW_Yellow=0;//EW关黄灯显示信号
Time_EW=EWL;
while(Time_EW>=6)//大于6S时一直为左转绿灯
{
P1=S[6]; //EW左拐绿灯亮,SN红灯
Display();
// 全局紧急状态检测
if(Flag_Emergency || Special_Btton==0)
{
P1 = 0xCC; // 所有红灯亮
while(Flag_Emergency || Special_Btton==0)
{
Display(); // 保持显示刷新
}
}
if(zj==0)
{
while(!zj); //去除抖动,确认是否增加按键按下
Time_EW=Time_EW+1;
}
if(jx==0) //减少按键按下
{
Delay(3);
if(jx==0)
{
while(!jx); //去除抖动,确认是否减少按键按下
Time_EW=Time_EW-1;
}
}
}
/*******S5状态**********/
P1=0x00;
while(Time_EW>=0)//小于6S后为黄灯
{
Flag_EW_Yellow=1; //SN开黄灯信号位
Flag_SN_Yellow=1; //SN开黄灯信号位
P1=P1|0x44; //保持EW红灯
Display();
// 全局紧急状态检测
if(Flag_Emergency || Special_Btton==0)
{
P1 = 0xCC; // 所有红灯亮
while(Flag_Emergency || Special_Btton==0)
{
Display(); // 保持显示刷新
}
}
if(zj==0) //增加按键按下
{
Delay(3);
if(zj==0)
{
while(!zj); //去除抖动,确认是否增加按键按下
Time_EW=Time_EW+1;
}
}
if(jx==0) //减少按键按下
{
Delay(3);
if(jx==0)
{
while(!jx); //去除抖动,确认是否减少按键按下
Time_EW=Time_EW-1;
}
}
}
P1=0XFF;
}
}
程序运行结果如图:

全部内容
全部资料包括程序(keil5)、protues仿真(protues8.7)、设计说明、答辩PPT、开发资料、资料使用介绍、仿真视频、最小系统介绍视频等。
