首页 基于单片机的交通灯设计

基于单片机的交通灯设计

举报
开通vip

基于单片机的交通灯设计摘 要 根据STC10F04单片机的特点及交通灯在实际控制中的特点,本文提出一种用单片机自动控制交通灯及时间显示的方法。同时给出了软硬件设计方法,设计过程包括硬件电路设计和程序设计两大步骤,对在单片机应用中可能遇到的重要设计问题都有涉足。本文对十字路口状态预设为三种,一种是正常状态,一种是紧急状态,另一种是方程式状态。增设路段遇忙调整时方程式控制状态和紧急情况处理模块,通过手动控制开关按钮A0和A1方便系统在正常状态和紧急状态、方程式控制间来回切换,进一步完善了交通灯控制系统。并分别用红、黄、绿灯的不同组合来指挥...

基于单片机的交通灯设计
摘 要 根据STC10F04单片机的特点及交通灯在实际控制中的特点,本文提出一种用单片机自动控制交通灯及时间显示的方法。同时给出了软硬件设计方法,设计过程包括硬件电路设计和程序设计两大步骤,对在单片机应用中可能遇到的重要设计问题都有涉足。本文对十字路口状态预设为三种,一种是正常状态,一种是紧急状态,另一种是方程式状态。增设路段遇忙调整时方程式控制状态和紧急情况处理模块,通过手动控制开关按钮A0和A1方便系统在正常状态和紧急状态、方程式控制间来回切换,进一步完善了交通灯控制系统。并分别用红、黄、绿灯的不同组合来指挥两个方向通车与禁行,用LED数码管作为倒计时指示,实时的控制当前交通灯时间使LED显示器进行倒计时工作并与状态灯保持同步,在保持交通安全的同时最大限度的提高交通能顺畅交替运行。本文介绍了控制基本原理以及控制的表现,同时,论述了系统中交通现状、交通管理、交通规则及背景信息。 关键词:自动控制,时间显示器,外部中断,延时,方程式控制 Abstract According to the characteristics of single-chip STC10F04 and traffic lights in the actual control of the characteristics of this paper, a single-chip automatic control with traffic lights and the method of time display. At the same time, given the hardware and software design methodology, design process, including the hardware circuit design and program design two major steps in the single-chip applications that may be encountered in the design of the important issues are involved. In this paper, the default state of the crossroads for three, one is the normal state is a state of emergency, and the other is a state formula. Additional sections of busy status adjustment formula and an emergency control module Through the manual control switch button convenience A0 and A1 system in the normal state and a state of emergency, the equation between the control switch back and forth, and further improve the traffic light control system. And were red, yellow and green light to direct different combinations of traffic in both directions and cut-line, with LED digital tube as a countdown to the instructions, real-time control of the current time for traffic lights to LED countdown display work and to keep pace with the state of light in the to maintain safety while minimizing the increase in traffic to alternate running smoothly. This paper introduces the basic principles of control, as well as the performance of control at the same time, traffic on the system status, traffic management, traffic regulations and background information. Key words: automatic control; time display; external interrupt; delay; control equation 目 录 1摘 要 2Abstract 3目 录 41 绪论 41.1 交通灯研究的背景和意义 41.2 交通灯国内外发展概况 72 系统工作原理及设计 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 72.1 交通灯的工作原理 72.2 交通灯总体设计方案 113 硬件系统设计 113.1 硬件系统组成 113.1.1 单片机最小系统 153.1.2 信号显示驱动电路 163.1.3 键盘输入电路 184 交通灯系统详细设计 184.1 软件总体设计思想 204.2 交通控制算法实现 214.3 系统初始化模块 224.4信息显示模块 224.4.1 信号灯模块 264.4.2 LED倒计时显示子程序 294.5键盘扫描模块 375 调式总结 386 致 谢 39参考文献 40附 录 40附录一 程序清单 48附录二 交通灯PCB图 49附录三 交通灯电路原理图 1 绪论 1.1 交通灯研究的背景和意义 交通是城市经济活动的命脉,对城市经济发展、人民生活水平的提高起着十 分重要的作用。城市交通问题是困扰城市发展、制约城市经济建设的重要因素。 城市道路增长的有限与车辆增加的无限这一对矛盾是导致城市交通拥挤的根本原因。城市街道网络上的交通容量的不断增加,表明车辆对道路容量的要求仍然很高,短期内还不可能改变。自从开始使用计算机控制系统后,不管在控制硬件里取得什么样的实际进展,交通控制领域的控制逻辑方面始终没能取得重大突破。 可以肯定的说,对于减轻交通拥塞及其副作用一特别是对于大的交通网络而言,仍然缺乏一种真正的交通响应控制策略。计算机硬件能力与控制软件能力很不相符,由此造成的影响是很多交通控制策略根本不能实现。在少数几个例子中,一些新的控制策略确实能得以实现,但他们却没能对早期的控制策略进行改进。由于缺乏能提高交通状况、特别是缺乏拥塞网络交通状况的实时控制策略,几乎可以说真正成熟的控制策略仍然不存在.智能化和集成化是城市交通信号控制系统的发展趋势和研究前沿,而针对交通系统规模复杂性特征的控制结构和针对城市交通瓶颈问题并代表智能决策的阻塞处理则是智能交通控制优化管理的关键和突破口。因此,研究基于智能集成的城市交通信号控制系统具有相当的学术价值和实用价值。把智能控制引入到城市交通控制系统中,未来的城市交通控制系统才能适应城市交通的发展。从长远来看该研究具有巨大的现实意义。 1.2 交通灯国内外发展概况 随着经济的发展,城市现代化程度不断提高,交通需求和交通量迅速增长,城市交通网络中交通拥挤日益严重,道路运输所带来的交通拥堵、交通事故和环境污染等负面效应也日益突出,逐步成为经济和社会发展中的全球性共同问题。交通问题已经日益成为世界性的难题,城市交通事故、交通阻塞和交通污染问题愈加突出。为了解决车和路的矛盾,常用的有两种方法:一是控制需求,最直接的办法就是限制车辆的增加;二是增加供给,也就是修路。但是这两个办法都有其局限性。交通是社会发展和人民生活水平提高的基本条件,经济的发展必然带来出行的增加,而且在我国汽车工业正处在起步阶段的时期,因此限制车辆的增加不是解决问题的好方法。而采取增加供给,即大量修筑道路基础设施的方法,在资源、环境矛盾越来越突出的今天,面对越来越拥挤的交通,有限的源和财力以及环境的压力,也将受到限制。这就需要依靠除限制需求和提供道路设施之外的其他方法来满足日益增长的交通需求。 交通系统正是解决这一矛盾的途径之一。智能交通系统是将先进的信息技术、数据通讯传输技术、电子传感技术、电子控制技术及计算机处理技术等有效的集成运用于整个地面交通管理系统而建立的一种在大范围内、全方位发挥作用的实时、准确、高效的综合交通运输管理系统。对城市交通流进行智能控制,可以使道路畅通,提高交通效率。合理进行交通控制可以对交通流进行有效的引导和调度,使交通保持在一个平稳的运行状态,从而避免或缓和交通拥挤状况,大大提高交通运输的运行效率,还可以减少交通事故,增加交通安全,降低污染程度,节省能源消耗,本文就是通过对交叉路口交通信号的智能控制,达到优化路口交通流的目的 进入20世纪70年代,随着计算机技术和自动控制技术的发展,以及交通流理论的不断完善,交通运输组织与优化理论和技术水平不断提高,控制手段越来越先进,形成了一批商水平有实效的城市道路交通控制系统。早在1977年,Pappis等人就将模糊控制运用到交通控制上,通过建立规则库或是专家系统对各种交通状况进行模糊控制,并取得了很好的效果。近年来,欧美日本等相继建立了智能交通控制系统。在这些系统中,大部分都在路口附近安装磁性环路检测器,还使用了新型检测器等技术和设备。这些现代化设备技术加上控制理论和现代化科学管理技术,使得交通控制系统日益完善。随着一些研究控制理论的学者投身到交通控制的研究中,在交通信号控制领域提出了一些新方法、新思路。如静态多段配时控制、准动态多段配时控制、最优控制、大系统递阶控制、模糊控制、神经网络控制,网络路由控制等。模糊交通控制已经成为了交通信号控制的主流方向之一。国内外很多学者都进行了此类研究。 交通系统作为一个时变的、具有随机性的复杂系统,传统的人为设定多种方案或是建立各种预测模型均比较困难。城市交通控制研究的起源比较早。1868年,英国伦敦燃汽信号灯的问世,标志着城市交通控制的开始。1913年,在美国俄亥俄州的Cleveland市出现了世界上最早的交通信号控制。1926年美国的芝加哥市采用了交通灯控制方案,每个交叉口设有唯一的交通灯,适用于单一的交通流。从此,交通控制技术和相关的控制算法得到了发展和改善,提高了交通控制的安全性、有效性,并减少了对环境的影响。 虽然模糊控制能有效处理模糊信息,但是产生的规则比较粗糙,利用规则表查表进行控制,运算速度虽然比较快,但没有自学习功能。而且这些研究有些以相序固定为前提。不能保证相序与实际交通流状况的一致性,影响了绿灯时间的利用率。有些研究则提出了可变相序的模糊控制方法,提高了绿灯时间的利用率,弥补了相序固定的缺点,但同时也存在一些不足。例如目前应用比较好的交通系统:SCOOT(经典交通系统),他们都是主要采用统计模型和经典算法。但城市交通系统是一个复杂的、随机性很强的巨型系统,要想建立实用性较强的 数学 数学高考答题卡模板高考数学答题卡模板三年级数学混合运算测试卷数学作业设计案例新人教版八年级上数学教学计划 模型是十分困难。利用模糊控制智能控制技术进行交叉口信号灯控制能取得比定时控制与感应控制更好的效果,是今后单交叉路口信号灯控制的主要研究方向。 2 系统工作原理及设计方案 2.1 交通灯的工作原理 采用单片机的I/O口P1、P2和P3.6、P3.7直接和交通灯连接,P0、P4口通过限流电阻和三极管接LED数码管。控制程序放在STC10F04单片机的ROM中,在十字路口的四组红、黄、绿交通灯中,由单片机P1.0-P1.7,P2.0-P2.7和P3.6、P3.7控制,由于交通灯为发光二极管且阳极通过限流电阻和电源正极连接,因此I/O口输出低电平时,与之相连的相应指示灯会亮,并通过LED数码管显示时间倒计时。I/O输出高电平时,相应指示灯会灭。紧急车请求通过的信号由人工控制,以中断方式输入单片机,无紧急车通过时,中断引脚INT0(P3.2)通过电阻和电源正极连接为高电平,不产生中断,单片机执行主程序,有紧急车通过时,中断引脚INT0(P3.2)采用人工方法接地为低电平,产生中断请求,单片机执行中断服务程序,让紧急车通过,紧急车通过后,中断引脚INT0(P3.2)变为高电平,返回主程序。方程式控制通过的信号由人工控制,以中断方式输入单片机,不需调整周期时,中断引脚INT1(P3.3)通过电阻和电源正极连接为高电平,不产生中断请求,单片机执行主程序,当车辆多需要增加主干道通车时间时,中断引脚INT1(P3.3)采用人工方法接地为低电平,产生中断请求,单片机执行中断服务程序,系统以方程式控制,按一次开关按钮A1执行方程式A,按两次开关按钮A1时执行方程式B,按三次开关按钮A1时执行方程式C。当按四次时,中断引脚为高电平,返回主程序。 2.2 交通灯总体设计方案 目前设计交通灯的方案有很多,有应用CPLD实现交通信号灯控制器的设计,有应用PLC实现对交通灯控制系统的设计。有应用单片机实现对交通信号灯设计的方法。由于STC10F04单片机自带有2个计数器,6个中断源,能满足系统的设计要求。用单片机设计不但设计简单,而且成本低。用其设计的交通灯也满足了要求,所以本文采用单片机设计交通灯。 设计一个十字路口交通灯控制电路,根据设定好的周期时间能够指挥车辆在十字路口完成左转和直行交替运行。在相同的时间里提高通车的质量、效率。并能在高峰期根据实际状况结合方程式控制按钮来调整主次干道的通车时间,降低交通拥挤堵塞现象。并使交通控制系统具有紧急控制,使救护车、救护车通过时, 使两个方向均亮红灯,救护车和消防车通过后,恢复原来状态,增加对出现特殊情况的处理能力。 采用STC10F04单片机作为控制器,通行倒计时显示采用LED数码管,通行指示灯采用发光二极管,LED显示采用动态扫描,以节省端口数。特殊紧急车辆通行采用实时中断完成。车流量变大时,可通过方程式开关控制按钮A1改变十字路口各个方向的通车时间,使交通更顺畅,减少堵塞。按以上系统构架设计,STC10F04单片机端口刚好满足要求。该系统具有电路简单,设计方便,耗电较少,可靠性高等特点。 紧急情况用外部中断INT0控制,紧急情况结束后,再发一个终端来恢复以前的状态。方程式控制开关按钮由外部中断INT1来控制,当不同时段,车流量增加的程度不一样时,可通过方程式控制按钮开关的A、B、C三个状态来选择合适的周期。 (1)各个方向除了要有红、黄、绿灯指示外,每一种灯亮的时间都用数码管显示器进行显示(采用倒计时的方法)。 (2)正常状态下主干道通车时间为35s,次干道通车时间为20s。 (3)车流量增大时通过方程式控制按钮手动控制延长主干道通车时间,有三个方程式,分别为A、B、C方程。 (4)红、绿信号灯转换时,需亮3s的黄灯作为过渡,以使行驶中的车辆有时间停靠到禁行线以外。 (5)特殊状态的功能显示,进入特殊状态时(如119救火车,或120救护车通过时),则东西、南北方向均显示红灯状态 1)显示器闪烁; 2)计数器停止计数并保护数据; 3)东西、南北路口均显示红灯状态; 4)特殊状态结束后,恢复现场数据继续控制十字路口; S0:南方向绿灯亮,东、西、北三个方向亮红灯35秒。 S1:南方向的绿灯灭,东、西方向的红灯继续亮,同时南、北两个方向的黄灯亮3秒。 S2:南北方向的黄灯灭。南方向红灯亮,东、西两个方向红灯继续亮,同时北方向绿灯亮持续35秒。 S3: 北方向的绿灯灭。南方向继续红灯亮,同时北方向跟东、西方向黄灯亮持续3秒。 S4:东西北三个方向黄灯灭。北方向红灯亮,同时东、西方向绿灯亮持续20秒。 S5:东西方向绿灯灭。北方向继续红灯亮,同时东西南三个方向黄灯亮持续3秒。 出现特殊情况时(如119救火车,或120救护车通过时)按下按钮A0进入状态S7,两个方向都亮起红灯,持续10秒。特殊车顺利通过后,恢复原状态。 上下班高峰期时可按下按钮A1进行相应的调整。总共有A、B、C三种方程式控制,具体如下: 1)按一次A1开关按钮时,系统以A方程式来控制交通灯系统。南北两个方向的通车时间延长15秒,即50秒。东西方向通车时间不变,为20秒。 2)按两次A2开关按钮时,系统以B方程式控制交通灯系统。南北两个方向的通车时间延长25秒,即为60秒。东西方向的通车时间延长10秒,即为30秒。 3)按两次A2开关按钮时,系统以C方程控制交通灯系统。南北两个方向的通车时间不变,还是为35秒。东西两个方向的通车时间延长15秒,即为35秒。 表2.1 状态表 状态 南方向 北方向 东西方向 有效时间状态 红 黄 绿 红 黄 绿 红 黄 绿 S0 1 1 0 0 1 1 0 1 1 35 S1 1 0 1 1 0 1 0 1 1 3 S2 0 1 1 1 1 0 0 1 1 35 S3 0 1 1 1 0 1 1 0 1 3 S4 0 1 1 0 1 1 1 1 0 20 S5 1 0 1 0 1 1 1 0 1 3 S6 1 1 0 0 1 1 0 1 1 35 S7 0 1 1 0 1 1 0 1 1 10 S8 1 1 0 0 1 1 0 1 1 A50 S9 1 0 1 1 0 1 0 1 1 A3 S10 0 1 1 1 1 0 0 1 1 A50 S11 0 1 1 1 0 1 1 0 1 A3 S12 0 1 1 0 1 1 1 1 0 A20 S13 1 0 1 0 1 1 1 0 1 A3 S14 1 1 0 0 1 1 0 1 1 A50 S15 1 1 0 0 1 1 0 1 1 B60 S16 1 0 1 1 0 1 0 1 1 B3 S17 0 1 1 1 1 0 0 1 1 B60 S18 0 1 1 1 0 1 1 0 1 B3 S19 0 1 1 0 1 1 1 1 0 B30 S20 1 0 1 0 1 1 1 0 1 B3 S21 1 1 0 0 1 1 0 1 1 B60 S22 1 1 0 0 1 1 0 1 1 C35 S23 1 0 1 1 0 1 0 1 1 C3 S24 0 1 1 1 1 0 0 1 1 C35 S25 0 1 1 1 0 1 1 0 1 C3 S26 0 1 1 0 1 1 1 1 0 C35 S27 1 0 1 0 1 1 1 0 1 C3 S28 1 1 0 0 1 1 0 1 1 C35 注:(1)0表示灯亮,1表示灯灭。 (2)主干道为南北方向,次干道为东西方向。 (3)任何时候南北两个方向的直行信号灯跟左转信号灯状态都一样,只有三个状态: 1)直行跟左转同时通行,为绿灯。 2)直行跟左转同时为黄灯。 3)直行跟左转同时禁行,为红灯。 (4)东西两个方向都是只能直行,且任何时候状态都一样,要么同为红灯,要么同为绿灯,且时间都是同步的。 3 硬件系统设计 3.1 硬件系统组成 3.1.1 单片机最小系统 单片机的最小系统包括电源(地),晶振(一般使用11.0592M或者12M),复位电路,单片机内装入程序。有了以上三块内容,单片机就能够工作了。另外要注意的一点是,EA(31脚)也要接高电平,即接到电源+5V。告诉单片机不使用片外存储器,这样单片机系统才会老老实实地执行你烧写进去的程序。下图3.1就是单片机最小系统示意图: 图3.1 最小系统电路图 STC10F04单片机是单时钟/机器周期(IT)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成高可靠复位电路,针对高速通信,智能控制,强干扰场合。 STC10F04单片机的定时器0 /定时器1/串行口与传统8051兼容,增加了独特波特率发生器,省去了定时器2。传统8051的1111条指令执行速度全面提速,最快的指令快24倍,最慢的指令快3倍。 1、 增强型8051 CPU,1T,单时钟,机器周期,指令代码完全兼容传统8051 2、 工作电压:5.5V~3.8/3.3V 3、 工作频率范围 :0~35MHz,相当于普通8051的0~420MHz 4、 应用程序空间: 4K字节 5、 RAM:256字节 6、 通用I /O(40/36个),复位后为:准双向口/弱上拉(普通8051传统I/O)可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过100mA 7、 ISP(在系统可编程)/IAP(在应用可编程),无需专用编辑器,无需专用仿真器,可通过串口(RXD/P3.0,TXD/P3.1)直接下载用户程序,数秒即可完成一片 8、 看门狗 9、 内部集成MAX810专用复位电路(晶体频率在 24MHz以下时,要选择高的复位门槛电压,如4.1V以下复位,晶体频率在12MHz以下时,可选择低的复位门槛电压,如3.7V以下复位,复位脚接1K电阻到地) 10、 内置一个对内部Vcc进行掉电检测的掉电检测电路,可设置为中断或复位,5V单片机掉电检测门槛电压为4.1/3.7V附近 11、 时钟源:外部高精度晶体/时钟,内部R/C振荡器,用户在下载程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟.常温下内部R/C振荡器频率为:4MHz~8MHz.精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准 12、 2个16位定时器(与传统8051兼容的定时器 /计数器,16位定时器T0和T1) 13、 3个时钟输出口,可由T0的溢出在P3.0/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟 14、 外部中断I/O口有5路,支持传统的下降沿中断或低电平触发中断。Power down(掉电)模式可由外部中断唤醒,INT0/P3.2, INT1/P3.3, INT/TO/P3.4, INT/T1/P3.5, INT/Rxd/P3.0(或INT/Rxd/P1.6) STC10F04单片机采用了40Pin封装的双列直接DIP结构,如图3.2是它们引脚配置 图3.2 STC10F04引脚配置 40个引脚中正电源和地线两根,外置石英震荡器的时钟线两根,共有36个I/O。 ·VCC:电源电压 ·GND:地 ·P0口:P0口是一组8位漏极开路型双向I/0口,也即地址/数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“l”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。 ·P1口:Pl 是一个带内部上拉电阻的8位双向I/O口,Pl的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“l”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。Flash编程和程序校验期间,Pl接收低8位地址。 ·P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX@Ri 指令)时,P2 口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。 ·P3 口:P3 口是一组带有内部上拉电阻的8 位双向I/0 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对P3口写入“l”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/0口线外,更重要的用途是它的第二功能,如下表3.1所示: 表3.1具有第二功能的P1口引脚 端口引脚 第二功能: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外中断0) P3.3 / INT1(外中断1) P3.4 T0(定时/计数器0外部输入) P3.5 T1(定时/计数器1外部输入) P3.6 / WR(外部数据存储器写选通) P3.7 / RD外部数据存储器读选通) P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。 ·RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。WDT 溢出将使该引脚输出高电平,设置SFR AUXR的DISRT0 位(地址8EH)可打开或关闭该功能。DISRT0位缺省为RESET输出高电平打开状态。 ·ALE/EQ \* jc0 \* "Font:宋体" \* hps20 \o(\s\up 11(————),PROG):当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE 仍以时钟振荡频率的1/6 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对F1ash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。 ·EQ \* jc0 \* "Font:宋体" \* hps16 \o(\s\up 11(————),PSEN)程序储存允许(EQ \* jc0 \* "Font:宋体" \* hps16 \o(\s\up 11(————),PSEN))输出是外部程序存储器的读选通信号,当AT89S51 由外部程序存储器取指令(或数据)时,每个机器周期两次EQ \* jc0 \* "Font:宋体" \* hps16 \o(\s\up 11(————),PSEN)有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的EQ \* jc0 \* "Font:宋体" \* hps16 \o(\s\up 11(————),PSEN)信号。 ·EQ \* jc0 \* "Font:宋体" \* hps16 \o(\s\up 11(——),EA)/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。F1ash存储器编程时,该引脚加上+12V的编程电压Vpp。 ·XTAL1:振荡器反相放大器及内部时钟发生器的输入端。 ·XTAL2:来自反向振荡器的输出。 振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 3.1.2 信号显示驱动电路 图3.3 三极管电路图 三极管放大作用是通过小电流控制大电流晶体三极管是一种电流控制元件。发射区与基区之间形成的PN结称为发射结,而集电区与基区形成的PN结称为集电结。晶体三极管按材料分常见的有两种:锗管和硅管。而每一种又有NPN和PNP两种结构形式,使用最多的是硅NPN和PNP两种,两者除了电源极性不同外,其工作原理都是相同的,三极管工作在放大区时,三极管发射结处于正偏而集电结处于反偏,集电极电流Ic受基极电流Ib的控制,Ic 的变化量与Ib变化量之比称作三极管的交流电流放大倍数β(β=ΔIc/ΔIb, Δ表示变化量。)在实际使用中常常利用三极管的电流放大作用,通过电阻转变为电压放大作用。三极管是电流放大器件,有三个极,分别叫做集电极C,基极B,发射极E。分成NPN和PNP两种。我们仅以NPN三极管的共发射极放大电路为例来说明一下三极管放大电路的基本原理。 图3.4 三极管放大电路原理图 下面的分析仅对于NPN型硅三极管。如上图3.4所示,我们把从基极B流至发射极E的电流叫做基极电流Ib;把从集电极C流至发射极E的电流叫做集电极电流Ic。这两个电流的方向都是流出发射极的,所以发射极E上就用了一个箭头来表示电流的方向。三极管的放大作用就是:集电极电流受基极电流的控制(假设电源能够提供给集电极足够大的电流的话),并且基极电流很小的变化,会引起集电极电流很大的变化,且变化满足一定的比例关系:集电极电流的变化量是基极电流变化量的β倍,即电流变化被放大了β倍,所以我们把β叫做三极管的放大倍数(β一般远大于1,例如几十,几百)。如果我们将一个变化的小信号加到基极跟发射极之间,这就会引起基极电流Ib的变化,Ib的变化被放大后,导致了Ic很大的变化。如果集电极电流Ic是流过一个电阻R的,那么根据电压计算公式U=R*I可以算得,这电阻上电压就会发生很大的变化。我们将这个电阻上的电压取出来,就得到了放大后的电压信号了。 3.1.3 键盘输入电路 单片机键盘有独立键盘和矩阵式键盘两种:独立键盘每一个I/O 口上只接一个按键,按键的另一端接电源或接地(一般接地),这种接法程序比较简单且系统更加稳定;而矩阵式键盘式接法程序比较复杂,但是占用的I/O少。根据本设计的需要这里选用了独立式键盘接法。 独立式键盘的实现方法是利用单片机I/O口读取口的电平高低来判断是否有键按下。将常开按键的一端接地,另一端接一个I/O 口,程序开始时将此I/O口置于高电平,平时无键按下时I/O口保护高电平。当有键按下时,此I/O 口与地短路迫使I/O 口为低电平。按键释放后,单片机内部的上拉电阻使I/O口仍然保持高电平。我们所要做的就是在程序中查寻此I/O口的电平状态就可以了解我们是否有按键动作了。 在用单片机对键盘处理的时候涉及到了一个重要的过程,那就是键盘的去抖动。这里说的抖动是机械的抖动,是当键盘在未按到按下的临界区产生的电平不稳定正常现象,并不是我们在按键时通过注意可以避免的。这种抖动一般10~200毫秒之间,这种不稳定电平的抖动时间对于人来说太快了,而对于时钟是微秒的单片机而言则是慢长的。为了提高系统的稳定,我们必须去除或避开它。目前的技术有硬件去抖动和软件去抖动,硬件去抖动就是用部分电路对抖动部分加之处理,但是实现的难度较大又会提高了成本。软件去抖动不是去掉抖动,而是避抖动部分的时间,等键盘稳定了再对其处理。所以这里选择了软件去抖动,实现法是先查寻按键当有低电平出现时立即延时10~200毫秒以避开抖动(经典值为20毫秒),延时结束后再读一次I/O 口的值,这一次的值如果为1 表示低电平的时间不到10~200 毫秒,视为干扰信号。当读出的值是0时则表示有按键按下,调用相应的处理程序。硬件电路如图3.4所示: 图3.5 键盘控制电路图 4 交通灯系统详细设计 4.1 软件总体设计思想 本程序由主程序,定时中断子程序和外部中断子程序组成。主程序主要负责系统初始化和等待中断,定时中断子程序主要负责数码管显示刷新和红黄绿灯各种状态切换。外部中断子程序负责紧急情况处理和处理完成恢复。 STC10F04计数的起停由STC10F04的P0和P4口控制,STC10F04的P0和P4口输出1时,STC10F04开始计数,交通灯按正常状态切换工作,P0和P4口输出0时,计数器停止工作,交通灯不再按正常状态切换。STC10F04开始计数后每200ms发出一个中断申请信号,在中断子程序中先刷新数码管,然后判断当前状态,进入相应的处理程序进行处理。当有紧急情况时进入外部中断服务子程序,先让STC10F04停止计数,然后点亮所有的红灯,下一次外部中断处理时,恢复原来的交通灯状况。程序流程图如下图4.1、4.2所示: 图4.1 主程序流程图 图4.2中断子程序 4.2 交通控制算法实现 定时中断子程序是本设计的重点,负责完成数码管输出数据刷新和各个状态的处理切换。中断子程序包括数码管输出数据刷新程序和各状态处理程序。中断程序的流程图如图所示。 图4.3 定时中断流程图 定时中断服务程序在系统中的函数如下: void int_t0( ) interrupt 1 using 1 { TR0 = 0; time++; tc++; if(tc>=3) {tc=0;} if(time==100) { waittime--; } else if(time==200) { waittime--; sec--; time=0; shu0=sec%10; shu1 =sec/10; } TH0 = 0xee; TL0 = 0x00; if(tc==0) { smdis=md[shu0]; weishuang0 = 0; weishuang1 = 1; weishuang2 = 1; } else if(tc==1) { smdis=md[shu1]; weishuang0 = 1; weishuang1 = 0; weishuang2 = 1; } else if(tc==2) { smdis=md[shu2]; weishuang0 = 1; weishuang1 = 1; weishuang2 = 0; } //if(tc>=3) {tc=0;} TR0 = 1; } 我们由在主程序中设定的初值可知T0定时5毫秒.这样每当T0到5毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。在中断服务子程序中,CPU先使软件计数器加1,然后判断它是否为200。为零表示1秒已到可以返回到输出时间显示程序。并使计数器变量清0. 4.3 系统初始化模块 主程序负责系统的初始化,然后数码管数据输出显示,同时检测PC键盘按键,有按键按下就退出程序。 系统初始化包括STC10F04的初始化,定时器、外部中断向量初始化以及设置交通灯工作的初始状态。由于定时器/计数器的各种功能是由软件来确定的,所以在使用它之前,应对其进行编程初始化。初始化的主要内容是对TCON和TMOD编程,计算和装载T0和T1的计数初值。由设计要求可知,定时器T0的工作方式为1。 系统程序中主函数初始化如下: P4SW=0xff; TMOD=0x01; TH0 = 0xee; TL0 = 0x00; EA = 1; ET0 = 1; PT0=1; PX0=0; PX1=0; EX0=1; IT0=0; EX1=1; IT1=1; TR0 = 1; 单片机定时/计数器初值计算公式:T初值=2N -定时时间/机器周期时间 ,机器周期=12/fosc。根据TMOD=0X01、TH0=0xee、TL0=0x00可得出定时器工作在方式1,所以N=16。T初值=0xee00=60928 。又因为fosc=11.0592 ,所以根据上面的公式得:60928=216-定时时间/12/11.0592 最后得出定时时间=5ms。 4.4信息显示模块 4.4.1 信号灯模块 信息显示模块包括发光二极管模块和LED倒计时显示子模块。 程序中开始是先定义发光二极管的I/O口,接着设定各个状态量发光二极管的状态数组。第三,运行main主函数,调用主函数里的while循环,while循环语句再通过statusdis函数调用状态数组变量来显示各个状态下各个发光二极管的状态。其流程图如图4.4所示: 图4.4 发光二极管模块流程图 发光二极管I/O口的接法如下表4.1所示 表4.1 发光二极管I/O口的接法 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 北黄 西黄 南黄 东黄 北左黄 南左黄 南左红 南左绿 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 东绿 东红 南绿 南红 西绿 西红 北绿 北红 P3.0 P31 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 Rxd Txd 紧急按钮 方式控制按钮 未用 未用 北左红 北左绿 程序中对I/O口的定义如下: sfr jtd = 0xa0; // 交通灯的控制口,P2口 sfr jtdh= 0x90; //交通灯的控制口 ,P1口 sbit NLR = P3^6; //北向左转的红灯 sbit NLG = P3^7; //北向左转的绿灯 初始化状态数组: unsigned char S0[]={0x59, 0x7f ,0x80,35 }; unsigned char S1[]={0xdd, 0xca ,0xc0,3 }; unsigned char S2[]={0x95, 0xbf ,0x40,35 }; unsigned char S3[]={0xf7, 0xa4 ,0xc0,3 }; unsigned char S4[]={0x66,0xbf ,0x80,20 }; //unsigned char S5[]={0x7f,0xd1 ,0x80,3 }; unsigned char S5[]={0x77,0xb5 ,0x80,3 }; unsigned char S6[]={0x55, 0xbf ,0x80,10 }; 主函数main()运行while循环,while循环调用statusdis函数来实现各个状态数组。其程序如下: while(1) { //S0 //东西红灯,南绿北红 0x59 // 南左转绿灯,北左转红灯 0x60 //等待35秒 35 statusdis(S0) ; //S1 //东西红;南北黄灯 0x11 //东西红灯3秒,南北左转均为黄灯 0x00 //等待3秒 3 statusdis(S1) ; //S2 // 东西红灯,南红北绿 0x95 //南转左红灯,北转左绿灯 0x90 //等待35秒 35 statusdis(S2) ; //S3 // 东西红灯,南红北黄 0x04 //南转左红灯,北转左绿灯 0x10 //等待3秒 3 statusdis(S3) ; //S4 // 东西绿灯,南北红 0x66 //南转左红灯,北转左红灯 0x50 //等待20秒 20 statusdis(S4) ; //S5 // 东西黄灯,南红北绿 0x44 //南转左红灯,北转左红灯 0x50 //等待3秒 3 statusdis(S5) ; } Statusdis()显示控制函数程序如下: void statusdis(unsigned char *status) { sec=1+status[3]; waittime=2*sec; //time=100; while( waittime)//等待35秒 { if(flag) { flag=0; time=0; sec=1+status[3]; waittime=2*sec; } jtd=status[0]; //东西南北灯状态 jtdh=status[1]; //东西南北灯状态 //jtdl=jtdl&0x0f; //jtdl=jtdl|status[1]; //南左转,北左转灯状态 p33=status[2]; if(p33&0x40) { NLR = 1; //北向左转红灯 } else { NLR = 0; } if(p33&0x80) { NLG = 1; //北向左转绿灯 } else { NLG = 0; } dissmg(); //如果用此句,可以增强显示 } } 4.4.2 LED倒计时显示子程序 4.4.2-1 LED数码管原理 本系统采用8位的动态数码显示。控制数码显示的数据由两部分组成,一部分为笔段亮灭控制的信号输入由“A、B、C、D、E、F、G、DP”端口输入,而控制位显示的控制信号由“CS1、CS2、CS3”端口输入,同时该动态数码显示采用共阴型数码管,单片机芯片的P0口和P4口引脚构成了8位LED数码管驱动电路,P0口控制数码管的笔段显示,P4口控制数码管的位显示;共阴型数码管的笔段引脚是二极管的正极,所有二极管的负极连在一起,构成了公共端,即片选端,对于这种数码管的驱动,要求在片选端提供电流,为此,使用了PNP型三极管作为片选端的驱动,共使用8只三极管,所有三极管的发射机连在一起,接到负电源端,他们的基极则分别连到P0.0-P0.7和P4.4-P4.6。这样,当P0.0-P0.7和P4.4-P4.6中某引脚输出是高电平时,三极管不导通,不能给相应位的数码管供电,该位数码管的所有笔段都不亮,反之,如果某引脚是低电平时,三极管导通,可以给相应的数码管供电,该位数码管是否点亮,点亮哪些笔段,取决于这些笔段引脚是高或低电平。 所有8位数码管的笔段连在一起,通过先留电阻后接到P0口,因此,究竟哪些笔段亮,取决于P0口的8根线是输出高电平还是低电平。原理理图中把所有数码管的8个笔划段A-DP同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,由8个NPN的三极管,来控制这8位哪一位工作。具体的数码管电路原理图如下图4.5 图4.5 数码管电路原理图 4.4.2-2 LED数码管引脚连接 这里我们利用STC10F04单片机制作一个三位倒计时器作为一个路口的时间显示器,P0、P4口通过三极管接数码管 其各引脚接法如下表4.2。其余三个路口可照样设计,只用稍微修改程序即可。 表4
本文档为【基于单片机的交通灯设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_323864
暂无简介~
格式:doc
大小:851KB
软件:Word
页数:49
分类:工学
上传时间:2011-12-01
浏览量:17