交通管理与控制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

长安大学
交通控制课程设计报告
三相位交通信号灯设计
课设项目:三相位交叉口交通信号灯设计
学院:信息工程学院
专业:计算机科学与技术(交通信息工程)班级:24020804
学生姓名:王豪荣吴涛陈亮星
学号:2402080406 240080409 2402080417 指导老师:崔建明
目录
交通控制与管理课程设计报告 (1)
一、引言 (3)
1.1背景与现状 (3)
1.2开发设计的目的 (3)
1.3课程设计的内容 (3)
二、系统概要设计 (3)
2.1设计模块的分工 (4)
2.2丁字路口三相位设计 (4)
2.3整体设计 (5)
2.4模拟硬件部分设计 (6)
三.核心算法描述: (8)
3.1延时函数算法 (8)
3.28段LED显示器控制函数算法 (8)
3.3信号灯控制函数算法 (9)
四、实验结果与分析 (10)
五、结束语 (11)
参考文献 (12)
附录: (12)
一、引言
1.1 背景与现状
当今社会经济高速发展,人们的交通问题也越来越引起关注。

人,车,路三者关系的协调,已成为交通管理部门急需解决的重要问题之一。

城市交通控制系统是用于城市交通数据监测,交通信号灯控制与交通疏导的计算机综合管理系统,它是现在城市交通监控指挥系统中最重要的组成部分。

随着城市机动车的不断增加,许多大城市如北京,上海,南京等出现了了交通超负荷运行的状况,然后就是这些城市纷纷修建城市高速道路。

初期确实改善了交通状况。

然而,随着交通量的快速增长,以及缺乏对这些道路的系统研究和控制,城市的交通问题又出现了,而且有着愈演愈烈的趋势,所以我们必须对在有限的道路资源怎样进行交通疏导进行深入的研究。

1.2 开发设计的目的
通过对丁字路口的三相位设计,深刻理解相位的概念,掌握三相位的设计,并学会在proteux软件上模拟用三相位完成丁字路口信号灯的设计与控制,以达到交通疏导的目的。

1.3 课程设计的内容
本次课程设计运用到proteux软件和keil软件模拟交通信号灯的控制,然后设计一个丁字路口的三相位的交通信号灯的控制,每个进口道必须有红、黄、绿三色交通信号灯,在绿灯变绿灯期间黄灯亮,并要求每秒闪亮一次。

二、系统概要设计
2.1 设计模块的分工
本次课程设计过程中,组长为吴涛,首先是王豪荣,吴涛,陈亮星三人共同完成丁字路口三相位相位图的设计,然后是王豪荣与吴涛共同完成电路图的设计,吴涛与陈亮星完成代码的实现,最后是课程设计报告部分,王豪荣负责课程设计报告的设计背景,设计目的与要求,吴涛完成系统设计概要设计,陈亮星完成实验结果的分析以及其他部分。

2.2丁字路口三相位设计
本次课程设计需要根据实际情况的交通道路情况来模拟控制丁字交叉路口的交通信号灯从而来提高交通流量,减少延误。

但由于没有实际监测数据,所以按照道路的基本情况设计一个丁字路口的三相位来进行设计和控制交通灯。

相位图分别如下:
图2-1 相位一
图2-2 相位二
图2-3 相位3
2.3整体设计
Proteux软件电路图的设计,包括AT89C51单片机的控制,LED显示灯和8段LED显示器的显示:
图2-4 整体框架图
2.4模拟硬件部分设计
通过三种颜色的LED显示灯和8段LED显示器对电路的运行进行显示。

图2-5 LED显示灯
图2-6 LED显示器
通过利用AT89C51单片机作为主终端,其他的一些电路硬件都要连接到AT89C51上。

它是此次模拟的最核心以及最重要部分。

图2-7 AT89C51单片机
用LED-GREEN作为绿灯,LED-RED作为红灯,LED-YELLOW作为黄灯显示,用来表明显示车辆的通行与禁止情况。

然后用数码显示器显示车辆通行与禁止信号灯的控制时间。

图2-8 进口一显示灯
三.核心算法描述:
3.1延时函数算法
void DelayMS(uint x)
{
uint t;
while(x--)
{
for(t=120;t>0;t--);
}
}
3.2 8段LED显示器控制函数算法
void Displ ay(int y)
{
int i,j,a,b;//环境变量
for(j=y;j>=0;j--) //for循环控制时间
{
if(j>3) //判断是否是最后三秒
{
a=j/10; //取时间十位数
b=j%10; //取时间个位数
for(i=0;i<8;i++) //for循环在8段l ed显示器上显示时间
{
P3=0x40; //选中十位
P1=~Disp_Tab[a]; //进行显示
Del ayMS(30); //调用延时
P3=0x80; //选中各位
P1=~Disp_Tab[b]; //进行显示
Del ayMS(30); //调用延时
}
}
El se //是最后三秒启动黄灯闪烁
{
a=j/10;
b=j%10;
for(i=0;i<8;i++)
{
if(i%3==0)
{
switch(y) //只用了一个8段显示器,需要判断显示那个路口的黄色灯
{
case 12:YELLOW_E=~YELLOW_E;break;
case 13:YELLOW_W=~YELLOW_W;break;
case 14:YELLOW_N=~YELLOW_N;break;
}
}
if(i%2==0) //8段显示器上数字闪烁
{
P3=0x40;
P1=~Disp_Tab[a];
Del ayMS(30);
P3=0x80;
P1=~Disp_Tab[b];
Del ayMS(30);
}
el se
{
P3=0x00;
Del ayMS(60);
}
}
}
}
}
3.3信号灯控制函数算法
void Traffic_lignt()
{
switch(Operation_Type) //switch条件分支语句进行相位控制
{
case 1: //第一相位
P0=0x73;
P2=0x59;
Displ ay(12); //调用8段显示器函数同时控制相位时间
Operation_Type = 2;
break;
case 2: //第二相位P0=0xd6;
P2=0x4e;
Displ ay(13);
Operation_Type = 3;
break;
case 3: //第三相位P0=0x6b;
P2=0x2e;
Displ ay(14);
Operation_Type = 1;
break;
default:break;
}
}
四、实验结果与分析
通过在proteux软件上运行程序,显示结果如下:
图4-1
运行结果与设计的预期相吻合。

五、结束语
通过这次课程设计,我们三个人共同协作,相互交流,学到了很多东西,比如学会了使用proteus和keil软件,对交通设计的概念有了一定的理解。

同时对proteux软件的器件有了一定的熟悉,最终完成了电路图的设计,然后就是通过keil软件编写程序实现电路的运行,对keil编程有了进一步的了解。

通过实际的操作的同时也巩固了以往的知识,并且使我认识到最初构想思路的重要性。

还有这周内感谢崔老师的精心指导。

参考文献
[1]吴兵、李晔.交通管理与控制(第四版)[M].人民交通出版社,2010.
[2] 张树升. 交通管理与控制(第一版)[M].人民交通出版社,2009.
[3]袁振洲. 道路交通管理与控制(第一版)[M].人民交通出版社,2009
附录:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char cod e Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; sbit YELLOW_W=P0^1;
sbit YELLOW_E=P0^6;
sbit YELLOW_N=P2^3;
uchar Operation_Type = 1;
void Del ayMS(uint x)
{
uint t;
whil e(x--)
{
for(t=120;t>0;t--);
}
}
void Displ ay(int y)
{
int i,j,a,b;
for(j=y;j>=0;j--)
{
if(j>3)
{
a=j/10;
b=j%10;
for(i=0;i<8;i++)
{
P3=0x40;
P1=~Disp_Tab[a];
Del ayMS(30);
P3=0x80;
P1=~Disp_Tab[b];
Del ayMS(30);
}
}
el se
{
a=j/10;
b=j%10;
for(i=0;i<8;i++)
{
if(i%3==0)
{
switch(y)
{
case 12:YELLOW_E=~YELLOW_E;break;
case 13:YELLOW_W=~YELLOW_W;break;
case 14:YELLOW_N=~YELLOW_N;break;
}
}
if(i%2==0)
{
P3=0x40;
P1=~Disp_Tab[a];
Del ayMS(30);
P3=0x80;
P1=~Disp_Tab[b];
Del ayMS(30);
}
el se
{
P3=0x00;
Del ayMS(60);
}
}
}
}
}
void Traffic_lignt()
{
switch(Operation_Type)
{
case 1:
P0=0x73;
P2=0x59;
Displ ay(12);
Operation_Type = 2;
break;
case 2:
P0=0xd6;
P2=0x4e;
Displ ay(13);
Operation_Type = 3;
break;
case 3:
P0=0x6b;
P2=0x2e;
Displ ay(14);
Operation_Type = 1;
break;
default:break;
}
}
void main()
{
whil e(1)
{
Traffic_lignt();
}
}。

相关文档
最新文档