标题:基于51单片机的交通控制系统设计
文档介绍:
第1章 绪论
1.1研究背景与意义
我国城市化进程持续加快,城市人口密度骤增,机动车保有量呈爆发式增长,统计显示,到2023年底,全国机动车保有量超4.3亿辆,汽车保有量达3.2亿辆。交通需求极速增长,道路资源却较为受限,二者之间的矛盾愈发凸显,城市交通拥堵状况成为约束城市发展,影响居民生活品质的关键因素,交通信号控制系统属于城市交通运作的重要手段,其智能化,可靠程度同道路通行效率及安全紧密相连。传统交通信号控制大多采取固定配时的定时控制法,不能遵照实际车流量实施动态调整,常常引发绿灯空放,红灯排队之类资源浪费情况,所以,研发一种可做到交通信号自动控制,具有倒计时显示和应急处理能力的智能交通控制系统,这对于改善城市交通压力,提升道路通行能力有着十分重要的现实意义。
单片机的交通控制系统有着诸多突出优点,比如成本低,可靠性强,开发历时较短而且比较容易扩充,非常合适中小型城市交叉口,学校附近,工业园区之类地方的交通经营需求,本设计以STC89C51单片机作为核心控制模块,并经由编程做到对四个方向红黄绿指示灯的自动化轮换控制,还装有LED数码显示器来显示剩余秒数,这样驾驶人员和行人才能清楚知晓信号灯亮剩多久,从而提升路口的通行安全指数,系统特意规划了单独的键盘输入接口,可以自由设定通过时限并手动操作应急模式,进而使得系统更具适应能力与应用价值。这项研究有益于加深认识单片机的原理及其应用,还会为日后开发更为复杂的智能交通控制系统形成基础。
1.2国内外研究现状
1.2.1数字钟的意义
1.2.2数字电子钟的应用
国外发达国家在交通信号控制方面展开研究比较早,其理论体系和技术标准比较完善,20世纪60年代,加拿大 Toronto 市创建了世界首套城市交通信号计算机控制系统,开创了交通信号集中控制之先。英国交通与道路研究所研发的 TRANSYT 系统把定时控制和改良算法融合,经由创建交通模型来改良信号配合方案,澳大利亚开发的 SCATS 系统做到了自适应控制,它会遵照即时检测到的交通流量自动调整信号时段和绿灯时限比。 美国的 RHODES 系统更多关注即时性和预测性,该系统用动态规划技术针对短期交通流实施预测,并改良控制策略,近年来,伴随物联网,大数据以及人工智能技术逐步发展起来,国外的研究重点渐渐转向车路协同环境中的信号控制,美国密西根大学研制出智能交叉路口系统,此系统可达成车辆与信号灯之间的即时通信,依靠车载终端给予驾驶员最佳通行速度建议,缩减停车等候时延。 德国,日本等国正在深入探究依靠深度学习的交通信号控制方法,经由加强学习算法,让控制系统不断试验错误来改善控制策略,取得了不错的仿真成果。
1.3 主要研究内容
本文以STC89C51单片机为核心控制器,设计并实现了一套功能完整的交通灯控制系统。主要研究内容包括以下几个方面:先要剖析典型十字路口的交通流运行规律,并确立信号灯状态转换的逻辑联系,从而规划出契合实际需求的控制方案,遵照技术文档里给出的状态转换图,系统设有4种主要状态以及2个过渡状态,东西向和南北向会轮流享有通行权,经由黄灯来提示执行状态转换,以此保障路口的安全通行。接着要开展系统硬件电路的设计工作,涵盖单片机最小系统,信号灯显示电路,数码管显示电路,键盘输入电路和驱动电路等各个模块,在元器件选型的时候,从性能,成本和可得性这些方面予以全面考量,选取STC89C51单片机当作主控芯片,运用74HC245驱动芯片加强负载能力,选择两体一体化共阴极数码管用于倒计时显示。 系统软件程序设计环节需采用模块化编程理念,把程序分解成主程序模块,定时中断模块,按键处理模块和显示驱动模块,经由定时器中断达成精确计时,用动态扫描技术来带动数码管显示,并用状态机思维做到交通状态的平滑转换,完成系统硬件调试,软件调试以及联调试验之后,要核查各功能是否达成,剖析其中的问题并给出改进方向。
第2章 系统总体设计
2.1 需求分析
交通灯控制系统是路口交通运作的关键设施,需达成安全性,可靠性和实用性这三大基本要求,从功能需求看,该系统要可自动操控东西和南北方向红,黄,绿三色信号灯的亮与灭,并依照预先设定好的时间规律依次循环切换,遵照技术文档里所列的状态转换图,系统必要做到诸多状态的循环控制,其中涵盖主状态和过渡状态,这样的控制形式顺应国内大半路口的通行惯例,东西向与南北向的通行时延可以按实际交通量来安排。 系统需具备倒计时显示功能,分别在四个路口设置 LED 数码管,用来即时显示当前状态所剩时间,这样就能让驾驶员和行人提前判断信号灯的变化情况。系统还要有参数设置功能,经由按键就能调节各状态的持续时限,从而顺应不同时段以及不同路口的交通状况,从性能需求来讲,系统计时要精准,信号灯的切换过程应当流畅且没有颤动现象,数码管显示也要清晰稳定而且不能闪烁,就可靠性而言,系统要有抗干扰能力,在恶劣环境下仍可正常运行,而且复位电路能够促使系统在上电或者出现异常时自动回归正常操作状态,至于经济性方面,则要采用成本比较低的元件,把整体造价控制在恰当的范围之内,如此一来才方便推广并投入使用。
从扩展性需求来看,本系统需保留紧急控制功能,一旦救护车,消防车等特种车辆经过时,可由人工或者自动转入紧急模式,两边均亮红灯,以保障特种车辆得以优先通行。等到特种车辆离开之后,系统会自动回到原先的工作状态,而且,系统还要设有违规检测接口,日后可以扩充连接车辆检测传感器,检测到违规变道情况时发出声光警报或者拍照记录,关于人机交互部分,除了最基本的按键设定之外,可以考虑增设 LCD 显示屏即时显示当前工作模式及其设置参数,从而提升操作的直观程度。 电源这一方面来说,系统得要符合市电供电环境的要求,并且也要有备用电源接口,以防停电造成交通陷入混乱。针对前面提到的各种需求加以深入剖析之后,就可以给后面硬件选型以及软件设计给予清晰的指引方向,从而保证最终所设计出来的系统能够达到实际应用的目的。
2.2 交通状态转换方案
根据技术文档中提供的交通状态图和交通状态及红绿灯状态表,本系统采用多状态循环控制方案。具体状态转换逻辑如下:初始时,东西方向信号灯显示红色,南北方向则显示绿色,此情形表明东西方向禁止通行,南北方向可以通行,而且其历时长短能够预先设定。这一时限能依照路口的实际车流量来调节,在早晚高峰时段可适当地延长其时间,过渡阶段表现为东西方向信号灯仍旧显示红色,南北方向的绿色信号灯熄灭,黄色信号灯开始亮起,这个阶段起到警示南北方向的通行权限将要终止,提醒驾驶员做好停车准备的作用,经过了状态转变之后所处的主要状态就是东西方向信号灯显示绿色,南北方向信号灯显示红色,此状况显示东西方向准许通行,南北方向禁止通行,它的历时长短同样可以事先设定,而且还可以按照主次道路之间的交通需求差别予以调整,还存在一种过渡情况,即东西方向出现黄色信号灯,而南北方向的红色信号灯依旧处于点亮状态,此情形用来告知东西方向的通行权限即将耗尽。 前面所述各种状态全部完成后便会回到最初状态,从而创建起循环控制体系。
这种状态转换方案针对路口通行的安全性和高效性展开设计,在主状态下,仅有一个方向享有通行权,如此便规避交叉冲突。处于过渡状态时,黄灯的亮起告知驾驶员状态即将改变,黄灯时段内已跨越停止线的车辆仍可前行,未跨过停止线的车辆则需准备好停车,如此既能保障通行效率,又能保证安全,而状态持续时间的设定依照实际交通需求的差别来执行,大致合乎多数路口主干道和次干道的实际交通需求差距状况,要是东西向与南北向的车流量差不多,那么其持续时间亦可被安排成一致,技术文件里显示能够经由按键设置定时器,所以实际操作起来,按照现场调研得出的交通流量信息,可以灵活地调节各状态下所停留的时延,从而做到某种程度上的自适应调节。 本方案具备紧急模式,按下紧急按键以后,系统就会立刻把两个方向都转为红灯,以清空路口,给特种车辆让路,再按一次紧急按键或者经过一定时限之后,系统才会回到中断之前的状态并重新开始运行,这样的设计提升了系统处理突发事件的能力。
2.3 总体架构设计
本系统采取模块化设计思维,其整体架构包含硬件层,引导层及应用层这三个层级,硬件层牵涉单片机最小系统,信号灯显示电路,数码管显示电路,键盘输入电路以及驱动电路等实际组件;引导层则包含了各个硬件模块的引导程序,比如 I/O 口初始化程序,定时器初始化程序,数码管动态扫描程序等等;应用层要达成交通状态控制逻辑,按键处理逻辑以及紧急模式处理逻辑这些关键功能,该系统把 STC89C51 单片机当作核心控制器,经由 I/O 口来控制信号灯的开关,凭借独立式按键来获取用户输入,并利用数码管来显示倒计时信息,系统总的框图清楚地表现出各个模块之间的关联及其数据流动方向。
在具体硬件结合上,单片机最小系统包含STC89C51芯片,晶振与电容形成起来的时钟电路,还有由电容和电阻合成的按键复位电路。信号灯显示电路用发光二极管来模仿四个路口的红黄绿三种颜色的灯,并利用驱动芯片提升其推动能力,从而保证LED亮度充足,数码管显示电路则选用的是四位一体共阴极数码管,用以显示东西南北这四个方向的倒计时数字,经由动态扫描技术做到显示效果,凭借人眼视觉暂留的原理,只要扫描频率足够高,就会给人一种四个数码管一起平稳显示的感觉,键盘输入电路采取独立按键设计,各个按键占据一个 I/O 口,用于设定时间,开启紧急模式等事项。 软件架构上,主程序采用前后台系统设计,其中,无限循环充当后台任务来处理按键扫描及状态更新事务,定时器中断当作前台任务去承担精确计时和数码管刷新的任务,此架构既能保障计时准确无误,又能简化程序设计,符合该系统功能需求。
第3章 系统硬件电路设计
3.1 系统硬件总体构成
本系统的硬件电路包含五个主要部分,它们分别是单片机最小系统,信号灯显示电路,数码管显示电路,键盘输入电路以及驱动电路,这些部分相互配合以达成交通灯自动控制的目的,其中单片机最小系统起到控制的核心作用,其内部含有STC89C51单片机,时钟电路以及复位电路,该系统需运行控制程序,对输入信号执行处理,并发出相应的控制指令,信号灯显示电路由高亮度发光二极管形成,被分为四组来模仿东西南北四个方向的红,黄,绿三种颜色的信号灯,每组中的三个LED对应红灯,黄灯和绿灯。 数码管显示电路采用四位一体且为共阴极数码管,分别设置于四个路口方向,随时显示当下信号状态的倒计时秒数,从而让驾驶员与行人清楚认识到余下时间,键盘输入电路有独立式按键,这个按键可增添时间,削减时间,确定设置以及开启紧急模式,利于现场调整并且适合应对特殊情况,驱动电路用的是总线驱动器,这样就能提升单片机 I/O 口的推动能力,保证信号灯和数码管得到足量的工作电流,使得显示既清楚又稳定。
硬件电路设计依照可靠性,经济性与可扩展性的原则来执行,在可靠性层面,所有的元器件均采用工业级产品,其工作温度范围符合户外使用的条件,电路板设计时充分考量到抗干扰措施,电源线被加粗,关键信号线实施屏蔽处理,并把晶振尽量放置在靠近单片机引脚之处以减小寄生电容。从经济性角度看,只要符合功能需求就在众多元器件当中挑选性价比较高的来进行选用,从而有效地掌握成本,至于可扩展性,电路板事先就保留了一些I/O口以及扩展接口,这样就能为日后添加诸如车辆检测传感器,无线通讯模块之类的外部设备带来便利。 硬件总体形成较为明晰,各模块环绕单片机呈星形相连,此种结构便于调试及维修,电源部分经由稳压器把市电整流并降压成稳定电压来向整个系统供电,而且留有备用电池接口,在断电时可使时钟芯片持续计时,从而保障时间参数不会遗失。
3.2 单片机最小系统设计
3.2.1 STC89C51单片机简介
STC89C51为低功耗,高性能的CMOS 8位微控制器,它具有Flash程序存储器,RAM数据存储器,双向I/O端口,定时器 / 计数器,中断源与中断系统以及全双工串行通信接口,此芯片采用经典的MCS - 51内核,其指令系统与Intel 8051完全适配,开发较为便捷,资源也比较丰富,它的工作电压范围符合常规供电需求,工作频率也能满足当前设计的需求。STC89C51具备ISP在线编程功能,不用专用编程器,经由串口就可以下载程序,极大地便于开发调试和现场更新,该芯片有两种低功耗工作模式即空闲模式和掉电模式,在空闲模式里CPU停止工作但外设仍照常运行;而在掉电模式下振荡器停止工作,功耗降到最小,这很适合由电池供电的地方。 在本设计当中,STC89C51所具有的资源及其性能完全能够符合交通灯控制系统的相关需求,其上众多的I/O口可直接关联LED及数码管,而且定时器能够精准执行计时任务,其中断系统可以针对按键操作或者紧急情况作出反应,所以选取该芯片当作主控制器属于一种比较恰当的做法。
3.2.2 时钟电路设计
时钟电路对于单片机而言非常关键,它可以给单片机赋予精准的时序信号,从而影响到指令执行的速度,本设计采取了内部时钟的方式,在 STC89C51 的 XTAL1 和 XTAL2 引脚之间接入石英晶体振荡器以及两个电容,以此形成自激振荡电路。晶振频率应选取可产生标准机器周期频率的数值,如此一来才能方便定时器实施精确计时,并且也能产出标准波特率以供串行通信之用,两个电容可起到稳定振荡频率及利于快速起振的作用,本设计采用了恰当容值的瓷片电容,电路设计的时候,晶振与电容应当紧挨着单片机引脚来布置,以此来缩减寄生电容并规避电磁干扰,而且连线最好是又短又粗。 在 PCB 布局时,晶振下方不宜设置其他信号线,防止发生相互干扰,时钟电路所产生的振荡信号经由单片机内部电路加工之后,就可得到机器周期信号,这种精度足以符合交通灯控制对于计时准确性方面的需求。
3.2.3 复位电路设计
复位电路用来把单片机内部各个寄存器重新设置成已知状态,程序从起始地址执行起来,这样就能保证系统正常启动,STC89C51这个型号的芯片,它的RST引脚属于复位输入端,只有出现高电平时才有效,要是这个引脚一直维持高电平达到预定的时间长度,那么单片机就会做一次复位动作。在本设计当中用到了复合型复位电路,这种电路把按键手动复位和上电自动复位融合起来,上电自动复位依靠电容慢慢充上电来达成目的,刚打开电源的时候,电容两侧的电压不可能立刻发生改变,所以RST引脚显示的是高电平,不过随着时间推移,电容持续充着电,RST引脚上的电压也就慢慢往下掉,只要电压跌到某个临界值之下,便标志着复位过程已经完毕。 复位时间取决于RC时间常数,从而保证复位得以完成,按下复位键即为手动复位,通常用于调试或者系统卡顿时手动重新启动。按下复位键时,电能经由按键传递给RST引脚,促使单片机执行复位操作,松开按键以后,由于电容的放电现象,RST引脚会回到低电平,之后单片机能恢复正常运行,设计复位电路时,还要着重考虑抗干扰手段,可以在RST引脚和地之间并联一个小电容,以此来过滤高频干扰,规避因干扰而产生的意外复位情况,复位电路对于系统的稳定运行十分关键,设计优良的复位电路可以有效地免除由于上电不稳以及电源波动造成的系统死机故障。
3.3 信号灯显示电路设计
信号灯显示电路是本系统的执行部件,直接面向路口交通参与者,其可靠性至关重要。本设计采用高亮度发光二极管模拟四个方向的红、黄、绿信号灯,每个方向三个LED分别对应红灯、黄灯和绿灯。LED的发光颜色与功能对应:红色表示禁止通行,黄色意味着警戒并即将转换,绿色则表示准许通行,这符合国家标准的要求,LED的电气特性存在特定的正向导通电压及工作电流范围。单片机I/O口的输出推动能力比较低,无法直接推动LED,所以要增设推动电路,此设计采用总线推动器作为LED推动芯片,该芯片具备较高的推动能力,每路均可输出足够的电流,完全可以满足LED推动的需求。 驱动芯片的引脚连接方式需合理设置,这样才能让数据从单片机传递给LED,并经由限流电阻连接到LED的阳极,而LED的阴极则接地。限流电阻的取值按照LED的工作电流来计算,应该选取合适的阻值电阻。
设计电路的时候,LED的布局和标识也是需要考量的方面,把同方向的三个LED聚集在一起安装,红色灯光位于上方或者左侧,黄色灯光处于中间位置,绿色灯光位于下方或者右侧,这样做方便驾驶员加以辨别,想要模仿真实路口信号灯的排列情况,这个设计就把东西方向的信号灯装在电路板的上下两侧,南北方向的信号灯则安装在左右两侧,与实际路口的方向相符合。要想提升LED亮度的均匀程度,即便不同颜色的LED施加的工作电流一样,但它们的亮度也许还是存在差别,可以经由调节限制流电阻的阻值来让各种颜色LED的亮度更为相近一些,要知道,LED是一种电流控制型元件,所以其供电电路应当供应固定的电流而不是仅仅只是电压,被选用的驱动芯片其输出特性能够很好地适应LED的驱动需求。 为了方便调试及观测,可在LED旁边标明其所对应的方向与颜色,亦或是采用不同颜色的LED直接予以区分。设计信号灯电路时应考虑冗余设计,若某个LED出现故障,其他LED仍可正常运行,不至于完全丧失指示功能。
3.4 数码管显示电路设计
数码管显示电路用来即时显示各方向信号灯剩余的时间,这对于优化系统的人性化程度十分关键,本设计选用四位一体的共阴极数码管,它们分别负责显示东西方向和南北方向的倒计时数字。一体数码管内部包含两个八段数码管,它们共享一组段选线,而且靠两个独立的位选端来分别操控两个数码管的亮灭情况,所以,一个一体数码管只需少量引脚,比两个独立的数码管能节省I/O口资源,这个系统一共要用到很多数码管,总共就得许多的段选信号和位选信号,I/O口数量或许不够用,所以必须用动态扫描显示技术才行。 动态扫描依靠人眼的视觉暂留特性,分时轮流点亮各数码管,只要刷新频率足够高,便好似所有数码管均处于稳定显示状态,实际操作过程中,把多块数码管的同名段选引脚串联起来,由 I/O 口经由推动电路给予段码信号;多块数码管的位选引脚则分别由其他 I/O 口经推动电路加以控制,显示程序逐个选取各个位,每个位的点亮历时合适,其完成一轮扫描的刷新频率符合无闪烁感的需求。
数码管的驱动同样需要增强I/O口驱动能力,因为一个数码管点亮时电流较大。本设计采用驱动芯片分别驱动段选和位选信号,一片用于驱动段选线,另一片用于驱动位选线。段选信号经驱动后通过限流电阻连接到数码管的各段引脚,限流电阻阻值根据数码管工作电流计算选用。位选信号直接连接到数码管的公共阴极,由于单片机输出高电平时电流能力有限,而位选端需要灌入较大电流,因此实际接线时采用低电平点亮方式:当位选信号处于低电平状态时,相应的数码管公共阴极会被接地,而那些其段选信号为高电平的段就会被点亮。用此种方法,驱动芯片向低电平实施灌电流的能力较强,所以比较适宜用于推动数码管的公共端,在设计电路的时候,还要留意段码与数码管引脚之间的对应联系,按照数码管的型号来确定各个段应接在哪个引脚上,书写段码表的时候一定要细心校对,要不然显示出来的数字就会出现乱序的情况,如果想要方便设备的安装及其连线工作,可以将数码管加工成单独的显示模块,经由排线与主控制板相接,如此一来既能方便执行调试操作,又利于之后的检修及替换零件事宜。
3.5 键盘输入电路设计
键盘输入电路属于人机交互界面,用以获取操作者发出的控制指令,调整通行时段,切换紧急模式等事务皆由其承担,本设计采取独立式键盘架构,各按键对应专属I/O口,彼此隔离无碍,利于编程且稳定性佳。尽管独立式键盘所占I/O口量大,但此系统对按键数目需求有限,几个基本按键便已足够应对主要操作任务,所以选择独立式键盘较为恰当,按键一端连向单片机引脚,另一端接至地线,处于正常运行状态时,经由软件设定相关I/O口为输入模式,并启动内部上拉功能,从而令该引脚维持高电位,一旦按键被按下,则引脚直接接地,引发电位降至低位,程序监测到这种电位变动就能识别到按键已被按动。 这种接线方法借助了单片机内部的上拉电阻,不需要外加上拉电阻,使得电路设计更为简便,按键的功能可以按照实际需求来定义,比如提升时间,缩减时间,进入设置模式以及启动紧急模式等。
图3-1 键盘输入电路原理图
在键盘电路设计当中,关键之处在于考量按键抖动现象,机械式按键在按下或者松开的时刻,会出现短暂的抖动情况,抖动之时,电平会发生多次翻转。如果未予处理,那么单片机大概率会被误判为多次按键按压,解决抖动问题存在两种办法,一是依靠硬件来达到目的,比如利用触发器或者滤波电路,这必然会加大成本并且让电路变得更复杂一些;另一种则是软件去抖,这种方法既简便又实用,就是在检测到按键按下以后,稍微延迟一段时间之后再去重新检测一次,倘若此时还是处于低电平状态的话,便可以认定这就是一个有效的按键信号,本项目就采用了软件去抖这样的方案,于是在有关于按键处理的那一部分程序代码里插入了专门用于产生延时效应的函数指令,从而绕过了那段时间内存在的不稳定因素,然后再去获取按键的真实工作状况。 要想加强按键操作的可靠性,可以添加按键释放检测,即只有检测到按键被松开之后才会执行相应功能,防止长时间按压时出现连续触发的情况。在设计按键电路的时候,还要注意防范静电放电,可以在按键引脚和地之间并联一个小电容来吸收静电,以此来保护单片机I/O口免受损害,对于那些需要频繁操作的按键,应该选择具有较长使用寿命和较好手感的按键开关,这样才能保证其在长时间使用过程中维持可靠的工作性能。
3.6 驱动电路设计
驱动电路在单片机系统中起着承上启下的重要作用,它将单片机的弱信号放大为能够驱动外部负载的强信号。本系统中需要驱动的负载包括多个LED信号灯和多位数码管段,总电流需求较大,而单片机I/O口的驱动能力有限,因此必须增加驱动电路。本设计选用总线驱动器作为主要驱动芯片,该芯片是常用的总线驱动器,具有双向传输功能,输出驱动能力强,每路可输出足够的拉电流或灌电流。所选驱动芯片的主要特性包括:其工作电压范围较广,能与TTL电平相适配,具备三态输出功能,可轻松做到总线隔离。其传送延误时间处于合理区间,利于实际应用,而且功耗较低,在此套系统当中,采用了多片驱动芯片,其中一片专门用来激发信号灯LED,另有两片用以激发数码管。
驱动电路设计的具体实现如下:对于信号灯驱动电路来说,把单片机有关的引脚同第一片驱动芯片的输入端相接,该驱动芯片的输出端借助限流电阻连接到各个 LED 的阳极,LED 的阴极则接地。驱动芯片的控制引脚要么接到高电平,要么接到低电平,这样才能保证数据传送的方向正确,而且芯片一直维持在使能状态,就数码管段选驱动而言,把单片机 I/O 口与第二片驱动芯片的输入端相连,此驱动芯片的输出端经过限流电阻之后再连接到数码管的段选引脚;至于数码管位选驱动,则是将单片机别的 I/O 口同第三片驱动芯片的输入端相接,该驱动芯片的输出端直接同数码管的公共阴极相连。 采用低电平点亮数码管的时候,位选驱动芯片输出低电平时会流入电流,所以要选用灌电流能力强的芯片,设计驱动电路的时候还要考虑电源滤波,在每个驱动芯片的电源引脚旁边并联一个小电容来滤除高频噪声,在总的电源输入端并联一个大容量的电解电容以稳定电源电压。驱动芯片应该尽可能贴近被驱动器件来布置,从而减小由于长线传递而产生的干扰和压降。
第4章 软件程序设计
4.1 主程序流程
软件程序设计对于交通灯控制系统来说非常重要,其决定了系统功能如何达成以及运行效率高低,本系统软件运用模块化设计思路,把整个程序拆解成主程序模块,定时中断模块,按键处理模块以及显示激发模块这四个大致独立的部分。这些模块之间依靠全局变量和函数调用来传达信息,结构较为明晰,方便执行调试与后续保障工作,主程序堪称整个软件的支撑框架,承担系统启动,持续性循环任务安排以及异常情况应对等工作职责,当系统上电或者被复位时,主程序会先执行一些初始化步骤,比如关闭看门狗,设定堆栈指针,初始化 I/O 口的状态,调整定时器的工作模式及初始值,启动定时器中断并初始化全局变量之类的事情。 初始之后,主程序就踏入无休止循环当中,在此期间持续检测按键状态,更新交通状况并操控信号灯亮灭,还要静候定时器中断的到来,主程序流程图清楚地显示出程序运行的全部过程。
主程序的核心是有限状态机,它可做到交通状态的循环转换,定义状态变量来显示当前主状态,过渡状态及其余时间。在主循环里,程序持续查看余下时间是不是为零,一旦某个状态的余下时间被减到零就依当前状态转到下一个状态,还要设置新状态的持续时间并给出信号灯输出,比如开始时计数结束,程序就会把状态改成过渡状态,设定好过渡状态的持续时间,然后调用信号灯控制函数去关闭对应方向的绿灯并打开黄灯,依靠状态机来做到这种方式,逻辑很明晰,便于领会和改动,若要调整状态的持续时间或者增添新的状态,只须要改相关的代码就行。主程序中有对按键处理函数的调用,定时扫描按键状态,发现有效按键便执行相应功能,要保障系统具备随时响应的能力,所以主循环的执行时间应当越短越好,防止出现长时间的等待或者繁杂的运算,那些耗时的任务可以放到中断服务程序当中去处理,亦或是拆分成很多小步来逐步完成。
4.2 定时中断程序
定时中断程序对于本系统做到精准计时十分关键,其职责在于生成标准的秒信号,而且推动数码管执行动态显示,该设计运用定时器处于16位定时器模式,经由设置恰当的定时时延,定时器初值的计算需依照晶振频率以及机器周期来完成,借助相关计算即可得出应被载入定时器的初值大小。当定时器执行初始化时,须要设定工作模式,加载初值,开启中断功能并开启定时器本身,之后定时器便开始运行,每次经过所定的时间间隔就会引发一次中断事件,而中断服务程序会把中断发生的次数加以累加统计,等到这一累计数值达到预定目标之后,就把秒标志位置于“1”状态,然后刷新各方向剩余时限相关的变量内容。
定时中断程序还负责数码管的动态扫描显示。由于数码管需要持续刷新才能稳定显示,如果在主程序中用延时循环扫描,会占用大量CPU时间,影响其他任务的执行。因此将数码管扫描放在定时中断中是最佳选择,每进入一次中断服务程序,就切换一个数码管位,送出对应的段码。中断频率经过合理设置,扫描完所有数码管位所需时间合适,刷新频率满足无闪烁感的要求。中断服务程序的流程是:首先重新设置定时器的初始值,确保下一次定时精准无误,其次统计中断次数,判定是否已到达秒信号。再次执行数码管扫描步骤,依照当下的扫描位索引,从显示缓冲区获取相应数字的段码,并经由 I/O 口予以输出,还要把先前被点亮的位给关闭,把当前的位选中,最后清除中断标志,回到主程序当中,显示缓冲区属于一个数组,该数组用来存储各个数码管想要显示的数字,主程序会在状态转换或者时间被更新的时候去改变这个缓冲区的内容,而中断程序则承担着把缓冲区中的内容表现出来的任务,这样一种生产者 - 消费者模型很好地化解了主程序和中断程序之间存在的数据同步难题。
4.3 按键处理程序
按键处理程序负责识别用户按键输入并执行相应功能,是人机交互的核心。由于机械按键存在抖动问题,程序必须采取去抖措施。本设计的按键处理流程如下:在主循环里要定期调用按键扫描函数,此函数会读取按键端口的状态,然后拿这个状态和上次读取到的值做对比,一旦察觉到按键状态发生了改变,就开启去抖动延迟,去抖动延迟采取软件延迟的办法,调用完延时函数之后还要重新读取按键状态,要是还是跟前面检查到的那个状态相符合,就可以判定这是一个有效的按键操作,针对按键被按下这种情形,按照对应的按键编号来执行相关功能;至于按键放开的情况,大多数时候不需要做些什么,不过对于一些得一直按住才生效的功能来说,可以凭借检测到按键放开当作结束的标志。 按键的功能如下定义,加键处于设置模式时可提升当前状态持续时间,每次按下增加固定时间段。减键用来缩减持续时间,但不得低于最低预设值,设置键用以进出设置模式,在设置模式里,数码管会闪烁显示出可调节的参数,按下加键或者减键实施调整,再按下设置键予以确认并返回。紧急键负责开启或者关闭紧急模式,按下之后两个方向都会亮起红灯,全部计时停止运行,按下此键或者经过一定时限以后才会复原原先状况。
按键处理程序会针对长按和组合键这两种情况加以考量,其长按功能的达成原理在于,一旦监测到按键被按下并且得到确认之后,并不会马上执行一次操作,而是开动一个长按定时器,假定按键保持按住的状态达到了预定的时间以后,便会进入到连加或者连减的模式当中,也就是每隔一段固定的时间就自动地执行一次加法或者减法的操作,直至按键被松开为止。而所谓的组合键则是用以完成一些特别的功能,譬如说当加键和减键一同被按下时,就可以做到复位回出厂设置的目的,也就是把所有的相关状态历时重新设回到默认的初始设定上去,想要做到这一点就得让程序去记住各个按键各自按下之时的时刻以及是否已经被处理过之类的信息,此外,按键处理程序还要具有一定的抗干扰能力,对于那些持续时间非常短暂的脉冲信号就应该当作干扰来不予理会,在处于紧急状况的时候,除了紧急键以外的所有其他按键都要被关闭掉,以免因误按而影响到紧急通行的流程顺畅。 按键处理程序的设计需兼顾用户操作的便捷性和系统运行的安全性,使得系统既灵活又可靠。
4.4 显示驱动程序
显示驱动程序要把时间信息以数字形式清晰地表现到数码管上,这是改善系统用户体验的关键部分,本系统用的是四位一体的共阴极数码管,用来显示东西方向和南北方向的倒计时秒数,显示驱动程序的重点在于动态扫描技术和段码转换技术。动态扫描的原理之前已经讲过,依靠人眼的视觉暂留特点来分时点亮各个数码管,所谓段码转换就是把数字变成数码管各个段的亮与灭的合成,共阴极数码管的段码表得按照硬件的拼接方式去决定。 比方说显示数字的时候就得点亮对应的段,所以其对应的二进制以及十六进制的表现形式就要设准确,鉴于采用的是低电平来点亮,那么实际上输出的段码便是取反之后的值,所以在真正的编程过程当中,一定要按照硬件的拼接方式来确定合适的段码表才行。
显示驱动程序的工作流程如下:定时中断服务程序当中,定时切换扫描位,从显示缓冲区获取当前位对应的数字,经由查表得到段码,并借助I / O口予以输出;而且还要关闭之前点亮的位,选择当前位。显示缓冲区属于多维数组,用以表现各路口方向的十位与个位,主程序每隔一秒更新的时候,把各个方向剩余的时间转化为十位和个位数字,存入显示缓冲区,如果处于设置模式,为达成数码管闪烁的效果,程序增添了一个闪烁标志,当进入设置模式之后,定时把当下正在设置的位置显示成全灭,而其余位置则照常显示,从而产生闪烁的视觉效果,告知用户哪些参数能够被调节。 显示驱动程序具备亮度调节功能,经由调整每个位点亮的时间比例,可以改变数码管的整体亮度,进而符合不同环境光线的要求。比如白天时可加大点亮时间来提升亮度,夜晚则减小点亮时间以减小亮度并缩减功耗。
第5章 系统调试
5.1 硬件调试
硬件调试对于系统的正常运行至关重要,它包含电路检查,电源检测,各模块功能验证这些环节,首先要做的就是电路检查,参照原理图和PCB图,利用万用表逐一检测线路的连通情况,特别留意电源线和地线是否存在短路现象,也要看看单片机各引脚的焊接是否稳固,还有晶振,电容,电阻等元件是否安装得当且极性没有错误,针对集成电路芯片,还要检查其安装方向是否正确,有没有出现引脚弯曲或者虚焊的情况,只有确定硬件连接没有问题之后,才可以执行电源检测,在不接上单片机的状况下向电路板供电,测量稳压器的输出电压是否稳定正常,还要用示波器查看电源纹波是否处于允许的范围之内,要是电源正常,那么就可以接入单片机展开空载检测,测量单片机各个电源引脚的电压是否正常,晶振是否已经启动振荡。 接下来要做各模块的功能检测,先从信号灯电路开始,编写简单检测程序,依次点亮各LED,看亮度是否均匀,颜色是否准确,若某个LED不亮或者亮度异常,则需检查限流电阻和连接线。接着检测数码管显示电路,编写检测程序,让所有数码管全部点亮,并显示出指定数字,查看是否存在缺段或者亮度不均的情形,调整限流电阻使得各部分亮度相同,最后检测按键电路,编写按键检测程序,按下各个按键时,观察对应 I/O 口电平的变化是否正确,检查是否存在按键粘连或者接触不良的问题。硬件调试是个不断重复的过程,只要发现错误就及时修正,直到所有的硬件功能都能正常使用为止。
5.2 软件调试
软件调试是在硬件平台正常的前提下,验证程序逻辑正确性和功能完整性的过程。本系统软件调试采用集成开发环境,通过编程软件将编译生成的程序文件下载到单片机中进行在线调试。调试步骤分为模块调试和集成调试两个阶段。模块调试阶段,分别测试各个功能模块:首先对定时中断模块展开检测,设定断点以查看中断是否依照预定时段切入,还要核查中断次数统计是否准确,利用示波器测量相关引脚波形来验证定时是否精准。之后检测按键处理模块,并编写按键响应函数,当按下各个按键时,留意数码管显示或者LED状态是否有改变,以此确认按键识别,去抖处理,长按累加等功能是否被正确达成,再检测数码管显示模块,编写检测程序让数码管轮流显示数字,看是否存在闪烁,缺段或者显示错误等情况,进而调整扫描时序以确保显示稳定。 测试状态切换模块的时候,模拟时间推移,要看信号灯状态是不是按照预设的顺序发生变化,持续时间是否准确,各个模块如果都通过了测试,就要开展合成调试,把所有的模块放在一起运行完整的程序,检查系统的整体运作是否协调,有没有资源冲突或者逻辑矛盾。比如要看看定时中断里改动过的变量,在主程序里面被访问的时候,是否需要关闭中断保护,按键处理会不会影响定时的准确性等,软件调试过程中可能出现的问题包含逻辑错误,时序冲突,变量越界等,得要仔细剖析现象,经由设置断点,一步一步执行,观察变量的方法找到问题并且改正。
5.3 功能测试
功能测试是对系统整体性能的全面检验,验证是否满足设计要求。测试内容包括基本功能测试、计时准确性测试、按键功能测试和紧急模式测试。基本功能测试:系统上电之后会自动进入到起始状态,数码管显示出倒计时情况,等待观察到倒计时结束的时候看是否会自动转到下一个状态,这样一步步做完所有状态之后再回到起始状态重新来一遍,多次重复这个过程以检查状态之间的转换是否稳固,有没有突然改变或者迟缓的现象发生。对于计时精准度的考量可以拿秒表去测量各个状态下所持续的时间长短,留意误差是否落在可接受范围当中,长时间持续运行之后累积起来的误差是不是达到了预期标准,至于按键功能的考察,按住设置键以后数码管就会闪动并转入设置模式,按加键时时间增多,按减键时时间缩减,留意时间数值的变化是否和对应的按键指令相符,当完成设置之后再按下设置键来予以确认并退出设置模式,设定好的新时间会在接下来的一段时间内开始生效。 紧急模式考查时,系统处于正常运行状态,按下紧急键以后,两个方向指示灯均亮起红灯,数码管停止倒计时或者显示特定符号,再次按下紧急键,系统会回到之前中断时的状态并继续执行任务,而且还要考查长按加键或者减键是否能开启连续叠加或者减小的功能,按住加键和减键是否能够将其复位到初始状态,在考查的过程中,把各项功能的表现记录下来,如果出现异常就要找出原因并加以改善,不断做考查和调节,使得系统不论是在哪种操作环境下都能够稳定而可靠地运行,从而达到实际应用的需求。
第6章 总结与展望
6.1 工作总结
本文以STC89C51单片机为核心,设计并制作了一套功能完备的交通灯控制系统,该系统可自动控制十字路口四个方向红,黄,绿信号灯的轮流转换,做到东西向与南北向的交替通行,而且经由LED数码管即时显示倒计时时间,从而优化了路口通行的安全性与效率,在硬件设计上,完成了单片机最小系统,信号灯显示电路,数码管显示电路,键盘输入电路以及驱动电路的原理图设计和PCB布局,采用驱动芯片化解了单片机I/O口驱动能力欠缺的情况。 在软件设计方面,运用模块化编程理念,把程序分解成主程序模块,定时中断模块,按键处理模块以及显示驱动模块,凭借定时器中断达成精准计时,用动态扫描技术来激发数码管显示,靠有限状态机做到交通状态的顺畅切换。系统专门设计了独立式键盘,以此来设定时间参数,操控紧急模式,使得系统更具灵活性,实用性更强,经过硬件调试,软件调试和功能检测,证实该系统各个功能都符合设计要求,计时精准,显示稳固,按键反应快捷,紧急模式运行可靠,此设计另外增进了对单片机原理及其应用的认知,也为日后开发更为复杂的智能交通控制系统汇集了珍贵经验。
6.2 不足与改进
本设计基本上达成了预定的功能,但是在研究与调试的时候也找出一些不够的地方,要在后面的工作当中去改善,这个系统采取固定的配时计划,即便能够经由按键来调整时间,还是属于定时控制之类,没法按照实际的车流量来动态调整信号配时,在车流量变化很大的交叉路口也许会出现资源被闲置或者拥堵加重的情形,以后可以考虑采用车辆检测传感器,随时收集各个方向的车流量数据,利用自适应控制算法来动态调整绿灯的持续时间,做到真正意义上的智能控制。 其次,本系统紧急模式靠手动按键启动,在实际应用时大概会存在响应迟缓的问题,日后可把无线通信技术融合进去,达成同特种车辆车载终端的自动化通信,只要救护车,消防车接近就会自动转入紧急模式,从而加强应急响应速度,数码管显示在强光环境下可能不太清楚,可以考虑换成高亮度LED数码管或者LCD显示屏,这样就能提升在室外环境下的可读性。 系统当下缺少故障自诊断功能,要是某个LED元件出了问题或者数码管显示异常时,就无法立刻察觉并发出警报,以后可以增添故障检测电路以及声光报警装置,以此来优化系统的可维护性,本设计仅仅完成了单个路口自身的控制任务,并不能够与周边路口协同配合,之后可以加装通信模块,进而做到对多个路口区域实施协调控制,创建起绿波带,这样才能更为有效地改善道路通行能力。
6.3 未来展望
随着物联网、人工智能和车路协同技术的快速发展,智能交通信号控制系统将迎来更加广阔的发展前景。未来的交通信号控制将不再局限于单个路口的独立控制,而是向着区域协调、车路协同、云端智能的方向发展。基于本设计的基础,可以从以下几个方面进行拓展和深化:一方面,利用车路协同技术达成车辆与信号灯之间随时的信息互通,信号灯可获知临近路口的车辆数目,速度以及种类等相关信息,针对每辆车制定理想的通行计划,再经由车载终端告知驾驶员车速参考意见,促使车辆无需停顿便能穿过路口,从而明显削减停车等待时间并缩减能源损耗。另一方面,运用深度强化学习这种人工智能算法来改善信号调整时机,控制系统的运行过程需和交通环境持续互动,借此自行探寻出适合的控制方法,以应对复杂多变的车流量情况。 建立云端交通守护平台,把大量路口的信号灯连入云端,做到对区域交通状况的全面感知并协同改良,依靠大数据分析来推断交通堵塞趋向,事先执行疏导举措,开发针对弱势道路使用者的保护功能,经由行人检测传感器去辨别闯入者。