标题:
基于单片机的交通信号灯仿真和源码
[打印本页]
作者:
qqcom1
时间:
2018-9-11 00:47
标题:
基于单片机的交通信号灯仿真和源码
基于单片机的信号灯仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(26.96 KB, 下载次数: 34)
下载附件
2018-9-11 03:51 上传
单片机源程序如下:
/*****************************************************
* 王瑾毕设-交通灯
*
*
*
*****************************************************/
#include<include.h>
sbit NS_GRE = P2^5;
sbit NS_YEL = P2^4;
sbit NS_RED = P2^3;
sbit EW_GRE = P2^2;
sbit EW_YEL = P2^1;
sbit EW_RED = P2^0;
uint8 EW_Timer = unused8; //东西方向红灯定时器
uint8 NS_Timer = unused8; //南北方向红灯定时器
uint8 YEL_Timer = unused8; //黄灯 5s定时器
int main(void)
{
Timer_Init(); //定时器初始化
INT0_Init(); //外部中断初始化
EA=1; //打开全局中断
NS_GRE = OFF; //所有的灯都灭
NS_YEL = OFF;
NS_RED = OFF;
EW_GRE = OFF;
EW_YEL = OFF;
EW_RED = OFF;
P3 = 0xFF; //所有显示灭
//先让东西方向红灯亮 南北方向通行
EW_Timer = EWTime_Count;//东西方向开始计时
while(1)
{
if((EW_Timer != unused8) && (EW_Timer != 0)){ //东西方向做红灯倒计时
display1(EW_Timer/10, EW_Timer%10); //东西方向显示时间 南北方向不显示
EW_RED_ON(); //东西方向保持红灯
NS_GRE_ON(); //南北方向保持绿灯
}
else if((EW_Timer != unused8) && (EW_Timer == 0) && (YEL_Timer == unused8)){//东西方向红灯计时到 东西方向保持红灯 南北方向变黄灯 开始黄灯5s计时
EW_RED_ON(); //东西方向红灯
NS_YEL_ON(); //南北方向黄灯
YEL_Timer = YELTime_Count; //5s计时
}
if((EW_Timer != unused8) && (YEL_Timer != unused8) && (YEL_Timer != 0)){
display1(YEL_Timer/10, YEL_Timer%10); //东西方向显示时间 南北方向不显示
}
if((EW_Timer != unused8) && (YEL_Timer == 0)){ //东西方向红-南北方向黄灯5s计时到 东西红灯定时器关 黄灯定时器关 南北红灯 东西绿灯 南北计时器开
EW_Timer = unused8; //东西红灯定时器关
YEL_Timer = unused8; //黄灯定时器关
NS_RED_ON(); //南北变红灯
EW_GRE_ON(); //东西变绿灯
NS_Timer = NSTime_Count; //南北红灯定时器开
}
if((NS_Timer != unused8) && (NS_Timer != 0)){ //南北红灯定时器正在计时
display2(NS_Timer/10, NS_Timer%10); //南北方向显示时间 东西方向不显示
EW_GRE_ON(); //东西保持绿灯
NS_RED_ON(); //南北保持红灯
}
else if((NS_Timer != unused8) && (NS_Timer == 0) && (YEL_Timer == unused8)){ //南北方向红灯计时到 南北方向保持红灯 东西方向变黄灯 开始黄灯5s计时
NS_RED_ON(); //南北方向保持红灯
EW_YEL_ON(); //东西方向变黄灯
YEL_Timer = YELTime_Count; //5s计时
}
if((NS_Timer != unused8) && (YEL_Timer != unused8) && (YEL_Timer != 0)){
display2(YEL_Timer/10, YEL_Timer%10); //南北方向显示时间 东西方向不显示
}
if((NS_Timer != unused8) && (YEL_Timer == 0)){ //南北方向红-东西方向黄灯5s计时到 南北方向定时器关 黄灯定时器关 东西方向变红灯 南北方向变绿灯 东西方向红灯计时器开始计时
NS_Timer = unused8;
YEL_Timer = unused8;
EW_RED_ON(); //东西方向变红灯
NS_GRE_ON(); //南北方向变绿灯
EW_Timer = EWTime_Count; //东西方向开始计时
}
if(Flag_Key == 1){ //如果急停按键按下 则全红灯 显示灭
P3 = 0xFF; //所有显示灭
EW_RED_ON(); //东西方向红灯
NS_RED_ON(); //南北方向红灯
EW_Timer = unused8; //关闭所有定时器
NS_Timer = unused8;
YEL_Timer = unused8;
}
}
}
复制代码
所有资料51hei提供下载:
基于AT89C51的十字路口交通灯仿真.zip
(200.94 KB, 下载次数: 45)
2018-9-11 00:47 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
q850441
时间:
2018-9-20 17:34
最近刚好学这个,学习一下!
作者:
黑色王子
时间:
2019-12-11 15:40
为啥用keil4整进去有错误
作者:
aaaaaaaaaassasa
时间:
2019-12-19 11:43
最近刚好学这个,学习一下!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1