目录
具体实现功能
系统由STC89C52单片机+数码管模块+LED指示灯模块+按键模块+电源构成。
具体功能:
1、红灯和绿灯相互转换经过黄灯,并且黄灯闪烁三次;
2、主干道方向通行30秒,辅干道通行20秒,单独左转信号15秒,先直行信号,后左转信号;
3、设置自动、手动、特殊情况三种方式。自动模式下自动显示各种状态的倒计时,红绿灯自动切换;手动模式下可以根据道路车流量情况手动调节红灯绿灯相应时间;紧急情况下所有路口红灯亮,黄灯闪烁,以便120、110等及时通行。
设计介绍
51单片机简介
51单片是一种低功耗、高性能CMOS-8位微控制器,具有8K可编程Flash存储器,使得其为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
51系列单片机具有以下标准功能:
8k字节Flash,512字节RAM,
32位I/O口线,看门狗定时器,
内置4KB EEPROM,
MAX810复位电路,
三个16位定时器/计数器,
一个6向量2级中断结构,
全双工串行口。
另外, 51系列在空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机停止工作,直到下一个中断或硬件复位为止。本设计所使用的芯片可兼容以下所有的51系列单片机(包括AT系列和STC系列)。
设计思路
文献研究法:搜集整理相关研究资料,阅读文献,为研究做准备;
调查研究法:通过调查、分析、具体实验等方法,发现相关存在问题和解决办法;
比较分析法:比较不同设计的具体原理,以及同一类传感器性能的区别,分析系统的研究现状与发展前景;
软硬件设计法:通过软硬件设计实现硬件,最后测试各项功能是否满足要求。
设计内容
原理图(AD19)
本系统原理图设计采用Altium Designer19,具体如图。
程序(Keil5)
本设计利用KEIL5软件实现程序设计,主函数如下:
/*********************主程序开始***********************/
void main(void)
{
IT0=1; //INT0负跳变触发 设置成 低电平触发方式,IT0=1为下降沿触发
TMOD=0x01; //定时器工作于方式1
TH0=(65536-50000)/256; //定时器赋初值
TL0=(65536-50000)%256;
EA=1; //CPU开中断总允许
ET0=1; //开定时中断
EX0=1; //开外部INTO中断
TR0=1; //启动定时
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(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; //倒计时减一
}
}
if(Special_Btton==0)//紧急按键按下
{
Delay(3);//延时消抖
if(Special_Btton==0)//确认按键按下
{
while(!Special_Btton) // 去除抖动,确认是否按键按下
P1=0XCC; //所有红灯亮
}
}
}
/*******S1状态,南北左转15S绿灯**********/
Flag_SN_Yellow=0; //SN关黄灯显示信号
Time_SN=SNL;
while(Time_SN>=6)//大于6S一直倒计时
{
P1=S[2]; //SN左拐绿灯亮,EW红灯
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;
}
}
if(Special_Btton==0)
{
Delay(3);
if(Special_Btton==0)
{
while(!Special_Btton)
P1=0XCC;
}
}
}
/*******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(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;
}
}
if(Special_Btton==0)
{
Delay(3);
if(Special_Btton==0)
{
while(!Special_Btton)
P1=0XCC;
}
}
}
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(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;
}
}
if(Special_Btton==0)
{
Delay(3);
if(Special_Btton==0)
{
while(!Special_Btton)
P1=0XCC;
}
}
}
/*******S4状态,东西左转15S倒计时**********/
Flag_EW_Yellow=0;//EW关黄灯显示信号
Time_EW=EWL;
while(Time_EW>=6)//大于6S时一直为左转绿灯
{
P1=S[6]; //EW左拐绿灯亮,SN红灯
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;
}
}
if(Special_Btton==0)
{
Delay(3);
if(Special_Btton==0)
{
while(!Special_Btton)
P1=0XCC;
}
}
/*******S5状态**********/
P1=0x00;
while(Time_EW>=0)//小于6S后为黄灯
{
Flag_EW_Yellow=1; //SN开黄灯信号位
Flag_SN_Yellow=1; //SN开黄灯信号位
P1=P1|0x44; //保持EW红灯
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;
}
}
if(Special_Btton==0)
{
Delay(3);
if(Special_Btton==0)
{
while(!Special_Btton)
P1=0XCC;
}
}
}
P1=0XFF;
}
}
代码运行截图:
仿真实现(protues8.7)
本设计利用protues8.7软件实现仿真设计。
全部资料
全部资料包括程序(注释)、AD原理图、protues仿真、参考论文、程序讲解、仿真讲解、仿真视频、原理图讲解、资料使用介绍等,具体如图,全网最全!!
资料获取:
https://docs.qq.com/doc/DSVJBVU5rY3BWVFpa