十字交通灯控制课程设计论文.doc

上传人:文库蛋蛋多 文档编号:3936396 上传时间:2023-03-28 格式:DOC 页数:14 大小:492.50KB
返回 下载 相关 举报
十字交通灯控制课程设计论文.doc_第1页
第1页 / 共14页
十字交通灯控制课程设计论文.doc_第2页
第2页 / 共14页
十字交通灯控制课程设计论文.doc_第3页
第3页 / 共14页
十字交通灯控制课程设计论文.doc_第4页
第4页 / 共14页
十字交通灯控制课程设计论文.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《十字交通灯控制课程设计论文.doc》由会员分享,可在线阅读,更多相关《十字交通灯控制课程设计论文.doc(14页珍藏版)》请在三一办公上搜索。

1、电子赛培训课作品设计报告十字路口交通灯控制 姓名:班别:自动化3班学号:序号:完成时间:2012-5-8华南理工大学广州学院电子信息工程学院一、 引言十字路口交通灯控制系统由8051单片机、交通灯显示、数码管倒计时、通过protues软件仿真,模拟十字路口交通信号控制情况。东西向通行时间为80s,南北向通行时间为60s,缓冲时间为3s。系统能够简单、经济、有效地疏导交通,提高交通路口的通行能力。当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这一技术在19世纪就已出现了。1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行

2、。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上。红灯亮表示“停止”,绿灯亮表示“通行”。1918年,又出现了带控制的红绿灯和红外线红绿灯。带控制的红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使红灯变为绿

3、灯。红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。1968年,联合国道路交通和道路标志信号协定对各种信号灯的含义作了规定。绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不

4、能安全停车时可以进入交叉路口。二、方案设计方案选择:方案一利用数字路的基本知识和设计方法,设计一个简单的交通灯控制系统要求。控制电路由时钟信号发生器、计数器、主控制器、信号灯译码驱动电路和数字显示译码驱动电路等几部分组成,整机电路的原理框图如图1.1所示。四个路口设有红、黄、绿三色灯和两位8421BCD码的计数、译码显示器。 显示器译码器计数器时钟信号发生器支干道信号灯信号灯译码驱动电路主干道信号灯主控电路图1.1数字电路总体框图方案二利用单片机设计交通灯控制系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,采用数码管与点阵LED 相结合的方法因为设计既要求倒计时数字输出

5、,又要求有状态灯输出等,为方便观看并考虑到现实情况,用数码管与LED灯分别显示时间与提示信息。总体框图如图1.2所示80c51单片机Max7219控制芯片红黄绿信号灯定时器t0中断最小系统外围接口电路8段LED数码管显示图1.2 单片机控制系统的总体框图三、方案确定权衡利弊,我们决定采用方案二以实现本次硬件电路设计的功能。方案一,硬件电路复杂,电路抗干扰能力弱,定时计数无法保证完全准确,耗材多,不利于设计和应用。方案二,利用软件定时器T0计时,使用高级程序设计C语言编程,更为准确,硬件结构简单,具有更强的扩展功能,更具人性化。这种方案既满足系统功能要求,又减少了系统实现的复杂度。权衡利弊,我们

6、决定采用方案二以实现本次硬件电路设计的功能。方案论证方案二在硬件电路方面,采用80c51最小系统结合外围的MAX7219数码管控制芯片、led数码管显示、发光二极管作为红绿黄信号指示灯,由MAX7219芯片驱动8位数码管显示倒计时,其中南北通行时间为80s,东西通行时间为60s,黄灯缓冲时间为3s。程序设计方面,利用定时器T0产生每10ms一次的中断,每100次中断为1s。计时较为准确。另外本方案所利用的单片机I/O口较少,便于扩展其他功能,以应用与实际当中。四、总体设计设在十字路口,分为东西向和南北向,在任一时刻只有一个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向

7、对换。其具体状态如下图所示。说明:黑色表示亮,白色表示灭。交通状态从状态1开始变换,直至状态4然后循环至状态1,周而复始,即如图2.1所示:图2.1 交通状态五、单元电路设计及测试采用专用数码管显示控制芯片MAX7219。MAX7219是美国MAXIM公司生产的串行输入/输出共阴极显示驱动器,该芯片最多可驱动8位7段数字LED显示器或个LED和条形图显示器,如图2.2所示。图2.2 7219原理图数码管显示方面,东西南北各个方向分别用2位7段数码管,东西方向接DIG0和DIG1,南北方向接DTG2和DIG3进行位选控制。如图2.3所示图2.3数码管红黄绿信号灯采用三个共阳极发光二极管作为指示灯

8、,南北、东西方向个一组,分别对应数码管的倒计时。东西方向接单片机的P0.0-P0.2口、南北方向接单片机的P1.0-1.2口.如图2.4所示图2.4 led红绿灯六、总体测试 通过具体的路口交通灯状态的演示分析我们可以把这四个状态归纳如下:东西方向红灯灭,同时绿灯亮,南北方向黄灯灭,同时红灯亮,倒计时20秒。此状态下,东西向禁止通行,南北向允许通行。东西方向绿灯灭,同时黄灯亮,南北方向红灯亮,倒计时2秒。此状态下,除了已经正在通行中的其他所以车辆都需等待状态转换。南北方向红灯灭,同时绿灯亮,东西方向黄灯灭,同时红灯亮,倒计时20秒。此状态下,东西向允许通行,南北向禁止通行。南北方向绿灯灭,同时

9、黄灯亮,东西方向红灯亮,倒计时2秒。此状态下,除了已经正在通行中的其他所以车辆都需等待状态转换。下面我们可以用图表表示灯状态和行止状态的关系如下:状态1状态2状态3状态4东西向禁行等待变换通行等待变换南北向通行等待变换禁行等待变换东西红灯1100东西黄灯0001东西绿灯0010南北红灯0011南北绿灯1000南北黄灯0100东西南北四个路口均有红绿黄3灯和数码显示管2个,在任一个路口,遇红灯禁止通行,转绿灯允许通行,之后黄灯亮警告行止状态将变换。状态及红绿灯状态如表2.1所示。说明:0表示灭,1表示亮。七、结论交通灯控制在交通运输领域有着非常重要的作用。本文完成了基于单片机的交通灯控制系统的设

10、计与模拟。包括通行方案的设计,系统的硬件开发、软件编程与仿真调试等。在论文完成过程中,主要做的工作有:(1)确定交通系统具体的通行方案,规定东西向和南北向车辆的行止状态和时间分配,以及要求其他多功能的实现。(2)以ATMEL公司的AT89S51单片机为核心进行系统硬件设计,输出控制交通信号灯亮灭状态及时间,以及LED数码管倒计时显示。(3)在车流量检测系统中采用模糊控制方法,这需要知道被控对象的数学模型,进行清晰化,具体化。因此,必须实施调查确定车流量少,中,多所要求的具体数量,然后经过单片机控制器的相关算法及处理确定红绿灯亮灭时间。八、附录:总仿真图C程序:#include#include#

11、define uchar unsigned char#define uint unsigned intsbit GREEN0 = P10;/南北交通灯sbit YELLOW0 = P11;sbit RED0= P12;sbit GREEN1 = P00; /东西交通灯sbit YELLOW1 = P01;sbit RED1 = P02;sbit DIN = P30; / 串行数据输入sbit LOAD = P31; / 显示数据锁存控制sbit CLK = P32; / 串行时钟#define NoOp 0x00 / 空操作寄存器#define Digit0 0x01 / 数码管1寄存器#de

12、fine Digit1 0x02 / 数码管2寄存器#define Digit2 0x03 / 数码管3寄存器#define Digit3 0x04 / 数码管4寄存器#define Digit4 0x05 / 数码管5寄存器#define Digit5 0x06 / 数码管6寄存器#define Digit6 0x07 / 数码管7寄存器#define Digit7 0x08 / 数码管8寄存器#define DecodeMode 0x09 / 译码模式寄存器#define Intensity 0x0a / 亮度寄存器#define ScanLimit 0x0b / 扫描位数寄存器#defi

13、ne ShutDown 0x0c / 低功耗模式寄存器#define DisplayTest 0x0f / 显示测试寄存器#define ShutdownMode 0x00 / 低功耗方式#define NormalOperation 0x01 / 正常操作方式#define ScanDigit 0x07 / 扫描位数设置,显示8位数码管#define DecodeDigit 0xff / 译码设置,8位均为BCD码#define IntensityGrade 0x0a / 亮度级别设置#define TestMode 0x01 / 显示测试模式#define TextEnd 0x00 / 显

14、示测试结束,恢复正常工作模式uchar DisBuffer8=0,0,0,0,0,0,0,0; / 显示缓存区uint aa;void delay(uint t); /延时t毫秒void xtimer0(); /定时器0中断void init1(); /状态1,南北通行80秒void init2(); /状态2,南北黄灯闪烁3秒,东西红灯闪烁3秒void init3(); /状态3,东西通行60秒void init4(); /状态4,东西黄灯闪烁3秒,南北红灯闪烁3秒void SendChar (uchar ch); /* 向MAX7219写入字节(8位)*/void WriteWord (u

15、char addr,uchar num); /* 向MAX7219写入字(16位)*/void InitDisplay (void); /* MAX7219初始化 */void main() InitDisplay (); / MAX7219初始化 WriteWord(DisplayTest,TestMode); / 开始显示测试,点亮所有LED delay(1000); / 延时约1s WriteWord (DisplayTest,TextEnd); / 退出显示测试模式TMOD=0x01;/定时器T0工作于方式1EA=1;/开中断ET0=1;/开定时中断TR0=1;/开定时器T0 whil

16、e(1) init1();/第1个状态 init2();/第2个状态 init3();/第3个状态 init4();/第4个状态 void init1()/状态1,南北绿灯80秒,东西亮红灯int temp,count;temp=84;/变量赋初值count=81;while(1) RED0=1;RED1=0;GREEN0=0; GREEN1=1;YELLOW0=1; YELLOW1=1;if(aa=100)/定时100*10MS=1Saa=0;/定时完成一次后清0temp-;/变量自减count-;if(temp=2)break;DisBuffer0=temp%100/10;/显示十位 Di

17、sBuffer1=temp%10;/显示个位DisBuffer2=count%100/10;/显示十位 DisBuffer3=count%10;/显示个位WriteWord (Digit0,DisBuffer0); WriteWord (Digit1,DisBuffer1); WriteWord (Digit2,DisBuffer2); WriteWord (Digit3,DisBuffer3);void init2()/状态2,南北黄灯闪烁3秒,东西红灯闪烁3秒int temp;temp=4;/变量赋初值while(1)GREEN0=1;if(aa=100)/定时100*10MS=1Saa=

18、0;/定时完成一次后清0temp-;/变量自减YELLOW0=YELLOW0;RED1=RED1;if(temp0)break;DisBuffer0=temp%100/10;/显示十位 DisBuffer1=temp%10;/显示个位DisBuffer2=temp%100/10;/显示十位 DisBuffer3=temp%10;/显示个位WriteWord (Digit0,DisBuffer0); WriteWord (Digit1,DisBuffer1); WriteWord (Digit2,DisBuffer2); WriteWord (Digit3,DisBuffer3);void in

19、it3()/状态3,东西绿灯60秒,南北亮红灯int temp,count;temp=64;/变量赋初值count=61;while(1)RED0=0; RED1=1;YELLOW0=1; GREEN1=0;if(aa=100)/定时100*10MS=1Saa=0;/定时完成一次后清0temp-;/变量自减count-;if(temp=2)break;DisBuffer0=count%100/10;/显示十位 DisBuffer1=count%10;/显示个位DisBuffer2=temp%100/10;/显示十位 DisBuffer3=temp%10;/显示个位 WriteWord (Dig

20、it0,DisBuffer0); WriteWord (Digit1,DisBuffer1); WriteWord (Digit2,DisBuffer2); WriteWord (Digit3,DisBuffer3);void init4()/状态4,东西黄灯闪烁3秒,南北红灯闪烁3秒int temp;temp=4;/变量赋初值while(1)RED1=1;GREEN0=1;GREEN1=1;if(aa=100)/定时100*10MS=1Saa=0;/定时完成一次后清0temp-;/变量自减YELLOW1=YELLOW1;RED0=RED0;if(temp0)break;DisBuffer0=

21、temp%100/10;/显示十位 DisBuffer1=temp%10;/显示个位DisBuffer2=temp%100/10;/显示十位 DisBuffer3=temp%10;/显示个位 WriteWord (Digit0,DisBuffer0); WriteWord (Digit1,DisBuffer1); WriteWord (Digit2,DisBuffer2); WriteWord (Digit3,DisBuffer3);/* 向MAX7219写入字节(8位)*/void SendChar (uchar ch) uchar i,temp; _nop_(); for (i=0;i8;

22、i+) temp=ch&0x80; ch=ch1; if(temp) DIN=1; CLK=0; CLK=1; else DIN=0; CLK=0; CLK=1; /* 向MAX7219写入字(16位)*/void WriteWord (uchar addr,uchar num) LOAD=0; _nop_(); SendChar(addr); _nop_(); SendChar(num); _nop_(); LOAD=1; / 锁存进相应寄存器/* MAX7219初始化 */void InitDisplay (void) WriteWord (ScanLimit,ScanDigit); /

23、设置扫描界限 WriteWord (DecodeMode,DecodeDigit); / 设置译码模式 WriteWord (Intensity,IntensityGrade); / 设置亮度 WriteWord (ShutDown,NormalOperation); / 设置为正常工作模式/*定时中断子函数*/void xtimer0() interrupt 1TH0 = (65535-10000)/256; / 10ms TL0 = (65535-10000)%256;aa+;/* 延时t毫秒 */void delay(uint t) uint i; while(t-) /* 对于12M时钟,约延时1ms */ for (i=0;i125;i+)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号