最近设计了一个项目基于单片机的智能交通红绿灯控制系统的设计分析,与大家分享一下:
一、基本介绍
项目名:红绿灯
项目编号:mcuclub-fz-032
单片机类型:STC89C52
具体功能:
1、有东西南北四个方向,每个方向都有一个两位数码管和三个LED灯(红绿黄)
2、可以按键设置各方向上的总时间
3、可以按键控制某个方向常绿,以达到疏通救火车消防车道路
4、通过4对分离式红外对射管测四个方向上的车流量,从而自动调整绿灯时间
东西方向:23s绿灯3s黄灯18s红灯
南北方向:26s红灯15s绿灯3s黄灯
主要是分别显示,原先的设计师绿灯时间和黄灯时间是一起的,现在需要分开
二、仿真图
三、原理图
软件版本:AD2013
电路连线方式:网络标号连线方式
注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图
四、系统框图
本设计以STC89C52单片机为核心控制器,加上其他的模块一起组成交通灯的整个系统,其中包含中控部分、输入部分和输出部分。中控部分采用了STC89C52单片机,其主要作用是获取输入的部分数据,经过内部处理,控制输出部分。输入由六部分组成,第一部分是北红外对射管,检测北方是否有车俩通过;第二部分是南红外对射管,检测北南方是否有车俩通过,第三部分是西红外对射管,检测西方是否有车俩通过,第四部分是东红外对射管,检测东方是否有车俩通过;第三部分是独立按键按键,通过按键切换界面,控制南北或者东西方向常绿,设置南北时间或者设置东西绿灯时间;第四部分是供电模块,通过该模块可给整个系统进行供电。输出由二部分组成,第一部分数码管显示时间,第二部分是指示灯,指示该方向的是否可以通行。
五、软件设计流程
六、部分程序展示
软件版本:keil5
逻辑程序和驱动程序分开,分布于main.c和其他.c文件
*******处理函数
*****/
void Manage_function(void)
{
if(flag_display == 0) //测量界面
{
if(flag_mode_NS == 0 && flag_mode_WE == 0) //不是常绿模式,正常运行,时间低于3s,黄灯亮
{
if(flag_exchange == 0) //南北方向绿灯
{
if(time_all > 3)
LED = 0xEB;
else
LED = 0xE9; //黄灯
}
else
{ //东西方向绿灯
if(time_all > 3)
LED = 0xBE;
else
LED = 0x9E; //黄灯
}
}
if(IR_N == 1) //北方向红外对射管触发一次,北方向车辆数+1
{
car_N++;
while(IR_N == 1);
}
else if(IR_S == 1) //南方向红外对射管触发一次,南方向车辆数+1
{
car_S++;
while(IR_S == 1);
}
else if(IR_W == 1) //西方向红外对射管触发一次,西方向车辆数+1
{
car_W++;
while(IR_W == 1);
}
else if(IR_E == 1) //东方向红外对射管触发一次,东方向车辆数+1
{
car_E++;
while(IR_E == 1);
}
}
}