您的当前位置:首页正文

基于单片机交通灯的控制

2021-07-17 来源:步旅网


基于单片机交通灯控制

摘 要

交通控制系统是近现代社会随着物流、出行等交通发展产生的一套独特的公共管理系统。要保证高效安全的交通秩序,除了制定一系列的交通规则,还必须通过一定的科技手段加以实现。本文在对目前交通控制进行深入分析的基础上,运用检测传感、实时调整智能化控制的实现技术,将传感器监测、实时调整车辆通行时间的算法与单片机控制作用相结合,提出了基于单片机的交通控制系统设计方案。

十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。单片机的交通灯控制系统由STC89C52单片机、交通灯显示、LED倒计时、紧急处理、时间模式手动设置等模块组成。系统除基本交通灯功能外,还具有通行时间手动设置、可倒计时显示、急车强行通过、交通异常状况判别及处理等相关功能。理论证明该系统能够简单、经济、有效地疏导交通,提高交通路口的通行能力。 本设计主要做了如下几方面的工作:一是确定系统交通控制的总体设计,包括,十字路口具体的通行禁行方案设计以及系统应拥有的各项功能,二是硬件电路、显示电路等的设计和基本功能要求。三是进行软件系统的设计。对于本系统,本人采用单片机C语言编写,总体上完成了软件的编写。

关键词:单片机;STC89C52;交通灯;记时 ;

1

ABSTRACT

Traffic control system is a modern society with the logistics, travel and other transportation development of a unique set of public management system. To ensure safe and efficient traffic order, in addition to the development of a series of traffic rules, it must be through some technological means to achieve. In this paper, the current traffic control for in-depth analysis, based on the use of detection sensors, real-time adjustment to achieve intelligent control technology, sensor monitoring, real-time adjustments to traffic control algorithm and the role of single-chip combination is proposed based on microcontroller traffic control system design. Crossroads shuttle vehicles, pedestrians bustling, car dealers Drive, people walkways, orderly. Then rely on to achieve the discipline of the order then? Rely on the automatic traffic light is the chain of command.8051 by the traffic light control system 8051, traffic light display, LED countdown, traffic detection and adjustment, compliance testing, emergency treatment, time mode manually set the other modules. In addition to basic traffic light system functions, but also with the passage of time manually set, you can countdown show, emergency vehicle forced through, traffic detection and adjustment, identification and handling of traffic anomalies and other related functions. The system is able to prove the theory is simple, economic, efficient flow of traffic, improve traffic intersection traffic capacity. This design made the following main aspects: First, determine the overall traffic control system design, including, specific passage forbidding intersection design and the system should have the function, and second, the sensor hardware circuits, display circuit design and basic functional requirements. Third, the software system design. for this system, I used the MCU assembly language, the overall completion of the software was written. Key words: SCM ;traffic lights; STC89C52; timing; detection

2

目 录

1. 概述 .......................................................................................................................................... 1

1.1 单片机交通控制系统的选题背景................................................................ 1 1.2 单片机交通控制系统选题的现实意义........................................................ 1 1.3 国内外研究现状及其发展............................................................................ 3

1.3.1 国内外交通控制技术 ....................................................................... 3 1.3.2 交通控制存在的问题........................................................................ 3 1.4 单片机交通控制系统主要研究的内容 ....................................................... 4

2. 单片机交通控制系统总体设计 .............................................................................................. 5

2.1单片机交通控制系统通行方案设计............................................................. 5 2.2 单片机交通控制系统的功能要求 ............................................................... 6

2.2.1 倒计时显示 ....................................................................................... 7 2.2.2 时间手动设置 ................................................................................... 7 2.2.4 紧急处理 ........................................................................................... 7 2.3 单片机交通控制系统的基本构成及原理 ................................................... 7

3. 系统硬件电路的设计 .............................................................................................................. 8

3.1 系统硬件总电路构成及原理 ....................................................................... 8

3.1.1 系统硬件电路构成 ........................................................................... 8 3.1.2 系统工作原理 ................................................................................... 8 3.2 单片机的选择 ............................................................................................... 9

3.2.1 单片机的概述 ................................................................................... 9 3.2.2 STC89C52RC芯片的主要性能 .......................................................... 9 3.2.3 STC89C52RC芯片的内部结构框图 .................................................. 9 3.2.4 STC89C52RC芯片最小系统 ............................................................ 10 3.3硬件介绍及连接........................................................................................... 11

3.3.1 八段LED数码管.............................................................................. 11 3.3.2其它器件 .......................................................................................... 13

4.系统软件程序的设计 ............................................................................................................... 14

4.1程序主体设计流程....................................................................................... 14

3

4.2 系统软件的理论基础知识 ......................................................................... 15

4.2.1 定时器原理...................................................................................... 15 4.2.2 软件延时原理.................................................................................. 16 4.2.3 中断原理 ......................................................................................... 16 4.3 子程序模块设计.......................................................................................... 16

4.3.1 按键扫描程序.................................................................................. 16 4.3.2 状态灯显示 ..................................................................................... 18 4.3.3 LED倒计时显示 .............................................................................. 19 4.3.4红绿灯时间调整程序 ...................................................................... 20 4.3.5消抖动程序 ...................................................................................... 21 4.4 系统软件调试 ............................................................................................. 22

4.4.1 TKS仿真器 ...................................................................................... 22 4.4.2 集成开发环境KEIL ........................................................................ 22 4.4.3 系统软件调试.................................................................................. 23

5. 结论 ......................................................................................................................................... 24 参考文献 ...................................................................................................................................... 25 致 谢 .......................................................................................................................................... 26 附录: .......................................................................................................................................... 27

4

1. 概述

1.1 单片机交通控制系统的选题背景

随着人口快速的增多,交通工具的爆炸性的发展,以及道路资源的有限性,交通控制就应运而生,在人类的生活、工作环境中,交通扮演着极其重要的角色,人们的出行都无时不刻与交通打着交道。自18世纪工业革命以来,工业发展带动整个交通运输的发展,从而催生了单独的交通控制学问与管理机构。

交通控制系统是近现代社会随着物流、出行等交通发展产生的一套独特的公共管理系统。要保证高效安全的交通秩序,除了制定一系列的交通规则,还必须通过一定的技术手段加以实现。现代人类科学技术,特别是电子科学技术的发展和成熟能比较好的解决系统建立中硬软件方面要求的技术难题。目前,交通控制方面的研究能完全实现自动智能化,甚至将整个区域整合成一个统一的系统范围,还能根据正常时段以及特定突发时段的情况进行科学的自动调整。

交通对于社会的工业经济和人们的生活生产中有着十分重要的意义。随着单片机和传感技术的迅速发展,自动检测领域发生了巨大变化,交通自动监测控制方面的研究有了明显的进展,并且必将以其优异的性能价格比,逐步取代传统的交通控制措施。

1.2 单片机交通控制系统选题的现实意义

城市道路交通自动控制系统的发展是以城市交通信号控制技术为前导,与汽车工业并行发展的。在其各个发展阶段,由于交通的各种矛盾不断出现,人们总是尽可能地把各个历史阶段当时的最新科技成果应用到交通自动控制中来,从而促进了交通自动控制技术的不断发展。

早在1850年,城市交叉口处不断增长的交通就引发了人们对安全和拥堵的关注。世界上第一台交通自动信号灯的诞生,拉开了城市交通控制的序幕,1868年,英国工程师纳伊特在伦敦威斯特敏斯特街口安装了一台红绿两色的煤气照明灯,用来控制交叉路口马车的通行,但一次煤气爆炸事故致使这种交通信号灯几乎销声匿迹了近半个世纪。1914年及稍晚一些时候,美国的克利夫兰、纽约和

1

芝加哥才重新出现了交通信号灯,它们采用电力驱动,与现在意义上的信号灯已经相差无几。1926年英国人第一次安装和使用自动化的控制器来控制交通信号灯,这是城市交通自动控制的起点。

早期的交通信号灯使用“固定配时”方式实行自动控制,这种方式对于早期交通流量不大的情况曾起过一定的作用。但随着汽车工业的发展、交通流量增加、随机变化增强,采用以往那种单一模式的“固定配时”方式已不能满足客观需要,于是一种多时段多方案的信号控制器开始出现并逐步取代了传统的只有一种控制方案的控制器。

20世纪30年代初,美国最早开始用车辆感应式信号控制器,之后是英国,当时使用的车辆检测器是气动橡皮管检测器。车辆感应控制器的特点是它能根据检测器测量的交通流量来调整绿灯时间的长短,使绿灯时间更有效地被利用,减少车辆在交叉口的时间延误,比定时控制方式有更大的灵活性。车辆感应控制的这一特点刺激了车辆检测器技术的发展。继气动橡皮管式检测器之后,雷达、超声波、光电、地磁、电磁、微波、红外以及环形线圈等检测器相继问世。当今在城市道路交通自动控制、交通监测和交通数据采集系统中,应用最广的是环形线圈车辆检测器。超声波检测器主要在日本等少数国家得到广泛应用。

计算机技术的出现为交通控制技术的发展注入了新的活力,更是实现了以一个城市或者更大地域,而非简单的一个路口的交通总体控制系统。1952年,美国科罗拉多州丹佛市首次利用模拟计算机和交通检测器实现了对交通信号机网的配时方案自动选择式信号灯控制,而加拿大多伦多市于1964年完成了计算机控制信号灯的实用化,建立了一套由IBM650型计算机控制的交通信号协调控制系统,成为世界上第一个具有电子数字计算机城市交通控制系统的城市。这是道路交通控制技术发展的里程碑。

可以说,在近百年的发展中,道路交通信号控制系统经历了手动到自动,从固定配时到灵活配时,从无感应控制到有感应控制,从单点控制到干线控制,从区域控制到网络控制的长远过程。

交通控制研究的发展,旨在解决人类交通因需求的增多而日益繁重带来的问题,局限于道路建设的暂时不足和交通工具的快速增长,就要使更多的车辆安全高效的利用有限的道路资源,避免因无序和抢行等无控制原因造成的不必要阻塞

2

甚至瘫痪,另外,针对整个交通线路车辆的多少实时调整和转移多条线路的分流也十分必要。

交通网络是城市的动脉,象征着一个城市的工业文明水平。交通关系着人们对于财产,安全和时间相关的利益。具有优良科学的交通控制技术对资源物流和人们出行都是十分有价值的,保证交通线路的畅通安全,才能保证出行舒畅,物流准时到位,甚至是生命通道的延伸。

1.3 国内外研究现状及其发展 1.3.1 国内外交通控制技术

当前世界各国广泛使用的最具代表性却有实施的城市道路交通信号控制系统有英国的TRANSYT与SCOOTS交通控制系统和澳大利亚的SCATS系统。

在信号机的发展历程中,自适应理论一直受到各研究机构的欢迎,比如上面所述的SCOOTS和SCATS系统。最近几年,国外仍偏向于引进自适应理论来对交通信号控制系统进行研制,特别是美国有十几个大学或研制机构正在研制自适应交通信号控制系统,具有代表性的有美国亚利桑那大学研制的RHODES。

我国交通领域的发展起步较晚,基本是从新中国建国之后,随着各方面的条件的成熟以及社会发展的要求,才建立及健全交通控制系统的。

城市交通是一个高度综合而又复杂的问题,必须从政策,机构,体制,管理,收费价格,基础设施建设和投资各个方面同时入手解决。我国城市经济和社会的高速发展使得社会对交通的需求急剧增加。也对此提出了严峻的挑战,一句城市发展的规划,建设以及运行原照,在广泛借鉴和吸取国外先进经验的基础上,建立并完善适合我国国情的城市交通系统

1.3.2 交通控制存在的问题

我国城市交通运输的现状和存在的问题,借鉴国外城市交通管理的先进经验,强调建立城市交通管理体制的重要性,提出加强城市交通研究的交通规划,建立稳定的交通基础设施建设的资金出道,实行公交优先政策,建立先进的交通信息系统等对策。

3

随着城市机动车增长速度的加快。1994年卧轨城市机动车保有量已接近500完辆。20世纪90年代以来,经济的发展加快,从1985年到1995年,机动车增长率达13%左右,近几年更是增多。

然而,在此同时,城市道路建设规模也在加大,我国城市普遍存在道路密度,道路面积率偏低的问题,这是我国城市哟其是大城市有机的一个重要原因。我国城市道路的密度只有6.8km每平方千米,而在20世纪80年代,世界发达国家就已到达20km每平方千米。20世纪90年代,我国部分城市道路面积率,北京为5.9%,上海为6.4%,而国外东京为13.8%,巴黎为25%,普遍高于我国。近几年,国家虽不断加大城市道路建设的力度,但仍赶不上车辆的增长速度,且与世界其他国家相比,差距仍很大。

出租车以及公交的发展运营情况并不尽如人意,虽然车辆和线路长度增长,但运营速度成了瓶颈,新增的运力被运输效率低下所抵消。

交通管理方面水平还欠发展,随着交通需求越来越旺盛,而我国城市中小交通管理和交通安全的现代化设施却做得不足。在车辆,道路和交通管理系统,城市交通信号控制系统,城市交通管制中应用人工智能技术,信息 采集和信息提供技术等方面都与发达国家有很大差距。近几年,虽然有部分城市研究和引进一些国外先进的交通信号管理系统,但是由于交通管理设施不足等原因,我国交通事故率居高不下。城市车流行驶速度逐年下降,目前不少城市交通运量年年增长,但运输速度普遍下降,这都源于交通通行不佳。

1.4 单片机交通控制系统主要研究的内容

基于整个交通控制系统的发展情况,本设计主要进行如下方面的研究:用智能,集成,且功能强大的单片机芯片为控制中心,设计出一套十字路口的交通控制系统,以指挥该路口的实时通行状态。

本设计主要做了如下几方面的工作:

一是确定系统交通控制的总体设计,包括十字路口具体的通行禁行方案设计以及系统应拥有的各项功能,在这里,本设计除了有信号灯状态控制能实现基本的交通功能,还增加了倒计时显示提示,基于实际情况,紧急状况处理和键盘可设置等强大功能。

4

二是进行硬件电路,显示电路等的设计对各器件的选择及连接,大体分配各个器件及模块的基本功能要求。

三是进行软件系统设计,对本系统,本人采用单片机C语言编写,对单片机内部结构和工作情况做了充足的研究,了解定时器,中断以及延时原理,总体上完成了软件的编写。

2. 单片机交通控制系统总体设计

2.1单片机交通控制系统通行方案设计

设在十字路口,分为东西向和南北向,在任一时刻只有一个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向对换。其具体状态如下图所示。说明:黑色表示亮,白色表示灭。交通状态从状态1开始变换,直至状态6然后循环至状1,周而复始,即如图2.1所示:

图2.1 交通状态

5

状态一:东西方向红灯灭,同时绿灯亮,南北方向黄灯灭,同时红灯亮,倒计时20秒。此状态下,东西向禁止通行,南北向允许通行。

状态二:东西方向绿灯灭,同时黄灯亮,南北方向红灯亮,倒计时5秒。此状态下,除了已经正在通行中的其他所以车辆都需等待状态转换。

状态三:南北方向红灯灭,同时绿灯亮,东西方向黄灯灭,同时红灯亮,倒计时20秒。此状态下,东西向允许通行,南北向禁止通行。

状态四:南北方向绿灯灭,同时黄灯亮,东西方向红灯亮,倒计时5秒。此状态下,除了已经正在通行中的其他所以车辆都需等待状态转换。

下面我们可以用图表表示灯状态和行止状态的关系如下:

表2.1 交通状态及红绿灯状态

东西向 南北向 东西红灯 东西黄灯 东西绿灯 南北红灯 南北绿灯 南北黄灯 状态1 禁行 通行 1 0 0 0 1 0 状态3 等待变换 等待变换 1 0 0 0 0 1 状态4 通行 禁行 0 0 1 1 0 0 状态6 等待变换 等待变换 0 1 0 1 0 0 表2.1 交通状态及红绿灯状态

东西南北四个路口均有红绿黄3灯和数码显示管2个,在任一个路口,遇红灯禁止通行,转绿灯允许通行,之后黄灯亮警告行止状态将变换。状态及红绿灯状态如表2.1所示。说明:0表示灭,1表示亮。

2.2 单片机交通控制系统的功能要求

本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示,车流量检测及调整,交通违规处理和紧急处理等功能。

6

2.2.1 倒计时显示

倒计时显示可以提醒驾驶员在信号灯灯色发生改变的时间、在“停止”和“通过”两者间作出合适的选择。驾驶员和行人普遍都愿意选择有倒计时显示的信号控制方式,并且认为有倒计时显示的路口更安全。倒计时显示是用来减少驾驶员在信号灯色改变的关键时刻做出复杂判断的1种方法,它可以提醒驾驶员灯色发生改变的时间,帮助驾驶员在“停止”和“通过”两者间作出合适的选择 。

2.2.2 时间手动设置

可以通过键盘进行手动设置,增加了人为的可控性,避免自动故障和意外发生,并再紧急状态下,可设置所有灯变为红灯。键盘是单片机系统中最常用的人机接口,一般情况下有独立式和行列式两种。前者软件编写简单,但在按键数量较多时特别浪费I/0口资源,一般用于按键数量少的系统。后者适用于按键数量较多的场合,但是在单片机I/0 口资源相对较少而需要较多按键时,此方法仍不能满足设计要求。本系统要求的按键控制不多,且I/0口足够,可直接采用独立式。

2.2.4 紧急处理

交通路口出现紧急状况在所难免,如特大事件发生,救护车等急行车通过等,我们都必须尽量允许其畅通无阻,毕竟在这种情况下是分秒必争的,时时刻刻关系着公共财产安全,个人生死攸关等。由此在交通控制中增设禁停按键,就可达到想此目的。

2.3 单片机交通控制系统的基本构成及原理

单片机设计交通灯控制系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行。当然,接入LED数码管就可以显示倒计时以提醒行使者,更具人性化。

键盘设置模块对系统输入模式选择及具体通行时间设置的信号,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到LED数

7

码管上实时显示。在此过程中还要实时捕捉违规检测和紧急按键信号,以达到对异常状态进行实时控制的目的。急停按键和违规检测随时调用中断。

在模式选择上,若为自动模式,将到达一定时间将修正通行时间一满足不同路况的需要。

3. 系统硬件电路的设计

3.1 系统硬件总电路构成及原理

实现本设计要求的具体功能,可以选用STC89C52RC单片机及外围器件构成最小控制系统,12个发光二极管分成4组红绿黄三色灯构成信号灯指示模块,两个两位共阴数码管构成倒计时显示模块,若干按键组成时间设置和紧急按钮等。

3.1.1 系统硬件电路构成

本系统以单片机为核心,状态灯,LED显示,按键。其具体的硬件电路总图如图3.1所示。

其中P0,P2,用于送显两片LED数码管,P1用于控制红绿黄发光二极管,XTAL1和XTAL2接入晶振时钟电路,REST引脚接上复位电路,P3.2接东西禁止通行键,P3.3接南北禁止通行键,P3.0接调时方向切换键,P2.7调完确认键,P1.6调整倒计时加1键, P1.7调整倒计时减1键。

3.1.2 系统工作原理

系统上电或手动复位之后,系统显示状态灯及LED数码管,将状态码值送显P0口,将要显示的时间值的个位和十位分别送显P2.0__2.3口,在此同时以50ms为周期,用软件方法计时1秒,到达1s就要将时间值减1,刷新LED数码管。

时间到达一个状态所要全部时间,则要进行下一状态判断及衔接,并装入次状态的相应状态码值以及时间值,

8

3.2 单片机的选择 3.2.1 单片机的概述

单片微型计算机简称单片机,又称微控制器,嵌入式微控制器等,属于第四代电子计算机。它把中央处理器、存储器、输入/输出接口电路以及定时器/计数器集成在一块芯片上,从而具有体积小、功耗低、价格低廉、抗干扰能力强且可靠性高等特点,因此,适合应用于工业过程控制、智能仪器仪表和测控系统的前端装置。正是由于这一原因,国际上逐渐采用微控制器(MCU)代替单片微型计算机(SCM)这一名称。“微控制器”更能反映单片机的本质,但是由于单片机这个名称已经为国内大多数人所接受,所以仍沿用“单片机”这一名称。 单片机的主要特点有:

1)具有优异的性能价格比。 2)集成度高、体积小、可靠性高。 3)控制功能强。

3.2.2 STC89C52RC芯片的主要性能

芯片STC89C52RC是宏晶公司生产的带2K字节快闪存储器的8位单片 机。它具有如下的一些特性:

1.指令和89C51产品兼容 8.内含2K字节可重复编程快闪存储器 2.耐久性1,000写/擦除周期 9. 2.7V~6V的工作电压范围 3.全静态操作0Hz~24MHz 10.二级程序存储器加锁 4.内含128*8位内部RAM 11.15根可编程I/0引线 5.2个16位的计数器/定时器 12.6个中断源

6.带有可编程串行通讯口 13.可直接驱动LED输出 7.片内模拟电压比较器 14.低功耗空载和掉电方式 另外,该单片机还具有体积小,价格低等特点。

3.2.3 STC89C52RC芯片的内部结构框图

STC89C52RC是一带有2K字节快闪可编程可擦除存储体(EEPROM)的低电压、高性能8位CMOS微型计算机。它采用ATMEL的高密非易失存储技术制造并和

9

工业标准MCS—51指令集和引脚结构兼容。通过在单块芯片上组合通用的CPL1和快闪存储器,ATMEL公司生产的STC89C52RC是一强劲的微型计算机,它对许多嵌入式控制的应用,提供了一种高度灵活和成本低的解决办法。图3.2为STC89C52RC的内部结构框图。

图3.2 STC89C52RC内部结构图

3.2.4 STC89C52RC芯片最小系统

一个最简单的单片机系统包括晶振、复位、电源、系统的输入控制、输出显示,以及其他外围模块(如通信、数据采集等)。

(1)时钟电路

首先介绍一下单片机的晶振电路,即时钟电路。单片机的工作流程,就是在

10

系统时钟的作用下,一条一条地执行存储器中的程序。单片机的时钟电路由外接的一只晶振和两只起振电容,以及单片机内部的时钟电路组成,晶振的频率越高,单片机处理数据的速度越快,系统功耗也会相应增加,稳定性也会下降。单片机系统常用的晶振频率有6MHz、11.0592MHz、12MHz、本系统采用11.0592MHz晶振,电容选22pF或30pF均可。

(2)复位电路

系统刚上电时,单片机内部的程序还没有开始执行,需要一段准备时间,也就是复位时间。一个稳定的单片机系统必须设计复位电路。当程序跑飞或死机时,也需要进行系统复位。复位电路有很多种,有上电复位,手动复位等。

(3) EA脚的功能及接法

单片机的EA脚控制程序从内部存储器还是从外部存储器读取程序。由于现在单片机内部的flash容量都很大,因此基本都是从内部的存储器读取程序,即不需要外接ROM来存储程序,因此,EA脚必须接高电平。

本设计中复位方式采用上电复位方式,时钟采用外部时钟。

3.3硬件介绍及连接 3.3.1 八段LED数码管

LED显示屏作为大型显示设备的一种,具有亮度高、价格低、寿命长、维护简便等优点。LED数码管的结构简单,分为七段和八段两种形式,也有共阳和共阴之分。以八段共阳管为例,它有8个发光二极管(比七段多一个发光二极管,用来显示sP,即点),每个发光二极管的阳极连在一起,如图3.6所示。这样,一个LED数码管就有I根位选线和8根段选线,要想显示一个数值,就要分别对它们的高低电平来加以控制。为方便起见,本文主要讨论共阳八段LED数码显示管,其他类形的显示管与其类似。

11

图3.6 LED数码管

LED 灯的显示原理:通过同名管脚上所加电平的高低来控制发光二极管是否点亮而显示不同的字形,如 dp,g,f,e,d,c,b,a全亮显示为8,采用共阳极连接驱动代码,代码表如下表3.1所示。

3.1 驱动代码表

显示数值 0 1 2 3 4 5 6 7 8 9 dp,g,f,e,d,c,b,a 11010000 11111001 10100100 10110000 10011001 10010010 10000010 11111000 10000000 10010000 驱动代码 C0H F9H A4H B0H 99H 92H 82H F8H 80H 90H 相应在程序软件上,可以通过调用程序给定的秒值经过特定计算算出需要显示的个位和十位,然后有DPTR调取LEDMAP的代码。

LED8段数码管的设置为每个方位上的一对2为显示器。四个方位上总共用8个LED接在单片机的IO口上。虽然路口不一样,但是显示的时间在数字上是一样的,所以两边连接的IO口是对称的。

12

3.3.2其它器件

(1)发光二极管

根据本设计的特点,红绿灯的显示不可少,红绿灯的显示采用普通的发光二极管。每个方向上设置红绿黄灯,总共4组。如果东西红灯亮,那南北方向就是绿灯亮,反之亦然,所以在硬件上连接图上也是对称分布的。

(2)按键控制

本设计设置了有6个键如下图,,个按键一端接地。低电平有效,当按键按下端口接地,单片机捕获到低电平,从而知道相应的输入信息。如下图3.10所示。

13

图3.10 按键示意图

4.系统软件程序的设计

4.1程序主体设计流程

全部控制程序实际上分为若干模块:键盘设置处理程序,状态灯控制程序,LED显示程序,消抖动延时程序,次状态判断及处理程序,紧停或违规判断程序,中断服务子程序,车流量计数程序,红绿灯时间调整程序等。

整个软件程序方面主要分两大部分:按键处理程序和50ms扫描程序。流程图如图4.1所示。

图4.1 系统总流程图

14

首先是按键处理程序,89C52通过对IO扫描,确定是否有键按下,再判断具体是那个键按下,根据键值跳转到按键处理程序。若想重新设置则要按下复位键。设置过后进入50ms扫描程序。

50ms扫描程序开始后,先刷新显示模块,若为自动模式则接下来要计数车流量,然后扫描紧停信号和违规信号,若捕获则调用中断,中断服务子程序主要启动蜂鸣器,直至恢复键按下。50ms已到则重新扫描。扫描20次之后计时到达1s则时间数据减1,在显示模块中修改显示缓冲区内容。然后调用红绿灯时间调整程序,更新红绿灯时间。当前状态时间已到,则判断其状态装入相应数据,然后进入下一状态。

4.2 系统软件的理论基础知识 4.2.1 定时器原理

定时器工作的基本原理其实就是给初值,让它不断加1直至减完为模值,这个初值是送到TH和TL中的。它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值,即所要求的计数值设定为C,把计数初值设定为TC 可得到如下计算通式:

TC=M-C

式中,M为计数器模值。计数值并不是目的,目的是时间值,设计1次的时间,即定时器计数脉冲的周期为T0,它是单片机系统主频周期的12倍,设要求的时间值为T,则有C=T/T0。计算通式变为:

T=(M-TC)T0

模值和计数器工作方式有关。在方式0时M为8192;在方式1时M的值为65536;在方式2和3为256。就此可以算出各种方式的最大延时。如单片机的主脉冲频率为12MHZ,经过12分频后,若采用方式0最大延时只有8.129毫秒,采用方式1最大延时也只有65.536毫秒。这就是为什么扫描周期为50ms的原因, 若使用软件则会耽搁程序流程,显然不可行。相反,时间计时方面却不可能只用计数器,因为显然1秒钟已经超过了计数器的最大定时间,所以我们还必须采用定时器和软件相结合的办法才能解决这个问题。

15

4.2.2 软件延时原理

MCS-51的工作频率为12MHZ,机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12MHZ)=1us。我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间,但同时由于单片机的运行速度很快其他的指令执行时间可以忽略不计。

我们设定一个初值为20的软件计数器和使T0定时50毫秒。这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。为零表示1秒已到。设定定时器需要定时50毫秒,故T0必须工作于方式1。

4.2.3 中断原理

本系统主要使用了外部中断,中断信号有引脚INT0和INT1输入,低电平有效,CPU每个时钟周期都会检测INT0和INT1上的信号,单片机允许外部中断以电平方式或负边沿方式两种中断方式输入中断请求信号,可由用户通过设置TCON中IT0和IT1位的状态来实现。以IT0为例,IT0=0,为电平触发方式,IT0=1,为负边沿触发方式,本设计采用电平方式,IE0为其中断标志位,有中断信号则置位,中断服务子程序响应后,IE0自动清零。IE中的EA为允许中断的总控制位,为1开启,EX0为外部中断允许控制位,为1开启。

在优先级的允许下,一旦有外部中断信号产生,单片机CPU首先保护断点,PC值进栈,然后执行相应的中断服务子程序,执行完后,用RETI指令返回,此时CPU会从堆栈中取保存的断点地址,送回PC,程序再正常执行。

4.3 子程序模块设计

4.3.1 按键扫描程序

首先程序不断扫描按键,对应IO端口的P3.0,P3.1,P3.2, P2.7 P1.6 P1.7低电平有效,按键顺序是指定的,然后进入下一程序。

程序的开始要判断是否有键按下,与值为1则表示没有键按下,为0则表示有键按下。

程序如下:

16

void key_to1() {

TR0=0; //关定时器 if(set==0)

set_timenb++; //南北加1S else

set_timedx++; //东西加1S if(set_timenb==100) set_timenb=1; if(set_timedx==100)

set_timedx=1; //加到100置1 sec_nb=set_timenb ; sec_dx=set_timedx; }

void key_to2() {

TR0=0; //关定时器 if(set==0)

set_timenb--; //南北减1S else

set_timedx--; //东西减1S if(set_timenb==0) set_timenb=99; if(set_timedx==0 )

set_timedx=99; //减到1重置99 sec_nb=set_timenb ; sec_dx=set_timedx; }

void key_to3() //键盘处理之紧急车通行

//设置的数值赋给东西南北

//设置的数值赋给东西南北

17

{ TR0=0; P1=0Xf6; sec_dx=00; sec_nb=00; }

void int0(void) interrupt 0 using 1 { TR0=0; P1=0XF3; sec_dx=00; sec_nb=00; int0_time=1; }

void int1(void) interrupt 2 using 1 { TR0=0; P1=0XDE; sec_nb=00; sec_dx=00; int0_time=1; }

//南北强行 //东西强行

4.3.2 状态灯显示

在本设计中,实际控制的灯只有6个,即:东西红灯,东西绿灯,东西黄灯,南北红灯,南北绿灯,南北黄灯。定义IO端口如下,其中均是低电平有效。

sbit Yellow_nb=P1^4; sbit Yellow_dx=P1^1; sbit Green_nb=P1^5; sbit Green_dx=P1^2;

18

//南北黄灯 //东西黄灯

各LED亮灭状态程序如下:

void time0(void) interrupt 1 using 1 //定时中断子程序 { b++;

if(b==19) // 定时器中断次数 {b=0; sec_dx--; sec_nb--;

if(sec_nb<=5&&time==0) //东西黄灯闪 { Green_dx=1;Yellow_dx=!Yellow_dx;} if(sec_dx<=5&&time==1) //南北黄灯闪 { Green_nb=1;Yellow_nb=!Yellow_nb;} if(sec_dx==0&&sec_nb==5) sec_dx=5;

if(sec_nb==0&&sec_dx==5) sec_nb=5;

if(time==0&&sec_nb==0)

{ P1=0xDE;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5;} if(time==1&&sec_dx==0)

{P1=0Xf3;time=!time;sec_dx=set_timedx;sec_nb=set_timedx+5;} } }

4.3.3 LED倒计时显示

具体程序如下: void display() {

buf[1]=sec_dx/10; //第1位 东西秒十位 buf[2]=sec_dx%10; //第2位 东西秒个位 buf[3]=sec_nb/10; //第3位 南北秒十位

19

buf[0]=sec_nb%10; //第4位 南北秒个位 P2=0xff; P0=0x00;

P2=0xfe;

//片选LCD1

// 初始灯为灭的

P0=table[buf[1]]; delay(1); P2=0xff; P0=0x00;

P2=0xfd;

P0=table[buf[2]]; delay(1); P2=0xff; P0=0x00; P2=0Xfb;

P0=table[buf[3]]; delay(1); P2=0xff; P0=0x00; P2=0Xf7;

P0=table[buf[0]];

delay(1); }

4.3.4红绿灯时间调整程序

void key_to1() {

TR0=0; //关定时器

if(set==0)

set_timenb++; //南北加1S else

20

片选LCD2 片选LCD3 片选LCD4 // // //

set_timedx++; //东西加1S if(set_timenb==100) set_timenb=1; if(set_timedx==100)

set_timedx=1; //加到100置1 ec_nb=set_timenb ; sec_dx=set_timedx; }

void key_to2() {

TR0=0; //关定时器 if(set==0)

set_timenb--; //南北减1S else

set_timedx--; //东西减1S if(set_timenb==0) set_timenb=99; if(set_timedx==0 )

set_timedx=99; //减到1重置99 sec_nb=set_timenb ; sec_dx=set_timedx; }

//设置的数值赋给东西南北

//设置的数值赋给东西南北

4.3.5消抖动程序

另外,在按键计数的过程中,还存在机械抖动与软件方面的矛盾,即当程序检测到了有按键按下,则会计一次数,但是实际上,按键闭合后在微观上还会弹起,然后闭合,一直到达稳定,显然后面的弹落是无效的,为了使程序避免这个问题,可以在检测到首次闭合时,调用一定时间的延时程序。此处延时程序完全用软件完成,利用程序执行一条指令的时间,再加上两次累减嵌套,程序如下:

void delay(int ms)

21

{

uint j,k;

(j=0;j4.4 系统软件调试 4.4.1 TKS仿真器

仿真的概念其实使用非常广,最终的含义就是使用可控的手段来模仿真实的情况。单片机系统开发中的仿真包括软件仿真和硬件仿真。

软件仿真这种方法主要是使用计算机软件来模拟实际的单片机运行,因此仿真与硬件无关的系统具有一定的优点。用户不需要搭建硬件电路就可以对程序进行验证,特别适合于偏重算法的程序。软件仿真的缺点是无法完全仿真与硬件相关的部分,因此最终还要通过硬件仿真来完成最后的设计;

硬件仿真使用附加的硬件来替代用户系统的单片机并完成单片机全部或大部分的功能。使用了附加硬件后用户就可以对程序的运行进行控制,例如单步、全速、查看资源断点等。

4.4.2 集成开发环境KEIL

KEIL IDE Vision2集成开发环境主要由以下部分组成:

◆ u Vision2 IDE。ision2 IDE包括:一个工程管理器,一个功能丰富并有交互式错误提示的编辑器选项设置生成工具,以及在线帮助。使用vision2创建源文件并组成应用工程加以管理。vision2可以自动完成编译汇编链接程序的操作;

◆ C51编译器和A51汇编器。Vision2 IDE创建的源文件可以被C51编译器或A51汇编器处理生成可重定位的object文件。KEIL C51编译器遵照ANSI C语言标准支持C语言的所有标准特性,另外还增加了几个可以直接支持80C51结构的特性。KEIL A51宏汇编器支持80C51及其派生系列的所有指令集;

◆ LIB51库管理器。B51库管理器可以从由汇编器和编译器创建的目标文件建立目标库,这些库是按规定格式排列的目标模块,可在以后被链接器所使用当

22

链接器处理一个库时仅仅使用了库中程序使用了的目标模块而不是全部加以引用;

◆BL51链接器定位器。L51链接器使用从库中提取出来的目标模块和由编译器汇编器生成的目标模块创建一个绝对地址目标模块,绝对地址目标文件或模块包括不可重定位的代码和数据所有的代码和数据都被固定在具体的存储器单元中。

利用KEIL开发和调试系统软件流程大致如下: ◆启动Vision2,进入KEIL软件的集成开发环境;

◆利用KEIL内置的文本编辑器进行程序源文件的编辑,因为KEIL集成的文本编辑器对中文支持不是很好,可以选择其他的编辑器(本文使用的文本编辑器是Ultraedit—32),Vision2能够自动识别外部改变了的源文件;

◆建立工程,指定针对哪种单片机进行开发,指定对源程序的编译、链接参数,指定调试方式(本文采用外部硬件仿真器仿真调试的方式,即使TKS仿真器仿真),然后对工程进行相关设置;

◆设置好工程后即可进行编译、链接。连接仿真器对软件进行调试。也可以生成下载到单片机存储器上的HEX文件。

4.4.3 系统软件调试

系统的软件调试借助于TKS仿真器,在进行系统软件的连续调试之前要先进行软件的初调,就是要使各个子程序模块运行正确,程序的运行流程正确。软件调试主要分以下几个步骤进行:

◆功能子程序的调试。能子程序的调试包括运算、采样、数字滤波以及PID运算等子程序的调试。在调试功能子程序时,许多参数都是未知的,要根据其所需的条件,给出假定的数据,使其运行,如果能完成预定的处理功能或与手工计算的结果相符,就说明该子程序己调试通过。调试时由小到大,由里到外。例如,调试PID算法子程序时,先调通其包含的各个运算子程序和参数处理子程序,然后将它们连起来进行通调。通调时,也是假定一些数据、参数和初始条件,然后运行程序。当运算结果与手工计算的结果相同时,该算法子程序则调试完成,反之,就要进行相应的修改。其它子程序的调试同理;

◆程序流程的调试。序流程的调试主要是查看程序运行的步骤是否正确,在

23

某时刻程序运行所处的位置是否正确,是否能正确运行各个中断服务程序。在调试过程中,先将PID算法子程序屏蔽,输出可控硅导通时间用一个固定的常数代替,在各个中断服务子程序设置断点,然后运行程序,查看程序是否能运行到所有的断点,若所有断点都能运行到,则程序流程基本正确。去掉所有断点,再一次运行程序,查看可控硅状态,从而判断程序流程正确,反之,若程序流程不正确,做相应的修改后,重新调试;

◆功能程序与算法程序的通调。完成整个程序流程的调试后,将PID等算法子程序加入,在算法子程序前或后设置断点,运行整个程序。当程序在断点处暂停时,查看PID计算的控制量与手工计算的值是否相同。多运行几次,若每次的结果都正确,则说明程序各个部分互相没有矛盾,反之,则说明算法子程序和其它子程序之间有影响,需要做相应的修改后重新调。

5. 结论

交通灯控制在交通运输领域有着非常重要的作用。本文完成了基于单片机的交通灯控制系统的设计与模拟。包括通行方案的设计,系统的硬件开发、软件编程与仿真调试等。在论文完成过程中,主要做的工作有:

(1)确定交通系统具体的通行方案,规定东西向和南北向车辆的行止状态和时间分配,以及要求其他多功能的实现。

(2)以ATMEL公司的AT89C52单片机为核心进行系统硬件设计,输入量包括:车流量,按键状态和违规检测传感信号;输出控制交通信号灯亮灭状态及时间,以及LED数码管倒计时显示。

(3)在车流量检测系统中采用模糊控制方法,这需要知道被控对象的数学模型,进行清晰化,具体化。因此,必须实施调查确定车流量少,中,多所要求的具体数量,然后经过单片机控制器的相关算法及处理确定红绿灯亮灭时间。 (4)采用汇编对系统的软件编程,在开发过程中可使用了TKS仿真器,这些都大大缩短了软件的开发周期。为了便于编写、调试、修改和增删,系统软件的编制采用了模块化的设计方法。

24

参考文献

[l]边海龙,孙永奎. 单片机开发与典型工程项目实例详解[J].电子工业出版社,2008,(10):143-160.

[2]王为青,邱文勋. 51单片机开发案例精选[J].人民邮电出版社,2001,(5):45-47.

[3]张鑫,华臻,陈书谦. 单片机原理及应用[J].电子工业出版社,2008(5). [4]张洪润,张亚凡.单片机原理及应用[J]. 清华大学出版社,2005,(4). [5]黄智伟.凌阳单片机课程设计指导[J]. 北京航空航天大学出版社,2007,(6) [6]蒋辉平,周国雄. 基于Proteus的单片机系统设计与仿真实例[M].机械工业出版社,2009.

[7]张毅坤. 单片微型计算机原理及应用,[M]西安电子科技大学出版社 1998 [8]余锡存 曹国华.单片机原理及接口技术[M].陕西:西安电子科技大学出版社,2000.7

[9]雷丽文 等.微机原理与接口技术[M].北京:电子工业出版社,1997. [10]陈大钦 电子技术基础实验 [M].北京:高等教育出版社 2004 [11]陈梓城 电子技术实训 [M].北京:机械工业出版社 2003 [12]吴黎明 单片机原理及应用技术[M].北京:科学出版社 2003

[13]李学海 标准80C51单片机基础教程[M].北京: 北京航空航天大学出版社 2006

25

[14]刘乐善 微型计算机接口技术及应用[M].北京: 华中科技大学出版社 2004 [15] 陈炳权 曾庆六 EDA技术实用教程[M].北京: 湘潭大学出版社 2010 [16] 先锋工作室. 单片机程序实例[M].北京:清华大学出版社,2002. [17] 李伯成.基于MCS-51单片机的嵌入式系统的设计[M].北京:电子工业出版

社,2004.

[18] 吴洪潭,肖艳萍,赵伟国.单片机原理及应用系统设计[M].北京:国防工业出版社,2005.

[19] 吴黎明, 王桂棠, 洪添胜, 等. 单片机原理及应用技术[ M ] . 北京: 科学出版社,2005.

致 谢

三年的学习生活即将结束,回顾三年的学习生活,感受颇深,收获丰厚。在论文的写作过程中,有很多困难,无论是在理论学习阶段,还是在论文的选题、资料查四询、开题、研究和撰写的每一个环节,无不得到导师的悉心指导和帮助。借此机会我向导师表示衷心的感谢!同时,我要感谢授课的各位老师,正是由于他们的传道、授业、解惑,让我学到了专业知识,并从他们身上学到了如何求知治学、如何为人处事。同时我也要感谢我的同学给予我的帮助,他们为我撰写论文提供了不少建议和帮助。最后,还要感谢我的家人和那些永远也不能忘记的朋友,他们的支持与情感,是我永远的财富。

26

附录:

源程序: #include #include #define uchar unsigned char #define uint unsigned int sbit k1=P1^6; sbit k2=P1^7; sbit k3=P2^7; sbit k4=P3^0; sbit k5=P3^4;

sbit Yellow_nb=P1^4; sbit Yellow_dx=P1^1; sbit Green_nb=P1^5; sbit Green_dx=P1^2;

uchar code table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

//南北黄灯 //东西黄灯 //禁止

27

uchar data dig; //位选 uchar data led; //偏移量 uchar data buf[4];

uchar data sec_dx=20;//东西数码指示值 uchar data sec_nb=30;//南北数码指示值 uchar data set_timedx=20;

uchar data set_timenb=30;//倒计时设置的键值保存 int n;

uchar data b;//定时器中断次数 bit time;//灯状态循环标志 bit int0_time;//中断强行标志 bit set;//调时方向切换键标志 void delay(int ms);//延时子程序 void key();//按键扫描子程序 void key_to1();//键处理子程序 void key_to2(); void key_to3();

void display();//显示子程序 void logo(); //开机LOGO void main() {

EX0=1;

TMOD=0X01; TH0=0XD8; TL0=0XF0; EA=1; ET0=1; TR0=1;

28

EX1=1;

logo();

P1=0Xf3;// 东西通行

sec_nb=sec_dx+5; while(1) { key(); //调用按键扫描程序

display(); //调用显示程序

}

}

void key() //按键扫描子程序 { if(k1!=1) { delay(10); if(k1!=1) { while(k1!=1); {

key_to1(); for(n=0;n<40;n++)

{ display();}

} }

} if(k2!=1) { delay(10);

if(k2!=1)

29

}

{ }

while(k2!=1); { key_to2(); for(n=0;n<40;n++) { display();} }

if(k3!=1) { } {

delay(10); if(k4!=1) { }

while(k4!=1); set=!set;

TR0=1; //启动定时器

sec_nb=set_timenb; //从中断回复,仍显示设置过的数值 sec_dx=set_timedx; if(time==0)

{ P1=0XDE;sec_nb=sec_dx+5; } else { P1=0xF3;sec_dx=sec_nb+5; }

if(k4!=1)

} if(k5!=1) { delay(5);

30

}

if(k5!=1) {

while(k5!=1) } }

key_to3();

void display() {

buf[1]=sec_dx/10; //第1位 东西秒十位 buf[2]=sec_dx%10; //第2位 东西秒个位 buf[3]=sec_nb/10; //第3位 南北秒十位 buf[0]=sec_nb%10; //第4位 南北秒个位 P2=0xff;

// 初始灯为灭的

P0=0x00;

P2=0xfe; P0=table[buf[1]];

delay(1); P2=0xff;

//片选LCD1

P0=0x00;

P2=0xfd; P0=table[buf[2]]; delay(1);

P2=0xff;

//片选LCD2

P0=0x00;

P2=0Xfb;

//片选LCD3

P0=table[buf[3]]; delay(1); P2=0xff;

P0=0x00;

31

}

P2=0Xf7; P0=table[buf[0]]; delay(1);

//片选LCD4

void time0(void) interrupt 1 using 1 //定时中断子程序 {

b++; if(b==19) {

b=0; sec_dx--; sec_nb--;

if(sec_nb<=5&&time==0) //东西黄灯闪

// 定时器中断次数

{ Green_dx=1;Yellow_dx=!Yellow_dx;}

if(sec_dx<=5&&time==1) //南北黄灯闪

{ Green_nb=1;Yellow_nb=!Yellow_nb;} }

void key_to1() {

32

if(sec_dx==0&&sec_nb==5) sec_dx=5;

if(sec_nb==0&&sec_dx==5) sec_nb=5;

if(time==0&&sec_nb==0)

{ P1=0xDE;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5;} if(time==1&&sec_dx==0)

{P1=0Xf3;time=!time;sec_dx=set_timedx;sec_nb=set_timedx+5;} }

}

TR0=0; //关定时器 if(set==0)

set_timenb++; //南北加1S else

set_timedx++; //东西加1S if(set_timenb==100)

set_timenb=1;

if( set_timedx==100)

set_timedx=1; //加到100置1

sec_nb=set_timenb ; //设置的数值赋给东西南北 sec_dx=set_timedx;

void key_to2() { }

33

TR0=0; //关定时器 if(set==0)

set_timenb--; //南北减1S else

set_timedx--; //东西减1S if(set_timenb==0)

set_timenb=99;

if( set_timedx==0 )

set_timedx=99; //减到1重置99

sec_nb=set_timenb ; //设置的数值赋给东西南北 sec_dx=set_timedx;

void key_to3() //键盘处理之紧急车通行 {

TR0=0; P1=0Xf6; }

void int0(void) interrupt 0 using 1 //东西强行 { }

void int1(void) interrupt 2 using 1 //南北强行 { }

void logo()//开机的Logo \"- - - -\" { for(n=0;n<200;n++) {

34

sec_dx=00; sec_nb=00;

TR0=0; P1=0XF3; sec_dx=00; sec_nb=00; int0_time=1;

TR0=0; P1=0XDE; sec_nb=00; sec_dx=00; int0_time=1;

P0=0x40; P2=0xfe;

delay(1);

P2=0xfd; delay(1); P2=0Xfb; delay(1); P2=0Xf7;

delay(1);

P2 = 0xff; }

}

void delay(int ms) { uint j,k;

for(j=0;j35

因篇幅问题不能全部显示,请点此查看更多更全内容