摘要
交通控制系统是现代社会随着经济的发展而产生的一种特殊的公共管理系统。要保证安全高效的交通秩
序,不仅需要制定完备的交通安全规则,还需要通过一定水平的科学计数手段来实现。未来,交通控制系统将从被
动系统向主动系统发展。在这种控制方法中,系统的灵活性对应于瞬时交通量,从而可以随时改变系统中的周期,
改变某个周期的系统控制。大规模集成电子器件和微型计算机广泛用于控制。
本设计采用LED显示技术、红外感应开关技术、车流量检测传感技术等与单片机控制相结合,由此来实现交通系
统对于车流量的检测与控制,随着车流量的增多或者减少,调整交通灯切换时间,缓解交通压力。
本设计极大的改变了固定的交通控制模式,将车流量这一重要因素充分纳入到交通控制系统内,使其可以根据
车流量来进行交通秩序的指挥,极大的保障人民的生命财产安全和交通压力。同时本设计经过了实物测试阶段,可
以稳定运行。
第一章 绪论
1.1背景及意义
随着世界人口的迅速增长,交通工具的迅速发展,道路资源的限制,产生了科学的交通控制,在人们的日常生
活中起着不可或缺的作用,人们总是跟着车流走。自从18世纪工业革命到现在,工业的发展推波助澜了全球的交通
运输业的发展趋势,向世人推出了单独的交通操纵行业和管理方法。
交通控制系统是伴随着现代社会货运物流和交通发展而产生的特有的公共性智能管理系统,不仅要确保有效而
且安全可靠的交通纪律,并且务必要经过一定的技术方法来完成当代科学技术性,尤其是电子器件科学技术性的快
速发展和完善相对来说比较的完善,从而解决了硬件软件系统如何完美搭建的瓶颈问题。现如今阶段,交通控制系
统和交通操纵的自动化技术智能化系统随着时代发展已经变得彻底的完善。所有的地域都可以在统一的系统软件范
畴内,还可以根据正常的和指定的应急时间范围内开展科学的全自动调节。
大家都知道,交通控制系统在交通运送和人民生产制造生活的社会发展、工业生产和发展中起着至关重要的功
效。伴随着单片机设计新技术和传感器技术的迅猛发展,自动识别行业也发生了很大的转变。全自动交通监控器的
分析已经获得了明显的进度,其优质的性能指标强于传统式的交通控制方法。
伴随着交通控制系统的逐步完善,城市交通控制技术性与汽车工业同歩发展趋势。在其未来发展的每个环节,
交通的各类分歧五花八门。大家竭尽全力将每个环节的最新科技成果资金投入到交通控制中,促进了交通控制行业
持续的工艺转型。
交通控制的发展趋势主要是为了能处理日益增加的要求所提供的日益比较严重的人们交通问题,仅限道路工程
建设的临时不够和交通专用工具的快速提升。为了更好地让越来越多的车子安全性高效率的应用不足的路面资源,防止很多不必要的交通阻塞和混乱。此外,交通控制线的汽车总数要即时调节。
1.2交通控制系统研究现状
目前来看,人类交通领域方面最具象征意义的交通控制系统首屈一指的便是澳大利亚的SCATS系统。而我国通过
自己的不懈钻研与努力,采用的则是中国独立自主开发的交通控制系统。近代之前,由于经济的落后,我国交通控
制领域发展非常滞后,新中国建国后,随着各方面的发展和复苏,这种情况才得以好转,中国人民才逐渐的建立了
健全的交通控制体系。
SCOOT系统
SCOOT系统是根据交通实体模型相互配合优化程序流程形成最好配时计划方案。最终,发送至街口的交通信号
灯,期间全过程选用小步进电机优化的方式,即时持续调节绿信比、周期时间、时间差三个主要参数,不但降低了
测算量,并且有利于追踪和把握目前的交通发展趋势;由于系统探测器的信息内容敏感性低,优化器的失误不容易
造成总体关键不正确。不足之处是:第一,集中化控制构造难以解决多源控制;次之,总流量实体模型的确立必须
搜集很多的网络服务和总流量信息内容,十分的耗时费力。第三,数据信号相位差和零线火线是事先固定不动的,
不可以参加全自动转变。第四,控制子地区的全自动切分问题并未处理;第五,不及物动词饱和状态流的校准并未
完成自动化技术,当场安裝调节非常繁杂。
SCATS系统
SCATS系统是澳洲新南威尔士路面运输局于20时代70时期末科学研究取得成功的即时响应式的地区控制系统,从
总体上,它是一个即时计划方案挑选地区控制系统,是SCATS的最新版。SCATS系统选用线下测算,事先为每一个街
口设定四种绿信比计划方案,各自优化了以数据信号周期时间、绿信比和相位角为单独主要参数的五种内相位角计
划方案和五种外相位角计划方案。优化算法的关键根是根据“综合性总流量”和“对比度”。
RHODES系统
RHODES系统是亚利桑那大学开发成功的即时响应型的区域交通控制系统。测试表明,一半的拥堵交通互联网是
合理的。RHODES将相位差控制、合理的绿化带和预测算法作为关键技术。相位控制部根据到达车辆的预测值,动态
校正像素,找出最佳的相位顺序和相位长度。根据绿化带车队目前的预测值,有效利用决策树方法进行网络综合优
化,实时生成绿化带行驶,最大限度地减少延误和停车次数。通过APRES网络预测模型,系统采用非参数控制模型,
能够提前获取所需的交通流信息,提前有效响应,完全适应实时交通信号控制。在该模型中,时序方案不是由周
期、相位差、绿信比等传统参数决定的,而是由相序和相长决定的。一个缺点是没有对公共汽车客流及其自身的延
迟建模;二是需要进一步研究系统高层优化。
南京城市交通控制系统
南京交通控制系统是我国第一个自主开发的实时自适应城市交通信号控制系统。此系统结合SCOOT和SCATS的优
点,满足和适应国内道路网密度低、交叉口距离长、混合交通特点突出的路况;通常采用跨度级的和分区级的控制
结构,可根据需要扩展到交叉口级、分区级分布式级控制结构;该系统具有实时自适应、固定配电、无缆联动控制
三种模式,具有警卫、消防、救援、公交信号、人工指定等功能,工作方式灵活,功能齐全。一个缺点是汽车和非
汽车控制方式不完善,交通流相互影响,系统运行效果受到限制。二是综合考虑延误、停车次数、拥挤度的优化目
标,但不是充分考虑道路通行能力的系统目标。
深圳市SMOOTH交通信号控制系统
通畅的交通数据信号操纵系统选用分散式操纵方式,三层架构,大数据库,多网络服务器协作解决;依据深圳
市高对比度、高多元性、高期待的交通特点,及其周期性、不确定性和偶然性相结合的特性,采用灵便合理的控制
方法,追求完美高峰期较大容积和最少拥挤;该系统消化吸收了KATNET系统鉴别交通情况的方式、明确提出了SCOOT
系统的预测分析对策、SCATS系统的策略操纵与战略调整相结合及其交通情况鉴别中的总体目标管理决策控制方法、
单交叉路口自适应控制与公路网地区集中控制相结合的整体解决方法。在深圳市的使用结果显示,该系统做到了设
计方案目的和使用规定,合理减少了公路网运作耽误和道路通行能力,大大减轻了交通拥挤情况。
解决在我国城市交通的现状分析和存在的不足,一方面要参考海外城市交通管理方法的优良经验,注重创建城
市交通体系管理的必要性,加强城市交通科学研究的交通整体规划;另一方面,创建平稳的交通设备基本建设股票
基金,执行公共性交通优先选择现行政策,创建优秀的交通信息内容系统。
1.3论文的结构安排
本设计论文主要介绍了我设计的基于单片机技术的交通控制系统。本设计论文主体正文分为五个章节。而通过
五个章节的介绍,可以清楚的了解到此交通控制系统的原理及控制效果。
首先,第一章节介绍了当前交通控制系统的历史背景,从这里我们可以了解到交通控制系统是人类社会各个方
面发展的综合产物,交通控制系统的诞生很好的解决了随着社会发展所带来的一系列交通问题。同时此章节还详细
介绍了一些国内外的交通控制系统,让我们对现在所使用的交通控制系统有了一定的了解。
第二章则阐述了本设计的设计思路以及此设计对现阶段交通问题的作用及意义,介绍了单片机的历史发展与特
点,明确了以单片机技术为基础来设计交通控制系统。本设计主要以单片机技术为主,从而达到此设计的理想作用
效果。
第二章 总体方案设计
2.1单片机简述
2.1.1单片机历史与介绍
90时代至今,单片机技术慢慢盛行。伴随着社会的不断进步和科学合理技术的发展趋势,此项技术的真实运用已经
日趋完善,单片机被广泛运用于各行各业。现阶段,大家慢慢开始关心单片机在智能设备技术中的快速发展和运
用。此后,单片机技术进入了一个新形势下。当前,在产业发展历程中,电子器件行业是一个新型产业。大家取得
成功地使用了电子信息技术技术,将电子信息技术与单片机技术充足结合在一起。单片机的使用实际效果非常大。
作为电子计算机技术的一个支系,单片机技术在电子设备行业的使用丰富多彩了电子设备的作用,为智能化电子产
品的开发设计和使用带来了新的发展方向,完成了智能化产品的创新和发展趋势。
单片机又被称为单微控制板,属于电子器件芯片。单片机主要包含CPU、ROM、RAM等。各种各样数据采集和控制
系统可以使单片机开展各种各样错综复杂的操作过程、运算符号的实际操作,因而单片机凭着其强悍的数据分析技
术性和测算作用可以运用于智能化电子产品。简单点来说,单片机是芯片。电子元器件技术性的运用说明,该芯片
组是将数据信息计算和处理工作能力集成化在芯片上,进行数据信息迅速处理的系统。
图2.1 单片机结构框图
2.1.2单片机的特点
单片机的特征可以概括为下列一些层面:处理速度高;存储量大;外界可扩展性强,操纵功用强。从内部结构
系统配置到手机app,都是有一个完全的逐位电子计算机电脑操作系统,称之为位CPU,用以处理十位数而不是字和
字节。不但能拓展传送、置位、擦掉、检验等芯片中特殊功效运行内存的人,还能开展单片机位的或运算,十分完
善,方便使用。此外,在芯片上的RAM区段建立了双作用详细地址区段,可以非常灵活地应用。这一作用给客户带来
了较大的便捷。乘除指令也有利于程序编程。
2.2单片机交通系统设计
2.2.1单片机交通系统方案设计
此系统假设在一个十字交叉的路口,分成东西方向和南北方向。在某一特定时刻,一个方向禁止车辆通行,另
一个方向允许车辆通行。经过一定的时间,禁止通行的方向便会立即做出更改。如下图所示,灰黑色表明照明,乳白色表明灭掉,交通状况从状态首先变化,在状态变为6之前结束第一个循环,同时开始第二个循环,如此反复。
图2.2交通状态
四个街口有红、绿、黄公共交通情况灯和LED倒计时显示器。绿灯亮的情况下,一切街口都禁止行驶。信号灯照
亮后容许行驶,随后照亮,警示情况灯马上更改情况。
2.2.2单片机交通控制系统的功能介绍
本设计可以仿真模拟基本上的公共交通自动控制系统,绿红灯根据LED灯标示限行情况,还能够开展倒计时表
明、交通量检验、一定水平的调整等作用。
倒计时显示
倒计时说明,在数据信号转变的间隔时间内,可以促进驾驶员在“终止”和“前行”中间做出准确的挑选。倒
计时表明的公共交通自动控制系统更易于被驾驶员和路人接纳,应用时的道路交通安全也获得更快的确保。
车流量检测
车辆检测传感器作为现代的交通控制系统中最重要组成的部分,它在现代的交通控制系统中起着至关重要的作
用。从目前的交通系统中分析,目前主流的车辆检测器种类有红外线检测器、机械压电检测器等。这些常见传感器
的基本原理是通过单片机的控制功能实现对车辆检测功能。而现在国内所使用的交通信号采用固有的切换时间,但
是不能根据车辆情况进行自动切换。在传统的交通状态下,为了确保车辆与行人的安全,交警会通过观察路口的车
流来自行决定红绿灯的切换时间,以此来保证最安全可靠的交通状况。
紧急情况处理
紧急情况下,比如救护车通过路口时,路口的交通状况必须保持畅通。因为在这种情况下,时间不能延误,时
间关系到公共财产的安全和人民的生命安全。因此,在交通控制系统中增加紧急暂停按钮很重要。
2.3单片机交通控制系统的基本构成与原理
本设计中的交通控制系统可以通过单片机的控制效果来直接控制信号灯的切换,从基本的交通情况下来代替交
警指挥交通。此外,LED数码管可以进行红绿灯倒计时的显示,以此来警告行人和车辆注意红绿灯的切换来确保安全。从以往的交通系统进行分析,这次的交通控制系统在现有的功能上增加了车流量检测电路,通过传感器采集车
流量情况,通过这些数据,系统进行专业处理。
图2.3系统的总体框图
因此,本设计的系统软件由单片机控制,单片机与最小系统连接。交通检测模块引起输入,信号灯模块和LED倒
计时模块接收输出。
第三章 系统硬件电路设计
3.1系统硬件电路构成
为了完成本设计规定的主要作用,AT89C51单片机和现场设备组成临时将组成最小的自动控制系统。本设计将12
个发光二极管平均的分为四组,红、绿、黄灯将组成红绿灯,而倒计时显示模块也会由8个LED灯组成。实际工作
中,交通检测传感器会积极的采集交通数据,传输到输出模块,进行倒计时显示模块的调整。紧急中断模块可以应
对突发情况进行交通状态中断。
3.1.1系统电路构成
此次的交通控制系统主要以单片机为工作核心,各个模块相互作用,并且构成拥有交通流量检测功能的控制系
统。从理论上分析,系统电路是由车流量检测电路、LED显示电路等电路组成。具体情况如图。
图3.1总体设计电路图
3.1.2系统工作原理
当该交通系统上电开机后,系统的初始模式会自动的变成车流量少的模式,而系统的模式分为车少和车多的模
式。这时候,工作人员如果按下K2键,则系统将会切换成车多模式,如果工作人员想要加入车少模式,只需要按下
K1或复位键K3,则切换为车流量少模式。按K4键若干,达到一定次数之后,系统切换为车流量多模式,按K5键若
干,也达到上述效果。其实这个过程就是将路口的红外传感器检测数据传递到检测电路,以及判断是否进行车流量
检测及调整。
3.1.3车流量检测电路
为了控制交通灯的时间,需要检测道路上的交通流量,根据车流量的数据进行红绿灯时间的延长或缩短。本设
计采用E18-D80NK红外光电开关进行车流量检测输入。E18-D80NK是集有发光和受光的光电传感器。当透射光被传感
器调制后透射,经过作用的反射光被光头解调并且输出。这样的传感器可以有效的避免可见光的干扰。在此之外,
传感器通过使用镜头,它的检测电路可以检测到最多80cm的距离(根据红外光的特性,物体的最大可检测距离因颜色
而异。白的物体最远,黑的物体最近)。而且传感器探测障碍物的距离也是可以根据工作人员的需要用传感器的尾部
的音量旋钮调节进行调节。由于它的特点,这样的传感器拥有检测距离远、可见光干涉低、成本低、容易安装的特
点。从实际效果上来看,这样的传感器可以广泛的应用于机器人的避障模块、工厂的流水线仪表等。
东西车流量、南北车流量方向各连接一个E18-D80NK红外光电开关,若东西方向通过一辆车,E18-D80NK红外光
电开关检测后输入到东西车流量检测电路,则K4按键按动一次,若南北方向通过一辆车,E18-D80NK红外光电开关检
测后输入到南北车流量检测电路,则K5按键按动一次,等待路口通过一定数目的车辆后,下一周期的红绿灯显示时
间切换为高车流量模式,红绿灯切换时间延长,反之依然为低车流量模式。
3.1.4 LED数码管
LED显示器作为大型显示设备,具有亮度高、亮度低、寿命长、维护简单等优点。LED数码管的结构简单,可分
为七级和八级两种形式,也有共阳极和共阴极之分。例如,在8级的共阴极的数字管中,有8个发光二极管,连接着
LED的显示原理是利用一样名称的导线有效控制LED是否点亮,从而显示不同的字形。 例如,dp、g、f、e、d、
c、b、a都显示为亮度8,驱动线通过共用阴极连接。代码表如下表所示:
3.1.5晶振电路
晶振是晶体振荡器的简称,在电路学上相当于在一个电容器上并联上一个电阻之后再串联一个二端子网络。而
这个网络具有两个网络谐振点,谐振名称通过频率的高低来划分,其中低频谐振为串联谐振,高频谐振为并联谐
振。但是因为晶体自己的特性,这两个频率之间的距离是相当近。但是在这个非常窄的频率范围内,晶体振荡器等
同于一个电感。所以,晶振电路可以通过在晶体振荡器的两端连接数个适当的电容器来成为并联的谐振电路。在实
际应用中,工作人员将并联谐振电路应用于负反馈电路,以此来构成正弦波振荡电路。但是由于时变振荡器的频率
范围非常窄,所假如其他元件的参数发生变化,但是振荡器的固有频率也不会发生变化。
图3.6原理图
晶体振荡器的重要参数就是负载电容值,晶体振荡器的标称谐振频率通过选择与负载电容值相等的并联电容来
获得。通常,晶体振荡电路与反相放大器两端的晶体振荡器连接,两个电容器分别与晶体振荡器的两端连接,各电
容器的另一端接地。这两个串联电容的电容值一定要与负载电容相等。
3.1.6滤波电路
滤波电路分别安装在整流电路的两端,其作用是为了降低交流脉动的脉动系数,并且从实际出发,高效平滑输
出的蓄电设备被工作人员称为平滑电容器。假如要发挥出滤波电路的作用,从实际上来分析,滤波电路则需要比其
他电路更大的能量存储容量。所以,几乎市面上所有的正规的滤波电路都使用着电解电容器。而电解电容器因为使
用电解液作为电路电极而得名。从结构上,电解电容器的一端为正极,另一端为负极,实际中工作人员不能反向连
接。正端子与整流输出电路的正端子连接,负端子与电路的负端子连接。在必须将交流电力转换为直流电力的电路
中,设定滤波器容量后电子器件电路的动作特性会变得更平稳,降低交流谐波失真对电子器件电路的影响。电路中
过滤器电容的标记一般用‘C’表明,电容由负载电阻和导出电流量决策。当过滤装置容积做到一定容积时,提升容
积对别的指标值将会造成不良危害。
滤波电容用以开关电源电子整流器电路中,以清除交流分量,使输出直流电更光滑。在高精密电路中,这样的
事情下,常常应用并接电容电路的搭配来过滤电容的计算效用。
50Hz直流电路中较常用的电解电容,脉冲工作电压頻率仅有100 Hz,蓄电池充放电时间为秒钟级。为了进一步
的减少高次谐波失真指数的所需的电容器达到数十万微法,通常低频铝电解电容器都以电容器为对象,电容器的容
量、损耗角正切值和漏电流是判别其好坏的基本参数。另一方面,开关电源中的输出滤波器电解电容器,锯齿状波
的电压频率达到数万赫兹,甚至数十兆赫兹。此时,电容器不是其第一指标值,高频率铝电解电容器优劣的标准规
定是‘特性阻抗-频率’特点。在电源的输出功率下规定低等效电路特性阻抗,对半导体元器件工作中时发生的高频
率顶峰数据信号有不错的过滤功效。
旁通电容器用以传输或消化吸收一个元件或一组元件的交流分量的电容器。一般来说,交流/直流电的交流一部
分被除去,而直流电一部分容许根据带旁通电容的元件。将高频电流和低频电流混合的交流电流中,旁路元件的电
容称之为“旁通电容”。针对同一电路,旁通电容清除键入信息中的高频率噪音,前面高频率噪音和去耦电容清除
輸出数据信号中的噪音。
从理论上来分析,去耦电容器在集成电路的电源和接地间只有两种作用。一种是集成电路的能量存储电容,而
另一种是旁路该器件的高频噪声。
3.2AT89S51单片机简介
3.2.1 AT89C51芯片内部结构简介
中央处理器:中央处理器是单片机设计的关键。它是一个8位数据的信息总宽CPU,可以完美的解决8位二进制数
据编码。而且CPU具有操纵、指引和生产调度全部模块体系的融洽的作用,同时还进行着I/O作用的估算和操控等具
体操作。
数据存储器:数据储存器的作用是储存工作人员之前更改的数据信息。单片机中数据储存的详细地址空间具有
256个RAM模块,但是仅仅只有最前面的128个模块可以作为客户的数据储存空间,而后面的128个模块可以被用来作
为专用型存储器所占有。
程序存储器(内部ROM):程序存储器运行内存用于储存系统和固定不动参量。通常应用只读存储器,它有各种
类型。全部89系列产品单片机设计都应用闪存芯片。AT89C51内部结构配备了4KB闪存芯片。
并行输入输出(I/O)口:C51有四组8位I/O端口(P0、P1、P2和P3)用于传送外界数据信息。每一个端口由一个
锁存和一个控制器构成。他们关键用于完成与外围设备并行处理的信息键入输出,一部分情况下,I/O口也会有别的
作用。
时钟电路:时钟电路的作用是产生单片机工作所需要的时钟脉冲序列。
中断系统:该体系的首要功用是监管和解决外界或内部结构终端设备要求。AT89C51有五个终断源,包含两个外
部中断源和三个内部结构终断源。
3.2.2主要引脚功能
AT89C51引脚图如下图所示:
图3.9 引脚图
VCC:接5伏直流电(电源)
GND:接地
P0口:数据总线复用口,有8位的I/O口。
P1口:有8位的双边I/O端口,含有上拉电阻。它的输出缓存级原则上可以推动四个TTL逻辑门。
P2口:有8位双边I/O端口,含有上拉电阻。它的输出缓存级原则上可以推动四个TTL逻辑门。
P3口:有8位双边I/O端口,含有上拉电阻。它的输出缓存级原则上可以推动四个TTL逻辑门。并且,P3不仅是一
个通用性的I/O端口线,也有它的第二个作用,
同时,P3同时可以接受用于闪存芯片的程序编码和程序接口的调节数据信号。
RST:输入复位。
EA/VPP:容许外界浏览。假如CPU只想要浏览外界程序存储器,EA端务必保证低电频,即接地装置。
XTAL1:振荡器反相放大器及内部时钟发生器的输入端。
3.3其他器件
发光二极管:依据本设计的特性,红绿灯的表明不可或缺,红绿灯的表明选用发光二极管。。四个方位有四组
红、黄、绿灯。假如东西方位红灯亮,那么南北方位便是绿灯,相反也是,因此在硬件配置联接图上也是对称性遍
在这个设计中,具体操控的灯有6个,分别是东向西红灯、东西向灯闪、东向西绿灯、南北灯闪、南北绿灯,全是低
电频合理。有这么四样情形:东西红闪,南北绿闪;东西红闪,南北黄闪;东西绿闪,南北红闪;东西黄闪,南北
红闪。
上拉电阻:TTL电路推动COMS电路时,如果逻辑TTL电路输出的脉冲信号小于COMS电路的最小脉冲信号(一般为
3.5V ),为了更好地输出脉冲信号的值,工作人员务必在TTL的输出接线端子上联接上上拉电阻。OC门电路需要再加
上一些上拉电阻才可以应用。因为输出管脚的推动能力,一些单片机设计管脚也常常应用上拉电阻。在COMS处理芯
片上,为了避免静电感应损害,不采用的输电线不可以悬在空中。一般来说,联接上拉电阻以减少输入电阻,进而
给予释放出来正电荷的途径。管脚再加上几个上拉电阻,输出脉冲信号,处理芯片键入数据信号噪声容限的抗干扰
能力。公交车抗干扰信号能力强。针角悬在空中时,非常容易遭到外界的干扰信号。长路线传送中电阻器的不配对
非常容易造成反射面波影响。此外,下拉电阻是电阻器的配对,合理地抑止反射面波影响。。
从节省功能损耗和处理芯片电流量引入能力的方面看来,上拉电阻阻值的挑选正常情况下应当非常大;电阻器
大、电流量小、充足小,以保证充足的驱动电流;在电阻器小、电流量大的快速电路中,过大的上拉电阻的边沿很
有可能会慢慢减慢。充分考虑,阻值通常选中在1k到10k中间。下拉电阻也是有相同的原因。
上拉电阻和下拉电阻的选用需要依据开关管的特点和下属电路的键入特点开展设置,关键要考虑到多个要素。
推动能力和用电量的均衡。用上拉电阻来看,上拉电阻越小,推动的能力则越高,但是功能损耗会变得越大,工作
人员则越是必须留意二者的平衡,必须满足下位电路的推动要求。相同道理下,用上拉电阻来看,在输出的脉冲信
号下,开关管断掉,上拉电阻应当适度挑选,便于可以往下一级电路提供充足的电流量;等級的设置。阀门值的脉
冲信号因电路的高低电频而异,因而请适度设置电阻器以输出适度的脉冲信号。以上拉电阻为例子,输出脉冲信号
为高电平时,开关管应导通,上拉电阻和开关管的关断电阻分压值应保证在零脉冲信号阀值下列;上拉电阻、电源
开关间的电阻和下属电路间的输进电容器造成RC延迟时间,电阻器越大延迟时间越大。上拉电阻的制定务必考虑到
电路在这方面的需要。
第四章 系统软件程序的设计
4.1程序主体设计流程
所有的控制程序实际上都有几个模块。延迟时间子程序、计时器子程序、按键操作子程序、数码管的显示子程
序程序、状态灯自动控制子程序、车流量检测子程序、程序流程图如下。
图4.1 程序流程图
4.2 定时器原理
定计时器动作的基本原理其实是,给定初始值,然后依次对其加上1,一直逐渐降低为负值,这就是理论上所说
的模式值。而这个初始值如果被发送到TH和TL。递增逐渐计数,溢出中断将请求从1到0自动的产生。所以,假如计
数器被操作为所需要的计数值0,假如说请求的计数值定义为C,那么初始计数值则可以定义为TC,通过这样我们可
以获得下面的公式:
TC=M-C
式子中的M代表为计数器理论的模数。但是从理论上看,计数器并不是我们的目的,而我们的唯一目的是时间
值。当我们重新定义时间时,便是定时器的计数脉冲周期定义为T0,数值为单片机系统的主要频率的周期的12倍。
假设所需的时间值为T,则C=T/T0。通用公式变为:
T=(M-TC)T0
模式和计数器工作方式有关。
4.3 子程序模块设计
4.3.1状态灯显示与判断
在这个设计中,实际控制了六个灯:东西红、东西绿、东西黄、南北红、南北绿、南北黄。定义以下IO端口。
两者在低水平上都有效。
sibt EAS_RED = P1^0;
sibt EAS_GRE = P1^1;
sibt EAS_YEL = P1^2;
sibt NOR_RED = P1^3;
sibt NOR _GRE = P1^4;
sibt NOR _YEL = P1^5;
通常情况下一共有六种状态:东西红闪、东西绿闪、东西黄闪、南北红闪、南北绿闪、南北黄闪。六种状态依
次进行变换,这涉及到状态的判断和衔接。
4.3.2LED倒计时显示
倒计时每1秒更新一次,但要是超过1秒,则要从存储时间的工件寄存器中减去1,结束之后,将会传递到LED上
进行显示。具体程序如下:
void display_service(void)
{
switch(now_window)
{
case 1:
{
if (now_win_sta == 1)
{
win_sta_tmp = 1;
now_win_sta = 0;
dig_show_fir = tim_tmp[0] / 10;
dig_show_two = tim_tmp[0] % 10;
dig_show_thr = (tim_tmp[0]+tim_tmp[2]) / 10;
dig_show_fou = (tim_tmp[0]+tim_tmp[2]) % 10;
NOR_RED = 0;//ÏÔʾºìÂ̵Æ
NOR_GRE = 1;
NOR_YEL = 1;
EAS_RED = 1;
EAS_GRE = 0;
EAS_YEL = 1;
}
else if (now_win_sta == 2)
{
win_sta_tmp = 2;
now_win_sta = 0;
dig_show_fir = tim_tmp[2] / 10;
dig_show_two = tim_tmp[2] % 10;
}
else if (now_win_sta == 3)
{
win_sta_tmp = 3;
now_win_sta = 0;
dig_show_fir = (tim_tmp[1]+tim_tmp[2]) / 10;
dig_show_two = (tim_tmp[1]+tim_tmp[2]) % 10;
dig_show_thr = tim_tmp[1] / 10;
dig_show_fou = tim_tmp[1] % 10;
NOR_RED = 1;
NOR_GRE = 0;
NOR_YEL = 1;
EAS_RED = 0;
EAS_GRE = 1;
EAS_YEL = 1;
}
else if (now_win_sta == 4)
}
18
EA=1;
break;
}
}
4.4 源程序
#include "reg51.H"
#include "stdio.h"
#include "intrins.h"
typedef struct SAVEDATE
{
unsigned char first_flag;//是否是第一次开机检测存储变量
signed char led_dis_tim[3];//倒计时间设置变量
}SAVEDATE;
SAVEDATE DISDAT_t;
sbit K1 = P3^6;//车流量多按键
sbit K2 = P3^7;//车流量少按键
unsigned char pre_key = 0x0f;//记录按键状态
unsigned char __g_key_value;//获取到按键的值
//共阴数码管码表
unsigned char code dig_tab[18] =
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x00,0x39,0x5e,0x79,0x71,
0x40,0x00
};
//0、1、2、3、4、5、6、7、
//8、9、A、B、C、D、E、F、
void init_all_hardware(void)
{
delay_ms(100);
time_init();//定时器初始化
__g_key_value = 0;//按键值初始化为0
DISDAT_t.led_dis_tim[0] = 20;//东西绿
DISDAT_t.led_dis_tim[1] = 20;//南北绿
DISDAT_t.led_dis_tim[2] = 5;//黄灯闪烁时间
dig_show_fir = 17;//默认不显示
dig_show_two = 17;//默认不显示
dig_show_thr = 17;//默认不显示
dig_show_fou = 17;//默认不显示
tim_tmp[0] = DISDAT_t.led_dis_tim[0];//初始化倒计时时间
tim_tmp[1] = DISDAT_t.led_dis_tim[1];//初始化倒计时时间
tim_tmp[2] = DISDAT_t.led_dis_tim[2];//初始化倒计时时间
now_window = 1;//赋值默认模式
now_win_sta = 1;//赋值默认模式
tra_flow_mode = 1;//初始化默认车少模式
ES=1;//开中断
delay_ms(1000);//延时
19
}
void delay_ms(unsigned int cnt)//延时函数处理
{
unsigned int x;
for( ; cnt>0; cnt--)
{
for(x=110; x>0; x--);//软件延时大概为1ms
}
}
void key_scan(void)
{
P3 |=0xc0;//P3高两位置高
if (pre_key==(P3&0xc0))return;//按键状态未改变时继续
pre_key = P3&0xc0;//保存当前最新按键状态
if (!K1)//车辆多按键
{
delay_ms(10);//延时10ms
if(!K1)//还判断为按下
{
__g_key_value = 1;//按键赋值
}
}
if (!K2)//车辆少按键
{
delay_ms(10);//延时10ms
if(!K2)//还判断为按下
{
__g_key_value = 2;//按键赋值
}
}
}
void key_service(void)
{
switch(now_window)//选择不同窗口
{
case 1:
{
switch(__g_key_value)
{
case 1://车流量多按键按下
{
dist_yel_alm = 0;//关黄灯
yel_cav = 0;//关黄灯
EAS_YEL = 1;//关黄灯
NOR_YEL = 1;//关黄灯
DISDAT_t.led_dis_tim[0] = 45;//东西绿
DISDAT_t.led_dis_tim[1] = 45;//南北绿
20
tim_tmp[0] = DISDAT_t.led_dis_tim[0];//赋值通行时间
tim_tmp[1] = DISDAT_t.led_dis_tim[1];//赋值通行时间
now_window = 1;//赋值回到初始倒计时
now_win_sta = 1;//赋值回到初始倒计时
}
__g_key_value = 0;//按键清零
break;
case 2://车流量少按键按下
}
}
break;
}
}
void dis_dri(void)
{
static unsigned char u8DisStep = 1;//扫描计步
DIG_SEG = 0x00;
switch(u8DisStep)
{
case 1: //显示第1位
{
dig_show_tmp=dig_tab[dig_show_fir];
DIG_SEG = dig_show_tmp;//送段选
DIG_PLA = 0xfe;//送位选
}
break;
case 2: //显示第2位
{
dig_show_tmp=dig_tab[dig_show_two];
DIG_SEG = dig_show_tmp;//送段选
DIG_PLA = 0xfd;//送位选
}
break;
case 3: //显示第3位
{
dig_show_tmp=dig_tab[dig_show_thr];
DIG_SEG = dig_show_tmp;//送段选
DIG_PLA = 0xfb;//送位选
}
break;
case 4: //显示第4位
{
dig_show_tmp=dig_tab[dig_show_fou];
DIG_SEG = dig_show_tmp;//送段选
DIG_PLA = 0xf7;//送位选
}
u8DisStep=1;
21
}
}
void display_service(void)
{
switch(now_window)
{
case 1:
{
if (now_win_sta == 1)//东西绿
{
win_sta_tmp = 1;
now_win_sta = 0;
dig_show_fir = tim_tmp[0] / 10;//显示倒计时
dig_show_two = tim_tmp[0] % 10;//显示倒计时
dig_show_thr = (tim_tmp[0]+tim_tmp[2]) / 10;//显示倒计时
dig_show_fou = (tim_tmp[0]+tim_tmp[2]) % 10;//显示倒计时
NOR_RED = 0;//显示红绿灯
NOR_GRE = 1;
NOR_YEL = 1;
EAS_RED = 1;
EAS_GRE = 0;
EAS_YEL = 1;
}
else if (now_win_sta == 2)//黄灯闪
{
win_sta_tmp = 2;
now_win_sta = 0;
dig_show_fir = tim_tmp[2] / 10;//显示倒计时
dig_show_two = tim_tmp[2] % 10;//显示倒计时
}
else if (now_win_sta == 3)//南北绿
{
win_sta_tmp = 3;
now_win_sta = 0;
dig_show_fir = (tim_tmp[1]+tim_tmp[2]) / 10;//显示倒计时
dig_show_two = (tim_tmp[1]+tim_tmp[2]) % 10;//显示倒计时
dig_show_thr = tim_tmp[1] / 10;//显示倒计时
dig_show_fou = tim_tmp[1] % 10;//显示倒计时
NOR_RED = 1;//显示红绿灯
NOR_GRE = 0;
NOR_YEL = 1;
EAS_RED = 0;
EAS_GRE = 1;
EAS_YEL = 1;
}
else if (now_win_sta == 4)//黄灯闪
{
22
23
win_sta_tmp = 4;
now_win_sta = 0;
dig_show_fir = tim_tmp[2] / 10;//显示倒计时
dig_show_two = tim_tmp[2] % 10;//显示倒计时
dig_show_thr = tim_tmp[2] / 10;//显示倒计时
dig_show_fou = tim_tmp[2] % 10;//显示倒计时
NOR_RED = 1;//显示红绿灯
NOR_GRE = 1;
EAS_RED = 0;
EAS_GRE = 1;
}
}
EA=1;
break;
}
}
void timing_service(void)//倒计时函数,时基为1S
{
if (tim_flg == 1)
{
tim_flg = 0;
if (win_sta_tmp == 1)//东西绿
{
IT0=1;//INT0负跳变触发
EX0=1;//开外部INTO中断
tim_tmp[0]--;
if (tim_tmp[0] < 1)
{
yel_cav = 1;
alm_flag = 1;
lam_tim_cnt = 5;
EAS_YEL = 0;
dist_yel_alm = 1;
now_win_sta = 2;
return ;
}
now_win_sta = 1;
}
else if (win_sta_tmp == 2)//黄灯闪
{
tim_tmp[2]--;
EX0=0;//开外部INTO中断
if (tim_tmp[2] < 1)
{
dist_yel_alm = 0;
yel_cav = 0;
EAS_YEL = 1;
tim_tmp[0] = DISDAT_t.led_dis_tim[0];//赋值红绿灯
tim_tmp[1] = DISDAT_t.led_dis_tim[1];//赋值红绿灯
tim_tmp[2] = DISDAT_t.led_dis_tim[2];//赋值红绿灯
now_win_sta = 3;
return ;
}
now_win_sta = 2;
}
else if (win_sta_tmp == 3)//南北绿
{
tim_tmp[1]--;
IT1=1;//INT0负跳变触发
EX1=1;//开外部INTO中断
if (tim_tmp[1] < 1)
{
yel_cav = 1;
alm_flag = 1;
lam_tim_cnt = 5;
NOR_YEL = 0;
dist_yel_alm = 2;
now_win_sta = 4;
return ;
}
now_win_sta = 3;
}
else if (win_sta_tmp == 4)//黄灯闪
{
tim_tmp[2]--;
EX1=0;//开外部INTO中断
if (tim_tmp[2] < 1)
{
dist_yel_alm = 0;
yel_cav = 0;
NOR_YEL = 1;
if (tra_flow_mode ==1 )//车流量处理
{
if (count_a>=20)
{
DISDAT_t.led_dis_tim[0] = 45;//赋值红绿灯
}
if (count_b>=20)
{
DISDAT_t.led_dis_tim[1] = 45;//赋值红绿灯
}
if ((count_a<20)&&(count_b<20))
{
DISDAT_t.led_dis_tim[0] = 20;//赋值红绿灯
24
DISDAT_t.led_dis_tim[1] = 20;//赋值红绿灯
}
}
else if (tra_flow_mode == 2)//车流量处理
{
if (count_a>=45)
{
DISDAT_t.led_dis_tim[0] = 45;//赋值红绿灯
}
if(count_b>=45)
{
DISDAT_t.led_dis_tim[1] = 45;//赋值红绿灯
}
if ((count_a<45)&&(count_b<45))
{
DISDAT_t.led_dis_tim[0] = 20;//赋值红绿灯
DISDAT_t.led_dis_tim[1] = 20;//赋值红绿灯
}
}
tim_tmp[0] = DISDAT_t.led_dis_tim[0];//赋值红绿灯
tim_tmp[1] = DISDAT_t.led_dis_tim[1];//赋值红绿灯
tim_tmp[2] = DISDAT_t.led_dis_tim[2];//赋值红绿灯
now_win_sta = 1;
count_a = 0;
count_b = 0;
return ;
}
now_win_sta = 4;
}
}
}
void yel_alm(void)
{
if (yel_cav == 1)//黄灯闪
{
if(alm_flag)
{
if (lam_tim_cnt==0)
{
alm_flag = 0;
lam_tim_cnt = 5;
if (dist_yel_alm ==1)//灭
{
EAS_YEL = 1;//黄灯灭
}
else if (dist_yel_alm ==2)
{
25
NOR_YEL = 1;//黄灯灭
}
}
}
else
{
if (lam_tim_cnt==0)//亮
{
alm_flag = 1;
lam_tim_cnt = 5;
if (dist_yel_alm ==1)
{
EAS_YEL = 0;//黄灯亮
}
else if (dist_yel_alm ==2)
{
NOR_YEL = 0;//黄灯亮
}
}
}
}
}
void exint0_interrupt(void)interrupt 0//外部中断
{
EA = 0;//关总中断
delay_ms(10);//延时
count_a++;//东西测流计数加
EA = 1;//开总中断
}
void exint1_interrupt(void)interrupt 2//外部中断
{
EA = 0;//关总中断
delay_ms(10);//延时
count_b++;//南北测流计数加
EA = 1;//开总中断
}
{
static unsigned int base_2ms_buff;//2ms计时
static unsigned int samping_cnt = 0;//1S钟计时
TF0 = 0;//清除中断标志
TR0 = 0;//关定时器
dis_dri();//动态数码管扫描
if (now_window==1)//默认就一个窗口
{
if (++samping_cnt > 500)//累加到1S,2*500=1000ms=1S
{
samping_cnt = 0;//清除累加变量
26
27
tim_flg = 1;//标志1S
}
}
if (++base_2ms_buff==50)//累加到100ms,2*50=100ms
{
base_2ms_buff = 0;//清除累加变量
if (lam_tim_cnt)//当alm_tim_cnt大于1时候就自减
lam_tim_cnt--;
}
TH0 = 0xf8;
TL0 = 0x2f;//装载初值2ms(65535-63535)
TR0 = 1;//开定时器
}
4.5 总体系统调试
4.5.1proteus仿真器
Proteus软件是英国lab center 公司发布的EDA工具软件。不仅仅可以模拟其他EDA工具的功能,还可以模拟单
片机和它的外围设备虽然刚在国内流行,但很受单片机爱好者、单片机教育者和研发APP的技术人员的欢迎。
Proteus全面具备其他的EDA软件工具的作用。这种作用是基本原理合理布局、PCB全自动或人力走线、SPICE电
源电路的模拟。
图4.1 proteus页面
Proteus不仅仅提供了用于仿真汽车研发的资源。比如示波器、逻辑分析仪、虚拟终端设备,还向开发人员提供
了SPI调试器、I2C调试器、频率计、图形产生器、ACDC电流表和ACDC检流计等。从理论上来看,一个电路可以任意
开启同样的元器件。与具体机器设备分离,Proteus提供了图形表明功能,可以图形即时表明路线上改变的数据信
号,具备示波器一样的功能。可是,功能大量。这种单片机应用仪表盘具备满意的主要参数指标值,比如非常高的
输入电阻、非常低的输出阻抗。这种尽量避免了设备对测定效果的危害。Proteus能提供的调节方式Proteus为线路
的检测提供了非常丰富的检测数据信号。这种检测数据信号包含模拟数据信号和模拟信号。
图4.2 仿真原理图
4.5.2 集成开发环境KELL
Keil vision2是Keil软件公司生产的单片机51系列的软件系统,它具有单片机设计的C语言。它用于传统C语言
的语法开发和设计。从理论上来看,C语言比汇编语言更容易掌握,不仅提升了编程人员的工作效率,同时它本身还
可以嵌入汇编。Keil C51不仅仅为51单片机的开发提供了C语言的自然编程环境,还保障了汇编程序的准确性和可靠
性。C51的编译器的作用获得了提高,可以贴近CPU自身和别的衍生品。C51彻底集成到Vision2集成开发环境中,包
含编译器、汇编器、实时操作系统、新项目管理工具和调试器。Keil C51手机软件给予了充足的函数库、强劲的集
成开发设计调节软件和Windows页面。
2006年1月30日,ARM发布了新的嵌入式CPU软件开发工具,集成了Keil Vision3的Real view MDK开发环境。Real
MDK开发环境Keil Vision3归Keil Enterprise所有。Real MDK不仅集成了业界最先进的技术,还包括了Keil
Vision3的集成开发环境与Real View编译器。它适用ARM7、ARM9、全新的Cortex-M3关键CPU、运行编码全自动配
备、集成的拍照闪光灯控制模块、强大的模拟机器、设备和环境变量的功能。与ARM之前的工具箱广告相比,最新版
本的Real view编译器增强了20%以上的功能。
2009年2月公布了Keil Vision4。Keil Vision4引进了灵便的渠道智能管理系统,容许开发者应用好几个监控器。此
外,有一些位置可以在视觉效果表层上良好控制对话框的部位。新的操作界面可以更好的运用手机屏幕室内空间,
更有效地安排好几个对话框,并为开发app 应用软件给予清理有效的自然环境。最新版本不仅适用于大部分全新的
ARM芯片,还用于提升别的新作用。
2011年3月,ARM企业公布将最新版的Keil Vision4集成到近期的集成开发环境Real View MDK开发环境中。 编译
器、调节专用工具与ARM机器设备最极致地配对。
2013年10月,Keil正式发现出售了Keil μVision5 IDE版本。
而此次设计采用的开发环境正是Keil μVision5。
图4.3 集成开发环境KELL页面
Keil C51套件的整体结构。 Vision和I shell软件可以分别完成编辑、编译、连接、调试的工作,并且可以模
拟Keil C51和Dos集成开发环境。同时,软件的开发人员在此基础上可以使用IDE本身的编辑器来编辑c语言的资源文
件。然后,C51和C51编译器可以分别编译不同的资源文件,并生成不同的目标文件。而之后,开发人员可以将目标
文件可以通过创建特定的库文件来实现文件生成,不仅如此,资源文件也是可以将库文件联结到C51编译器上来生成
绝对的目标文件。Keil仿真器还可以通过直接的调试目标程序板,同时也直接的写入程序存储,比如EPROM。
Keil C51通过编译开发生成的代码具有高速性,并且很多的程序语句编译成的代码非常紧凑,这样也便于其他
的人方便理解。 当然,假如开发人员在开发大型的应用软件时,工作人员可以更好地发挥它所具有的所有的高级语
言的优势。但是从实际效果上来看,如果要与其他汇编语言相比,C语言不仅在功能、结构、可读性上要有优势,在
可维护性上也有睥睨其他语言的优势。
4.5.3 硬件仿真调试
首先进入protues仿真器,打开原理图,进入调试页面,开始进行仿真。利用原理图中的K1、K2、K4、K5按键进行车
流量的模拟与控制。开始进行仿真,按下复位按键K3,进行复位操作,如下图:
图4.5 复位键按下界面
此时交通控制系统进入车流量少模式,此时的东西方向红绿灯的倒计时为20秒,初始状态灯为绿灯;南北方向
的倒计时为25秒,初始状态灯为红灯。
而假如系统要进入车流量多的模式,则需要按下K2按键,按下按键的同时,交通控制系统会马上进入车流量多的模
式,如下图:
图4.6 车流量多模式
此时东西方向红绿灯倒计时为45秒,南北方向红绿灯倒计时变为50秒。之后若想切换为车流量少模式,可以按
下K1按键,进入车流量少模式。
同时,若想不通过按键进行车流量少和车流量多模式的切换,通过E18-D80NK红外光电开关进行对通过路口的车
辆进行检测计数,东西方向和南北方向各连接一个E18-D80NK红外光电开关,与K4、K5按键相连,东西方向路口通过
一辆车,则K4按键按动一次,按键按动次数达到一定数目,则自动进入车流量多模式,南北方向亦然,如下图:
图4.7 东西与南北方向车流量检测
4.5.4 硬件测试
图4.8 实物图
实物测试完毕,性能与理论设计相符合。
第五章 总结
目前,交通控制系统在交通运输的领域有着举足轻重的地位。未来,交通控制系统将从被动系统向主动系统发
展。所谓主动系统,就是按照程序的驱动系统。系统的主动处理器可以直接掌握控制区域内每辆车的起点和终点,
并为其选择最佳路径。我国智能交通产业经过数十年的发展,从结果上已经从探索的阶段进入到实际开发的应用阶
段,但是实际上距离我们实现交通的智能化还有更长的路。并且我国作为世界上最大的发展中国家,经过数年的发
展。中国作为地球上最大的发展中国家,交通条件为地域广阔、环境差别大等特点,再加上我国早期的交通法规