版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章绪论1.1研究背景城市化和交通拥堵的加剧迫切需要以最高效率运营我们的交通系统。实时交通信号控制是现代城市交通控制系统的一个组成部分,旨在实现道路网络的可选利用。为大型复杂交通网络提供有效的实时交通信号控制是一个极具挑战性的分布式控制问题。最近的趋势是将交通信号系统视为集成多模式运输系统的一个小组件,这使得信号系统的操作更加复杂。优化交通信号和其他控制设备,以使街道和高速公路上的交通高效运行,是交通管理系统中具有挑战性的一部分。1868年12月10日,铁路工程师J.P.Knight在伦敦英国议会大厦外安装了第一个交通灯。它们与当时的铁路信号灯很相似,有着旗杆和夜间使用的红色和绿色煤气灯。煤气灯的底部用一个杠杆转动,以便适当的灯光面对交通。然而后来却发生了事故,导致操作人员身体损伤。现代电动交通灯是美国人的发明。1923年,GarrettMorgan获得了交通信号装置的专利。正是他在克利夫兰大街上开车时的经历,让他发明了一种交通信号装置。俄亥俄州的阿什维尔号称是美国最古老的红绿灯所在地,在1982年被转移到当地博物馆之前,红绿灯一直被用在公共道路的一个十字路口。第一个互联交通信号系统于1917年在盐湖城安装,通过一个手动开关同时控制六个相连的十字路口。1922年3月,美国德克萨斯州休斯敦市引入了互联交通灯的自动控制。1927年,英国第一个自动实验交通灯在伍尔弗汉普顿部署。从过去的几十年,交通管理一直是现代化的最大问题之一。为了克服交通危机,许多科研人员已经投入了相当大的精力。从一开始,“人工交通管制”就要求人力来控制交通。根据国家和州的不同,交通政策被分配到不同的地区来控制交通。这些人拿着牌子、信号灯和哨子来控制交通。他们被要求穿特定的制服,以便于被司机识别。K.Vidhya等人提出了一种基于密度的交通信号系统,该系统通过感知交叉口的交通密度自动改变信号计时。在大城市,交通信号的时间分配是固定的。本研究的主要目的是通过捕捉图像,然后将其转换为灰度图像,再转换为阈值图像来控制交通信号。轮廓图像有助于计算路口车辆的数量。输出屏幕显示在交叉口的车辆数量,绿色信号将根据交通密度发光。。他们分析了图像序列,然后估计了交通堵塞,最后预测了交通信号灯的时间。树莓派微控制器用于感知交通密度并提供信号定时。A.PromilaSinhmar女士提出了一种使用红外传感器和微控制器的智能交通灯和密度控制,利用微控制器优化交通灯控制。本课题使用的单片机是89451RD2,它是基于MCS51家族的。红外线发射器和红外线接收器放置在道路的两侧。当一辆车在红外发射器和红外接收器之间的道路上经过时,红外系统会自动激活,并计算当前的车辆数量并存储在内存中。单片机根据车辆数量对交通信号的时间进行决策。在他们的研究中,他们提出,首先从车辆或物体获取输入或图像。其次是对单片机给定的输入进行处理,最后通过闭环系统显示交通灯的控制。KhalilM.Yousef等人提出了一种使用无线传感器网络的智能交通灯流量控制系统。本文主要是针对交通信号灯控制的有效管理和利用系统设计。提出了一种基于无线传感器网络的自适应交通控制系统,对单个和多个交叉口的交通状况进行动态控制。他们的研究包括交通系统通信算法(TSCA)和交通信号时间操纵算法(TSTMA),这两种算法都是通过交通信号的动态变化来实现有效的交通控制。在单个交叉口中,交通堵塞可以通过计算平均等待时间和平均排队长度来解决,而在多个交叉口上实现全局有效的交通流控制。他们未来的工作可以模拟人类行为,并使用FPGA技术封装整个系统。同时,还考虑了不同类型的交叉口和不同类型的交叉口方向。A.D.Jadhav和其他人提出了一种智能交通灯控制系统,旨在通过减少交通量来减少道路上的延误。他们分析了每条道路的交通流量以及信号,并指定时间段以发出各自的光。建议的系统旨在尽量减低交通挤塞的可能性,在一定程度上是透过清理车辆密度较高的道路。交通密度较高的道路会被指定为绿灯,其他道路则会被指定为红灯。1.2研究目标及意义城市交通堵塞是一个日益严重的问题,各个方向的交通越来越拥挤,城市之间以及郊区之间的交通也越来越拥挤。交通灯是用来控制交通的。在现代,每个人都有不同类型的车辆,导致车辆数量的增加。这就是为什么交通灯是强制性的,以避免交通堵塞和事故。交通信号中有三个灯,对司机有不同的信息。红灯要求司机在十字路口让道,绿灯给司机自由驾驶通过中间路段的许可,而黄灯提醒司机如果下一个灯是红灯就等待,或者如果下一个灯是绿灯就准备走/打开发动机。本文的重点是减少交叉路口处的交通堵塞,这将减少长时间的等待,燃料和金钱的损失。交通灯是位于道路交叉口的信号装置,用于控制交通流量。一般来说,交通灯由三个灯组成。它们分别是红色、黄色和绿色。当红灯亮起时,它表示面向红灯的车辆停下,黄灯表示在十字路口以外小心准备停车。绿灯是朝着所示的方向前进。交通灯序列可能与其他不同,它们可能是特殊的规则或一组特定方向的交通灯。该项目的目标是:1.设计交通控制系统硬件电路。2.开发合适的算法来实现设计。3.成功模拟自动交通控制。该项目的意义在于:1.它将有助于减少十字路口可能发生的碰撞或事故,从而提高司机和行人的安全系数。2.该项目旨在减轻人们对由于交通控制系统不合理而浪费时间的担忧。3.由于该系统能够不间断地工作24小时,从而确保交通控制服务的持续可用性,因此减少了人力和精力。第二章系统方案设计与要求2.1系统的方案设计在具体设计模拟交通灯控制系统之前,首先进行需求分析。系统应包含正常情况下的通行模式、繁忙状态下的通行模式和紧急情况下的通行模式。三种模式如下:正常模式。没有特殊车辆时,交通灯按正常时序进行变换。东西南北四个方向,任何一处时刻,都只有一个方向通行,另外一个方向是禁止通行的。典型的十字路口如图1所示。没有必要设置交通灯来限制倾向于右转的汽车,因为需要右转的汽车不会与其他汽车发生冲突。因此,十字路口的交通灯只需要设计为控制倾向于左转和直行的汽车。正常模式通行车道交通的时间为40s,禁行车道禁止的时间为60s,左转信号时间变为19s,共有8个通行状态,状态S0东西禁止时间60s,南北通行时间40s,南北左转时间为20s,从状态S0开始变换直至状态S7,然后循环至状态S0,重复以上过程。8个通行状态总结如下:S0S0状态:东西人、车行道红灯亮,南北人、车行道绿灯亮S1状态:直行时间小于5时,南北黄灯亮,等待左转信号S3状态:左转时间小于5时,南北黄灯亮,等待停止信号S2状态:左转绿灯亮,南北红灯亮、黄灯灭,人行道红灯亮S4状态:东西人、车行道绿灯亮,南北人、车行道红灯亮S5状态:直行时间小于5时,东西黄灯亮,等待左转信号S6状态:左转绿灯亮,东西红灯亮、黄灯灭,人行道红灯亮S7状态:左转时间小于5时,东西黄灯亮,等待停止信号图2-1正常模式的状态转移图(2)繁忙模式:随着道路上车辆数量的增加,大城市的交通拥堵问题也越来越严重。这通常发生在早晨和晚上的主要枢纽。由于这种影响,人们在路上浪费了他们的时间。交通流量大的时间段的延迟时间应该比交通流量小的时间段的延迟时间设置得长,处于繁忙模式。因此可以通行车道交通的时间变成30s,禁止行驶车道禁止的时间变为45s,左转信号时间变为15s,其余状态和正常模式一致。(3)紧急模式:这种应急模式是在救护车、消防队、警车或VIP等重要车辆到达时使用的。如果没有紧急模式,重要车辆将面临更多的延误时间。因此,紧急模式对于每一个交通灯都是非常重要的。在这种情况下,全部显示红灯。在这个交通灯路口,人们等待交通灯变成绿色。2.2系统的功能要求根据一个十字路口车辆交通控制的实际运行情况可知,交通灯控制系统应该具有以下功能:1.控制车行道东西南北四组红绿灯,每组分别包含红黄绿灯和一个左转指示灯,共16盏信号灯以及四组人行道红绿灯,每组包含相同的两个红灯和绿灯,共16盏信号灯,总共32盏信号灯的亮灭。2.利用5个0.36寸两位一体共阴极数码管,四个角落各一组利用倒计时功能来表现通行时间的变化,剩下的一组用来设定通行时间的值。通行时间可利用按键来进行调节。3.利用按键实现对交通信号灯正常模式、繁忙模式以及紧急模式的切换。第三章系统硬件电路的设计3.1系统硬件总电路构成因微控制器单元(MCU)在嵌入式系统中的主要作用是提供廉价的可编程逻辑控制和与永久设备的接口。这意味着微控制器通常不需要提供复杂的功能。它非常适合监控选定的各种输入,并使用由内置处理器执行的预编程指令实时响应这些输入。嵌入式微控制器可以通过各种设备响应这些输入。这些功能对于设计者来说是可以用非常合理的成本获得的,而不需要很多努力。如果电路中有一些问题,我们可以通过简单地更改程序或纠正程序来配置它。此外,我们可以通过用基于微控制器的交通灯控制系统代替微处理器来修改基于微处理器的交通灯控制系统,因为在微处理器芯片中,只读存储器、随机存取存储器和输入/输出端口不在单个芯片中,但是在微控制器中,所有上述内容都嵌入在单个集成电路中。因此,在基于单片机的交通灯控制系统中,功耗和成本也将更低。为实现开发的基于微控制器的交通灯控制系统,整个系统设计需要四个子模块,如图3-1所示。开发的交通灯控制系统的多功能性是通过使用微控制器STC89C51实现的,这使研究人员能够使用软件来实现多功能、灵活和经济高效的解决方案。此外,其他元器件包括自锁开关、晶体振荡器、数码管、导线、DC座和万用板等。单单片机按键模块晶振电路数码管显示模块显示驱动模块信号灯显示模块复位电路图3-1系统的总体框图3.2单片机系统3.2.1单片机引脚介绍STC89C51有40个引脚,如表1所示:表1单片机引脚功能表P3的第二功能如表2所示:P3口第二功能第二功能说明P3.0RXD串行通信输入P3.1TXD串行通信输出P3.2INT0外部中断0输入P3.3INT1外部中断1输入P3.4T0计时计数器0输入P3.5T1计时计数器1输入P3.6WR外部数据存储器的写入信号P3.7RD外部数据存储器的读取信号表2P3的第二功能单片机引脚图如下:图3-2单片机引脚图3.2.2单片机最小系统单片机最小系统包含复位电路、晶振电路、上拉排阻和单片机本身。复位电路基本电路为单片机RESET(第9引脚)引脚引出一根线,和复位按键一端的一个引脚相连,另一端斜对角一个引脚接到VCC上,同时串联一个大小为10uF的电容C1,并且两个引脚并联起来通过一个大小为10K的电阻接入地。晶振电路基本电路为大小为11.0592MKz晶振的两个引脚同时串联一个大小为30uF的电容,并联起来接入地,同时一个接入单片机的XTAL1(19引脚)引脚,另一个接入单片机的XTAL2(18引脚)引脚。P0口输出不了高电平,平常只有低电平和高阻态两种状态,为了让P0口能够输出高电平,将上拉排阻接在P0口,如果不接上拉排阻,则P0无法驱动其他芯片,上拉排阻的选取一般都为10K的。EA/VPP引脚(31引脚)普遍都接电源,因为EA/VPP引脚接高电平时,单片机读取内部的ROM,接低电平时,读取外部的RPM,普遍下载程序时,都下载在单片机内部ROM。系统图如图3-2所示:图3-3单片机最小系统原理图3.3显示驱动模块3.3.1LED显示本系统总共设有控制车行道东西南北四组红绿灯,每组包含红黄绿灯和一个左转指示灯,共16盏信号灯以及四组人行道红绿灯,每组包含相同的两个红灯和绿灯,共16盏信号灯,总共32盏信号灯来指示通行状态。车行道东西红黄绿和左转信号灯通过74HC573分别接在单片机P1.3~P1.0口,车行道南北红黄绿和左转信号灯通过74HC573分别接在单片机P1.7~P1.4口,东西方向人行道上的绿灯通过三极管被连接在P3.0口上,由于东西向人行道和直行车辆同时停止通行,所以东西向人行道上的红灯和车行道的红灯一样,都接在P1.3口上,同理,南北方向人行道上的红灯和车行道的红灯一样,都接在P1.7口上,南北方向人行道上的绿灯通过三极管被连接在P3.1口上。图3-3LED灯3.3.2数码管显示本系统共设有5组0.36寸两位一体共阴极数码管,低电平点亮,四个角落各一组利用倒计时功能来表现通行时间的变化,剩下的一组用来设定通行时间的值。所有数码管的小数点不需要被点亮,所以数码管dp引脚闲置即可。东西方向数码管第5和第10引脚通过三极管驱动电路分别接在单片机P2.2和P2.3口,南北方向数码管的第5和第10引脚通过三极管驱动电路分别接在单片机P2.1和P2.0口,用来设定通行时间的数码管第5和第10引脚通过三极管驱动电路分别接在单片机P2.4和P2.5口。所有数码管剩下的1,3,4,6,7,8,9引脚串联起来通过另一个74HC573和上拉电阻分别接在P0.6,P0.0,P0.5,P0.3,P0.4,PO.2,P0.1口。图3-4数码管显示3.3.3驱动电路74HC573包含八路D型透明锁存器,本系统用到了两个74HC573芯片,都是用到了它的驱动作用,输入为高电平,输出则为高电平,输入为低电平,相应的输出也为低电平。单片机的IO口输出的电流非常小,输出能力非常差,为了让数码管和LED灯足够亮,必须要用到驱动芯片。一个74HC573芯片直接对应接在单片机P1.0~P1.7口上,另一个相同的74HC573芯片通过上拉排阻接在单片机P0.0~P0.7口上。表374HC573电气参数表74HC573参数74HC573基本参数电压
2.0~6.0V驱动电流
+/-7.8mA传输延迟
14ns@5V74HC573其他特性逻辑电平
CMOS功耗考量
低功耗或电池供电应用74HC573封装与引脚SO20,SSOP20,DIP20,TSSOP2074HC573特征:输入输出分布在芯片封装的两侧,为微处理器提供简便的接口用于微控制器和微型计算机的输入输出口三态正相输出,用于面向总线的应用共用三态输出使能端图3-574HC573驱动电路图三极管驱动电路,用到的都是9013NPN型三级管,主要用到它的开关作用,三极管基极为高电平时,三极管导通。三极管的发射极连接起来接入地,基极通过串联一个大小为4.7KΩ的限流电阻接入单片机,三极管Q1、Q2、Q3、Q4、Q5和Q6分别接入单片机P2.1~P2.6口。当三极管被导通,数码管的公共端就会得到一个低电平。三级管Q7、Q8分别接入单片机P3.0口(RXD引脚)、P3.1口(TXD引脚),高电平导通之后得到是高电平,用来驱动LED灯。图3-6三极管驱动电路3.4按键模块本系统一共有5个按键,包括复位按键、繁忙模式按键、时间加、时间减按键和紧急模式按键。这些按键是整个电路唯一需要手动控制的部分,但是却灵活的实现了对于整个系统的控制,通过这些按键可以实现对交通信号灯正常模式、繁忙模式以及紧急模式的切换,并且可以实现对通行时间的加减,是我们的设计更加人性化,方便对我们在现实生活中对交通路口进行灵活有效的控制,更好的服务于我们的驾驶员和行人。轻触按键在连接时只需按照按键斜对角连接即可,当多个按键一起用的时候就可以利用导通性,不用每个按键都接地或电源。复位按键、繁忙模式按键、紧急模式和时间加、时间减按键分别接入单片机RESET引脚(第9引脚)、P3^6引脚(WR)、P3^7(RD引脚)、P3^3引脚(INT1引脚)、P3^4引脚(T0引脚);按键电路如图3-7所示:图3-7键盘控制电路图3.5时钟模块MCS-51的时钟有两种方法:外部方法和内部方法。内部方法使用内部振荡器电路实现。交通灯的时钟电路很容易,所以可以使用内部振荡器。晶振电路基本电路为大小为11.0592MKz晶振的两个引脚同时串联一个大小为30uF的电容,并联起来接入地,同时一个接入单片机的XTAL1(19引脚)引脚,另一个接入单片机的XTAL2(18引脚)引脚。晶振就相当于单片机工作的速度,一般选取时大小不会超过24MHz,如果太高,则有可能会造成运行不稳定,电容C2和C3主要是为了消减谐波,起到一个稳定的作用,具体大小没有相应的计算公式,晶振电路为整个电路提供了时钟,是我们能够对整个系统进行精确控制的关键,尤其对于交通灯来说,时间必须精确无误,不容许有半点儿误差,并且要足够稳定,可以支持系统长时间完好运行。图3-8晶振电路3.6复位模块复位电路基本电路为单片机RESET(第9引脚)引脚引出一根线,和复位按键一端的一个引脚相连,另一端斜对角一个引脚接到VCC上,同时串联一个大小为10uF的电容C1,并且两个引脚并联起来通过一个大小为10KΩ的电阻接入地。复位电路复位原理其实就是让RESET引脚保持两微妙的高电平,程序才可以从头开始执行,电容C4和电阻R2的作用是,当单片机刚开机的时候,电容C4会开始充电,由于下拉电阻R2的作用,电压会慢慢减小,使得RESET引脚会有一段时间的高电平输出,单片机就重头开始执行它的程序,如果不接电容C4,单片机刚刚开机的时候,不会去执行这个程序,什么状态都没有,当按下自锁开关时,单片机才会从头开始执行,常态时RESET引脚时低电平,只有复位时它才是高电平,下拉电阻R2就是为了保持RESET引脚常态是为低电平。通过复位按键实现了对电路随时随地复位的功能,可以将电路恢复到正常模式,加强了我们对电路的控制,方便我们对电路进行实验分析。虽然是手动复位,但是依然简便实用。图3-9复位电路第四章系统软件程序的设计4.1系统软件程序构成系统软件程序包括主程序、延时函数、显示函数、按键函数和中断服务函数。主程序通过对其他功能函数的调用,来实现整个系统化的功能。该系统采用嵌入式C语言编程,具有良好的可移植性和清晰的结构,能够完成极其复杂的工作。系统流程图如图所示:否否是开始进入主函数定时器初始化判断是否是紧急模式顺序按时执行红绿灯状态将所有路口置红灯禁止车辆通行数码管显示计时时间结束图4-1系统总的流程图4.2功能函数介绍4.2.1延时函数延时的原理是利用for循环嵌套,不断地执行空语句,耗费系统的时间,来达到延时的目的。常用的51单片机用11.0592MHz的话,执行一次需要1μs的时间,按键的去抖可以利用延时函数来实现,称作延时去抖。单片机自带的延时函数为_nop_,是一个空的语句,执行它一次,则延时1μs的时间。一个简单的延时函数:voidDelay(unsignedintit){while(--t);}延时函数,含有输入参数unsignedintit,无返回值,unsignedint是定义无符号整型变量,其值的范围是0~65536。本系统用到的延时函数(大约延时1ms,不精确):voiddelay(uintx) { uintp; ucharq; for(p=0;p<x;p++) for(q=0;q<121;q++);}4.2.2显示函数实现I/O口控制,想要某一个灯点亮,只需要对应的I/O口输出低电平,因为LED的正极接VCC了,默认无操作情况下,I/O口输出为高电平,所以LED灯不会亮,只有我们用程序给它把I/O口的电平输出为低了,这个灯才会亮。数码管动态显示,先进行位选,然后进行段选,计算数码管数字的段码,位选是为了确定这个数码管所处的具体位置,看它的状态,是否是连通的,数码管正常连通以后,才能根据计算出来的段码,显示相应的数字。只要单片机刷新速度够快,我们就可以看到连续的图像。4.2.3按键函数按键函数主要是利用延时函数delay,通过延长时间来对按键进行去抖,可以更加精准的对按键动作是否发生进行判断,消除了误差,使系统更加严谨有效。4.2.4中断服务函数CPU同时接到几个中断指令时,首先响应的是优先级最高的中断请求。正在进行的中断不能被新的同级或更低优先级的中断请求中断,正在进行的低优先级的终端服务,能被高优先级中断请求中断。中断函数的写法:void函数名()interrupt中断编号{ ;}interrupt必须要加,表示定义成中断服务函数。后面n是中断号,中断号是编译器识别不同中断的唯一编号。INT0东西通行INT0东西通行东西绿灯亮南北红灯亮保持中断中断返回INT1南北通行东西红灯亮南北绿灯亮保持中断中断返回图4-2中断子程序定时中断子程序中断程序的流程图如图所示:定时中断入口定时中断入口启动定时器中断初始化定时器0设置字型码和字位码,完成数码管倒计时显示关闭定时器0计数变量自加1定义1s 图4-3定时中断流程图4.3软件的应用4.3.1AltiumDesigner的应用AltiumDesigner是进行原理图设计的应用,本系统采用AltiumDesigner15版本,按照整体设计思路,以单片机为主,先将其他模块设计好,然后和单片机进行连接,完成电路图的设计。设计完成的原理图如附录A所示。4.3.2Keil的应用本文采用Keil实现软件的设计。KeilC51是所有8051兼容设备的工业标准工具链,它支持经典8051、Dallas390、NXPMX、扩展8051变种和C251设备。μVisionIDE/Debugger集成了完整的设备仿真、接口以及许多目标调试适配器,并提供各种监视器调试解决方案,而且它很容易学习和使用。编程运行完程序以后,不出错的情况下,生成HEX文件备用。程序设计代码如附录D所示。4.3.3ProteusISIS的应本文采用ProteusISIS进行仿真和测试,Proteus是英国labcenter电子公司开发的电路分析和模拟软体,是目前世界上最先进、最完整的单片机设计和仿真平台,仿真可以降低设计成本,提高电路的实用性。利用ProteusISIS按照原理图搭建好电路图,并进行一定程度的优化,设计一个仿真的十字路口,使得整个系统更加形象化。加载Keil软件运行生成的HEX文件,进行程序功能的仿真,仿真图见附录B。第五章系统的调试与测试测试样品采用万能板。根据示意图,基本的电气连接是手工完成的。在整个装配完成后,模块之间的电气连接由电缆完成。组装完成后,如附录C所示。具体运行情况如下:S0状态:东西人、车行道红灯亮,南北人、车行道绿灯亮S1状态:直行时间小于5时,南北黄灯亮,等待左转信号S2状态:左转绿灯亮,南北红灯亮、黄灯灭,人行道红灯S3状态:左转时间小于5时,南北黄灯亮,等待停止信号S4状态:东西人、车行道绿灯亮,南北人、车行道红灯亮S5状态:直行时间小于5时,东西黄灯亮,等待左转信号S6状态:左转绿灯亮,东西红灯亮、黄灯灭,人行道红灯S7状态:左转时间小于5时,东西黄灯亮,等待停止信号紧急模式可以看到,所有功能正常显示,运行完好,硬件设计、软件设计都成功实现。
结论本文采用深圳宏晶科技有限公司STC89C51单片机,先进行整体框架的构建,其次使用AltiumDesigner画出符合条件的原理图,紧接着就是利用Keil51编写能够实现系统功能的程序,在完全编译运行之后,无错误的情况下,生成HEX文件,再使用Proteus仿真平台加载上一个步骤生成的HEX文件进行仿真,仿真顺利实现以后,开始着手实物图的焊接,焊接完成以后,烧录程序,最后对整个设计进行系统的调试与测试,这些工作都完成之后,才算真正完成了我们本次的设计工作。值得注意的是,Proteus对电路进行仿真,必须加载Keil中生成的HEX文件开始运行,得到可以在单片机中运行的仿真电路。该系统具有性能优良、稳定性好、可靠性高、用户界面友好等特点。该方法设计简单、直观,能有效地修复电路和程序。系统配置简单,编程方便。仿真结果表明,该方法可以实现交通信号灯和数码管的交通指挥,具有较好的实用价值。与传统的实验方法相比,使用计算机模拟可以清楚地看到所有关键部件的参数,效率高,速度快,无需采购麻烦。
参考文献田添.基于AT89C51的十字路口交通灯设计[J].数字通信,2012,39(003):72-76.蒋辉平,周国雄.基于Proteus的单片机系统设计与仿真实例[M].机械工业出版社,2009.黄智伟.凌阳单片机课程设计指导[J].北京航空航天大学出版社,2007,(6)张毅坤.单片微型计算机原理及应用,[M]西安电子科技大学出版社1998余锡存曹国华.单片机原理及接口技术[M].陕西:西安电子科技大学出版社,2000.7雷丽文等.微机原理与接口技术[M].北京:电子工业出版社,1997.张萌·单片机应用系统开发综合实例·第二版·清华大学出版社·2005年何立民·单片机应用文集·第一版·北京航空航天大学出版社·2004年张一工·现代电力电子技术原理与应用第一版·科学出版社·2002年欧阳文·ATMEL89系列单片机的原理与开发实践·第一版·中国电力出版社·2007年侍金凤.基于51单片机的交通灯智能控制系统[J].科技信息,2010,000(035):53-53.孙宝法.单片机原理及应用。清华大学出版社,2014附录A图A1系统原理图附录B图B1仿真图
附录C图C1实物显示图
附录D程序代码如下:#define uchar unsignedchar#define uint unsignedint //宏定义#include <reg52.h> //包含库文件/*****定义控制位**********************/sbitTime_Show_LED2=P2^5;//Time_Show_LED2控制位sbitTime_Show_LED1=P2^4;//Time_Show_LED1控制位sbit EW_LED2=P2^3; //EW_LED2控制位sbit EW_LED1=P2^2; //EW_LED1控制位sbit SN_LED2=P2^1; //SN_LED2控制位sbit SN_LED1=P2^0; //SN_LED1控制位sbitSN_Yellow=P1^6;//SN黄灯sbitEW_Yellow=P1^2;//EW黄灯sbitEW_Red=P1^3;//EW人车红灯sbitSN_Red=P1^7;//SN人车红灯sbitEW_ManGreen=P3^0;//EW人行道绿灯sbitSN_ManGreen=P3^1;//SN人行道绿灯sbitSpecial_LED=P2^6;//交通正常指示灯sbitBusy_LED=P2^7;//交通繁忙指示灯sbitNomor_Button=P3^5;//交通正常按键sbitBusy_Btton=P3^6;//交通繁忙按键sbitSpecial_Btton=P3^7;//交通特殊按键sbitAdd_Button=P3^3;//时间加sbitReduces_Button=P3^4;//时间减bitFlag_SN_Yellow;//SN黄灯标志位bitFlag_EW_Yellow;//EW黄灯标志位bit flag_jinji;char Time_EW;//东西方向倒计时单元char Time_SN;//南北方向倒计时单元ucharEW=60,SN=40,EWL=19,SNL=19;//程序初始化赋值,正常模式ucharEW1=60,SN1=40,EWL1=19,SNL1=19;//用于存放修改值的变量ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段选码ucharcodeS[9]={0X28,0X48,0X98,0X48,0X82,0X84,0X89,0X84,0x88};//交通信号灯控制代码/*高电平1是亮南北红南北黄南北绿南北左绿东西红东西黄东西绿东西左绿0x2800101000 南北绿东西红0x4801001000 南北黄东西红0x9810011000 南北红南北左绿东西红0x4801001000 南北黄东西红0x8210000010 南北红东西绿0x8410000100 南北红东西黄0x8910001001 南北红东西红东西左绿0x8410000100 南北红东西黄0x8810001000 南北红东西红*//**********************延时子程序************************/voiddelay(uintx) //延时函数,大约延时1ms,不精确{ uintp; ucharq; for(p=0;p<x;p++) for(q=0;q<121;q++);}/*****************显示子函数**************************/void Display(void) { charh,l; //定义变量 h=Time_EW/10; //东西时间除以10得到十位数字赋值给h l=Time_EW%10; //东西时间除以10的余数得到个位赋值给l P0=table[l]; //l对应的字符码赋值给P0口 EW_LED2=1; //东西的数码管第二位(就是个位)点亮 delay(1); //短延时,让数码管显示一会 EW_LED2=0; //关闭数码管 P0=table[h]; //h对应的字符码赋值给P0口 EW_LED1=1; //东西的数码管第一位(就是十位)点亮 delay(1); //短延时,让数码管显示一会 EW_LED1=0; //关闭数码管 //下同 h=Time_SN/10; l=Time_SN%10; P0=table[l]; SN_LED2=1; delay(1); SN_LED2=0; P0=table[h]; SN_LED1=1; delay(1); SN_LED1=0; h=EW1/10; l=EW1%10; P0=table[l]; Time_Show_LED1=1; delay(1);Time_Show_LED1=0; P0=table[h]; Time_Show_LED2=1; delay(1); Time_Show_LED2=0;}voidKEY() //按键函数{ if(Add_Button==0)//时间加 { delay(20); //按键去抖 if(Add_Button==0) //再次判断按键状态 { EW1+=5; //东西加5 SN1+=5; //南北加5 SN1=EW1-20; //南北等于东西减20 EWL1=19; //东西左转时间赋值19 SNL1=19; //南北左转时间赋值19 if(EW1>=100) //时间加到大于100 { EW1=99; //等于99 SN1=79; //南北的比东西小20 } } while(Add_Button==0)Display(); //按键释放 } if(Reduces_Button==0)//时间减 { delay(20); //按键去抖 if(Reduces_Button==0) //下同 { EW1-=5; SN1-=5; SN1=EW1-20; EWL1=19; SNL1=19; if(EW1<=40) { EW1=40; SN1=20; } } while(Reduces_Button==0)Display(); } if(Nomor_Button==0)//测试按键是否按下,按下为正常状态 { delay(20); if(Nomor_Button==0) { EW1=60; //东西时间60 SN1=40; //南北时间40 EWL1=19; //东西左转时间19 SNL1=19; //南北左转时间19 Busy_LED=0;//关繁忙信号灯 Special_LED=0;//关特殊信号灯 } while(Nomor_Button==0)Display(); } if(Busy_Btton==0)//测试按键是否按下,按下为繁忙状态 { delay(20); if(Busy_Btton==0) { EW1=45; ////东西时间45 SN1=30; //南北时间30 EWL1=14; //东西左转时间14 SNL1=14; //南北左转时间14 Special_LED=0;//关特殊信号灯 Busy_LED=1;//开繁忙信号灯 } while(Busy_Btton==0)Display(); } if(Special_Btton==0) { delay(50); if(Special_Btton==0) flag_jinji=~flag_jinji; //紧急模式,全部红灯 while(Special_Btton==0)Display(); }}/**********************T0中断服务程序*******************/voidtimer0()interrupt1using1{ staticucharcount; TH0=(65536-50000)/256; TL0=(65536-50000)%256; //定时器初值大约50ms count++; //变量50ms加一 if(count==10) //加10次就是500ms { if(Flag_SN_Yellow==1)//测试南北黄灯标志位//是南北黄灯时间 {SN_Yellow=~SN_Yellow;} //控制南北黄灯闪烁 if(Flag_EW_Yellow==1)//测试东西黄灯标志位//是东西黄灯时间 {EW_Yellow=~EW_Yellow;} //控制东西黄灯闪烁 } if(count==20) //加20次就是1s(1000ms) { Time_EW--; //时间数据减一秒 Time_SN--; //时间数据减一秒 if(Flag_SN_Yellow==1)//测试南北黄灯标志位//是南北黄灯时间 {SN_Yellow=~SN_Yellow;} //控制南北黄灯闪烁 if(Flag_EW_Yellow==1)//测试东西黄灯标志位//是东西黄灯时间 {EW_Yellow=~EW_Yellow;} //控制东西黄灯闪烁 count=0; //变量清零 } }/*********************主程序开始**********************/void main(void){ Busy_LED=0; Special_LED=0; TMOD=0x01;//定时器工作于方式1 TH0=(65536-50000)/256;//定时器赋初值 TL0=(65536-50000)%256; EA=1;//CPU开中断总允许 ET0=1;//开定时中断TR0=1;//启动定时 while(1) //进入循环 { if(flag_jinji==0) //不是紧急模式 { /*******S0状态**********/ EW_ManGreen=0; //EW人行道禁止 SN_ManGreen=1;//SN人行道通行 Flag_EW_Yellow=0; //EW关黄灯显示信号 Time_EW=EW; //时间赋值 Time_SN=SN; while(Time_SN>=5&&flag_jinji==0)//时间大于5 {P1=S[0]; //SN通行,EW红灯 南北通行,东西红灯 Display(); //调用显示函数 KEY();} //按键函数 /*******S1状态**********/ P1=0x00; //P1口拉低 while(Time_SN>=0&&flag_jinji==0)//时间不大于0跳出循环 {Flag_SN_Yellow
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新疆喀什地区2025-2026学年九年级上学期期末考试物理试卷(含答案)
- 广东省揭阳市惠来县2025-2026学年八年级数学上学期期末考试(含答案)
- 甘肃省定西市临洮县2025-2026学年下学期九年级化学一模练习试卷(含答案)
- 物化考试题及答案
- 蚊虫危害题目及答案
- 网上答题题目及答案
- 办事处行政专员岗位职责
- 部编版一年级数学上册期末试卷及答案(真题)
- 山西省忻州市忻府区播明联合学校2022年高二语文测试题含解析
- 2026年培训师专业技能提升
- 艾梅乙反歧视培训课件
- 管理公司上墙管理制度
- DB64-266-2018 建筑工程资料管理规程
- 种禽场育种管理制度
- 艾梅乙质控管理制度
- 药店gsp考试试题及答案财务
- T∕CWEA 24-2024 小型水库大坝渗透处理技术导则
- 工程档案归档培训课件
- 消防工程施工资料管理与规范
- 《2025年CSCO非小细胞癌诊疗指南》解读
- 在线网课学习课堂《人工智能(北理 )》单元测试考核答案
评论
0/150
提交评论