交通管理与控制课程设计道路交叉口信号灯控制仿真Word格式.docx
《交通管理与控制课程设计道路交叉口信号灯控制仿真Word格式.docx》由会员分享,可在线阅读,更多相关《交通管理与控制课程设计道路交叉口信号灯控制仿真Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
![交通管理与控制课程设计道路交叉口信号灯控制仿真Word格式.docx](https://file1.bdocx.com/fileroot1/2022-10/10/3dc21b83-0d73-4c59-b22c-071b474fa4d3/3dc21b83-0d73-4c59-b22c-071b474fa4d31.gif)
3.2.2显示电路5
3.3程序算法描述7
3.3.1延时算法7
3.3.2相位设计算法7
3.3.3黄灯闪烁算法8
3.3.4数码管显示算法8
4.运行结果及分析8
5.体会感想8
参考文献9
任务分工9
附录19
1.摘要
在城镇街道的十字交叉路口,为了保证交通秩序和行人安全,一般在每条道路上各有一组红、黄、绿交通信号灯,其中红灯亮,表示该条道路禁止通行;
黄灯亮表示该条道路上未过停车线的车辆停止通行,已过停车线的车辆继续通行;
绿灯亮表示该条道路允许通行。
交通灯控制电路自动控制十字路口、丁字路口和环形路口的红、黄、绿交通灯的状态转换,指挥各种车辆和行人安全通行,实现交通管理的自动化。
2.课程设计内容和要求
课程设计内容:
1.十字路口的四相位控制;
2.丁字路口的三相位控制;
3.环道相位控制。
课程设计基本要求:
1.使用proteus和keil两款软件进行模拟设计;
2.每个进口道必须有红、黄、绿三色交通信号灯;
3.在绿灯变绿灯期间黄灯亮,并要求没秒闪亮一次;
4.各个进口道的通行时间和黄灯亮的时间均可在0~99秒内任意设定;
5.内容任选一个,或者全选做。
3.系统设计
3.1设计原理
本次的交通管理与控制课程设计,我们三个人主要做的是丁字路口三相位的信号灯控制设计,包括西进口、东进口和北进口的信号灯设计。
在查阅书上内容和相关资料后,我们设计的三相位包括:
第一相位是西进口允许直行禁止左转,东进口允许直行和右转,北进口禁止左转和右转。
设计相位图如图1:
图1第一相位图
第二相位是西进口允许左转和直行,东进口禁止直行和右转,北进口允许右转禁止左转。
设计相位图如图2:
图2第二相位图
第三相位是西进口禁止直行和左转,东进口禁止直行允许右转,北进口允许左转和右转。
设计相位图如图3:
图3第三相位图
我们这样设计可以使每个进口道都不存在冲突点,使得每个进口道设计最合理,同时也满足课程设计要求。
3.2硬件设计部分
本次的交通管理与控制课程设计,我们利用AT89C51单片机最小系统作为最主要部分进行电路控制,用LED-GREEN作为绿灯,LED-RED作为红灯,LED-YELLOW作为黄灯,使用7SEG-BCD数码管对各个进口道的通行时间进行控制显示。
其中电路连接时为了使得电路图看得清晰明了,我们没有采用传统的线路连接法,而是使用终端模式。
下面对每部分进行介绍:
3.2.1单片机最小系统
单片机最小系统包括AT89C51单片机芯片,时钟电路和复位电路。
其中AT89C51单片机芯片是整个系统的核心,程序烧录到芯片中,通过芯片控制电路;
时钟电路由一个晶振和两个电容构成,用于产生系统时钟;
复位电路由一个电容、一个电阻和一个开关构成,可以有上电复位、手动复位和看门狗复位。
最小系统电路图如图4:
图4单片机最小系统图
3.2.2显示电路
我们利用LED和7SEG-BCD数码管对显示电路进行设计。
系统总设计图如图7:
图5LED示意图图67SEG-BCD数码管示意图
图5系统总设计图
3.3程序算法描述
3.3.1延时算法
我们利用两函数来设计延时算法,包括微妙函数和毫秒函数,程序如下:
voidDelayUs2x(uchart){//微妙函数
while(--t);
}
voidDelayMS(uintt){//毫秒函数,延时t毫秒
while(t--){
DelayUs2x(245);
//时间运算为:
2*(2*245+5)=990us,约等于1ms
}
3.3.2相位设计算法
在设计交通信号灯函数时,我们使用了switch…case…选择分支,并且分6个分支,其中前3个case是用来设计相位,举例说明程序如下:
case1:
//第一相位
//初始化各端口
RED_WEST=1;
YELLOW_WEST=1;
GREEN_LEFT_WEST=1;
GREEN_STRIGHT_WEST=0;
RED_EAST=1;
YELLOW_EAST=1;
GREEN_RIGHT_EAST=0;
GREEN_STRIGHT_EAST=0;
RED_NORTH=0;
YELLOW_NORTH=1;
GREEN_RIGHT_NORTH=1;
GREEN_LEFT_NORTH=1;
for(i=20;
i>
=0;
i--){//设计第一相位通行20秒
num_display(i);
//调用显示函数,从20显示到0
DelayMS(1000);
//延时1秒
if(i==0){//当i的值为0
i=99;
break;
//退出for循环,避免数的回绕而无法退出for循环
}
Operation_Type=4;
//转到case4进行黄灯闪烁
break;
3.3.3黄灯闪烁算法
switch…case…选择分支的后3个case是用来设计3次黄灯闪烁,列举其中一个,程序如下:
case4:
//进行黄灯闪烁
if(Flash_Count%2==0)//当Flash_Count为偶数是进行闪烁
num_display(3-Flash_Count/2);
//调用显示函数,从3显示到0
GREEN_RIGHT_EAST=1;
GREEN_STRIGHT_EAST=1;
//初始化各端口
YELLOW_EAST=~YELLOW_EAST;
//YELLOW_EAST取反
DelayMS(500);
//延时0.5秒
if(++Flash_Count!
=7)//if判断
return;
//如果还未到7则回到case4开头
Flash_Count=0;
//将Flash_Count复位
Operation_Type=2;
//转到case2
3.3.4数码管显示算法
因为我们选用的是7SEG-BCD数码管进行显示,其特点是管脚只有4个,可以直接和单片机芯片的管脚相连。
又其是BCD数码管,特点是直接给数码管便可直接进行数据显示。
程序描述如下:
voidnum_display(uintnum){//7SEG-BCD显示函数
uinta,b,c;
//定义三个无符号整数
a=num/10;
//a存的是十位数
b=num%10;
//b存的是个位数
c=b;
a=a<
<
4;
//a左移4位
c=c|a;
//进行或运算,得到a和b的组合数
dataport=c;
//将c的值给P2端口,高4位的是十位数a的值,低4位的值是个位数b的值
4.运行结果及分析
当把设计好电路,并把程序装载到单片机中,启动电源后可以看到LED灯按照设计的相位开始点亮,并且数码管也在进行数据的递减,完全吻合程序设计。
5.体会感想
通过这次课程设计,我受益匪浅,一方面是对学过的课内知识的温习和巩固,一方面是锻炼了我的动手能力、分析能力、写作能力和团队协作精神,再一方面是学会了使用proteus和keil这两款软件,为今后的学习做好了铺垫。
感谢XX老师,谢谢老师的讲课和课设指导!
参考文献
[1]吴兵,李晔等.交通管理与控制[M].北京:
人民交通出版社,2010.
[2]袁俊泉.单片机设计及其应用.西安:
西安电子科技大学出版社,2002.
任务分工
在本次课设中,我们的分工如下:
XX负责课设报告的撰写,XX和XX负责程序和电路图的设计。
附录1
#include<
reg52.h>
#defineucharunsignedchar//类型重定义
#defineuintunsignedint
#definedataportP2//定义P2端口
//定义西进口交通灯的端口号
sbitRED_WEST=P0^0;
sbitYELLOW_WEST=P0^1;
sbitGREEN_LEFT_WEST=P0^2;
sbitGREEN_STRIGHT_WEST=P0^3;
//定义东进口交通灯的端口号
sbitRED_EAST=P0^4;
sbitYELLOW_EAST=P0^5;
sbitGREEN_RIGHT_EAST=P0^6;
sbitGREEN_STRIGHT_EAST=P0^7;
//定义北进口交通灯的端口号
sbitRED_NORTH=P1^0;
sbitYELLOW_NORTH=P1^1;
sbitGREEN_RIGHT_NORTH=P1^2;
sbitGREEN_LEFT_NORTH=P1^3;
ucharFlash_Count=0;
//闪烁计数变量
Operation_Type=1;
//操作类型变量
voidnum_display(uintnum){//7SEG-BCD显示函数
uinta,b,c;
//定义三个无符号整数
a=num/10;
//a存的是十位数
b=num%10;
//b存的是个位数
c=b;
a=a<
//a左移4位
c=c|a;
//进行或运算,得到a和b的组合数
dataport=c;
voidDelayUs2x(uchart){//延时函数
voidDelayMS(uintt){//延时t毫秒
DelayUs2x(245);
//时间运算为:
voidTraffic_light()//交通信号灯函数
{
uinti;
switch(Operation_Type){//switch选择
case1:
//第一相位
//初始化各端口
RED_WEST=1;
RED_EAST=1;
RED_NORTH=0;
for(i=20;
i--){//设计第一相位通行20秒
num_display(i);
DelayMS(1000);
if(i==0){//当