农业电气化与自动化毕业论文.doc
新疆农业大学科学技术学院 本科生毕业设计(论文) 题 目 八车道十字路口交通灯智能控制实现 班 级 农业电气化与自动化082班 姓 名 学 号 085203231 时 间 2012 年 5 月 新疆农业大学科学技术学院 目 录 摘要………………………………………………………………………………… 1 1 概述2 1.1 设计目的2 1.2 方案比较、设计与论证2 1.2.1 电源方案2 1.2.2 复位方案3 1.2.3 硬件电路方案3 1.2.4 显示界面方案3 1.2.5 车流量控制方案3 1.3 设计任务4 2 系统总体方案及硬件设计4 2.1 交通管理的方案4 2.2 总体硬件设计6 2.3 系统晶振电路7 2.4 系统复位电路7 2.5 路灯指示电路8 2.6 车流量检测电路9 2.7 时钟电路9 2.8 电压转换电路10 2.9系统原理图11 3 软件系统设计13 3.1 设计思路及关键技术13 3.2 软件流程14 3.3 交通灯的设计程序说明15 3.4 延时函数16 3.5 各通道红绿灯状态函数16 3.6 路况红路灯状态总体显示函数19 3.7 定时器0中断函数20 3.8 外部中断1函数23 3.9 外部中断0函数23 4 Proteus软件仿真和keil软件编程的实现24 4.1 keil软件编程的实现24 4.2 Proteus软件仿真25 4.3 南北路灯切换时仿真27 4.4 高峰期车流量拥挤时仿真27 5 系统总仿真图28 6 结论30 谢 辞32 参考文献33 . 八车道十字路口交通灯智能控制实现研究综述 王建雷 指导老师:申红军 摘要:本系统采用单片机STC89C51为中心控制器来设计交通灯控制器实现智能控制十字路口交通灯的各种状态显示。 本设计系统由交通灯状态显示、LED数码显示、复位电路、时钟电路、电压转换电路、烧写电路等几大部分组成。系统集成了交通灯的显示功能,较好的模拟实现了十字路口可能出现的状况。 程序的编写在Uvision环境下,通过C51进行程序的设计,PROTUES中对此系统的电路和程序进行可视化的验证,Dxp中进行电路原理图的绘制。 关键词:电子线路; STC89C51; LED 交通灯 Review of researches on intelligent control of traffic lights at the eight - lane crossing WangJianLei Tutor:ShengHongJun Abstract:The system uses a single-chip STC89C51as the center controller to design the traffic light controller to realize the intelligent control of traffic lights at the crossroads of various state display This design by traffic light system status display, LED digital display, reset circuit, clocking circuit and voltage transform circuit, and write circuit composed of a few. System integration of the traffic lights display function, good simulation realized the crossroads scenario. The writing of the program in Uvision environment, through the design of the procedures C51, PROTUES to this in the circuit system and procedures of the visual verification, Dxp in circuit principle chart drawing Keyword : electronic circuit ;STC89C52 LED; traffic light - 35 - 1 概述 1.1设计目的 交通在人们的日常生活中占有重要的地位(3),随着人们社会活动的日益频繁,交通也成了日常生活的一部分,在交通灯出现以前,如何有效的缓解交通压力以及避免不必要的交通事故,这成了一个城市拥有良好的交通治安的前提。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。 为此我们选择交通灯这一课题作为毕业设计课题(1),通过仿真来模拟实际交通灯的工作状态,通过软件的仿真来分析实际十字路口的路况,可以通过此仿真得到实际交通灯的不足之处,为解决实际的路况,提供一种有效地手段和实现方法,此设计中我们对于车流量的检测,给出了两种方案(8),一是程序巡回检测,二是中断处理,为了达到实时性的要求,我们采用中断处理来解决这一问题。硬件上我们采用光耦来控制继电器的闭合产生中断,每有一辆车经过时,继电器闭合一次产生一次中断,计数器加1,出口处,则计数器减1.为了方便模拟,我们在PROTUES中简单的用按键闭合低电平作为中断的触发信号。 1.2方案比较、设计与论证 1.2.1电源方案 (8)为使模块稳定工作,须有可靠电源。为此我们提供三种方案 (1) 变压器供电(220V转24V稳到5V) (2) Usb接口供电 (3) 电池供电 以上三种方案比较: 变压器供电稳定,而且220V市电来源广泛,输出功率可选,对功耗不需要太多的考虑,缺点还要整流稳压。USB供电很稳定,其外部电源由其他设备提供,但是要依附于其他设备。电池供电来源也很广泛,供电很稳定,但对功耗有太大的要求,而且随着供电的时间增长,电池内阻增大,电压变小,对系统的运行产生很大的影响。 增上所述我们选择变压供电。并同时附带一个USB供电接口。 1.2.2 复位方案 复位方式有三种:按键复位、系统上电复位和软件复位。由考虑到程序的简洁,避免冗长,以及避免每次要复位要对系统就行断电上电操作所以本设计采用按键复位,在芯片的复位端口外接复位电路,通过按键对单片机输入一个一定时间高电平脉冲,达到复位的目的。 1.2.3 硬件电路方案 方案一(2):采用STC89C51外加8255扩展 I/O 口用于显示等。 该方案的优点是:使用灵活可编程,并且RAM资源对于本设计来说比较充足,及计数器。若用该方案,可提供较多I/O口,但操作起来稍显复杂。 方案二:直接在单片机IO口线上接显示电路。因为设计时精简和优化了电路,所以剩余的口资源还比较多。 因为该系统显示方面主要是数码管和LED的显示,所以只用单片机本身的I/O 口就可实现,且本身的计数器及RAM已经够用,故选择方案二 1.2.4 显示界面方案 该系统要求完成倒计时、状态灯等功能(5)。基于上述原因,我们考虑了二种方案:方案一:采用数码管及LED配合显示,LED显示红绿灯状态,数码管用于倒计时。 方案二:完全采用点阵式LED 显示。将红绿灯状态以及倒计时全部集成在点阵上显示。 较之方案一方案二要求点阵至少具有红绿黄三种颜色,而且为了显示的效果可观,点阵点数至少要12*12个,软件开销教方案一微复杂一些,故我们选用方案二作为显示方案。 1.2.5 车流量控制方案 车流量控制我们只在主车道上进行控制,支车道上我们不做此方面的控制。此车流量我们只给出一个方案,此方案是从光电耦合器的实际工作原理得到的。便于模拟,我们采用一只红外发射头和一个感光元件组成车流量测量系统,工作原理为:当没有车通过的话,红外发射头发送的光线使感光元件导通,当有车辆通过的时候,光线被车辆隔断,感光元件断开,MCU接收一个低电平中断,计数器加1,这样就可以计算通道进入车辆了,在出道口出我们也放置一个此装置。 1.3设计任务 (1) 南北道和东西道上均有车辆要求通过时,南北东西道轮流放行。南北道道放行25s,B 道放行25S。 (2)南北道,北南道,东西道,西东道上,每个通道又分为3个分车道,三个分车道的车可以根据红绿灯指示进行执行,拐弯动作。 (3)在中午12点到1点之间可通过LCD显示路况繁忙状态,且具有时间显示功能。 (4) 南北方向车道和东西方向车道一个车道放行一个车道禁行。 (5) 车流量控制功能,当车流量超过一定数量时南北车道延迟放行最多70s (6)绿灯转为红灯时,黄灯亮5秒 2 系统总体方案及硬件设计 2.1交通管理的方案 东西、南北两干道交于一个十字路口(8),各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。 (1) 当东西方向bcd为红灯时,则此通道禁止通行,a为绿灯,表示可以进行右转弯,此道车辆禁止通行;时间为25秒。如下图2-1所示: 图2-1八车道红绿灯模拟图 (2) 黄灯5秒,警示车辆红、绿灯的状态即将切换。 (3) 当东西方向为绿灯,此道车辆及人允许通行;南北方向为红灯,南北道车禁止通过。时间为25秒.如下图2-2所示: 图2-2 八车道红绿灯模拟图 (4) 这样如上表的时间和红、绿、黄出现的顺序依次出现这样车辆就能通行。 2.2总体硬件设计 整个设计以两块STC89C51(3)单片机为核心一块作为主机,一块作为从机,由数码管显示,LED数码管显示,LCD时间显示和提示电路,复位电路,电源电路等组成。如下图2-3所示: 图2-3 系统模块图 (1) 供电部分为220v转5v变压器,整流稳压后作为系统的输入电源。 (2) 系统上电,系统初始化(定时初始化,中断初始化,LCD初始化,中断优先级初始化,串行中断初始化) (3) 车流量是否大于预设值,不大于预设值,则主机向从机发送0XEE指令,且主机定时器每隔1S时间发送一次,从机每隔1S接收一次。主机红绿灯状态显示,从机倒计时显示。如果车流量大于预设值,则主机向从机发送0XAA指令,主机本身进行延时处理,从机也做相应的延时处理。 (4) 主机通过TXD口发送,从机RXD口接收。 (5) 单个复位按键,双机同时复位。 (6) 从机时钟芯片用于时间提醒,当时间到达预设时间时,则可以通过LCD显示预设值内容。 (7) 主机包括两个外部中断,减中断,加中断,用于记录当前时间的车流量。 2.3系统晶振电路 晶振采用了内部时钟信号源的方式。对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。但由于图中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,在本系统的实际应用中一定要注意正确选择参数(30±10 PF),并保证对称性(尽可能匹配)。选取原则:传统做法,但能够实现所需,即最简单也最是实用。电容选取30pF,晶振为11.0592mhz.如下图2-4和2-5所示: 图2-4 主机U4系统晶振电路 图2-5 从机U1系统晶振电路 2.4系统复位电路 复位方式有多种,本设计采用上电自动复位+按键手动复位。如下图2-6所示: 图2-6 系统复位电路 在设定的定时时间内,89C51必须在RST引脚产生一个由高到低的电平变化,以复位. 2.5路灯指示电路 在设计路灯时,采用了发光二极管代替路灯。先介绍一下二极管,见图 2-6-1。二极管工作原理是单向导通,即只有正极电压高于负极电压某特定值时才会导通,而负极电压高于正极电压是不导通的。如下图2-6所示: 图 2-7 发光二极管示意图 发光二极管是一种特殊的二极管,导通时会发光(发光二极管导通压降一般为1.7V~1.9V)。此外,工作电流要满足该二极管的工作电流。 发光二极管的正负极可以用万用表进行判断,把万用表拨至二极管档或电阻挡,用两个表笔分别接触二极管的两个引出脚。若发光二极管被点亮,则与红表笔相接的引出脚为正极。从外观上看,发光二极管的正极引脚的长度也比较长。 一般发光二极管与I/O端口之间都会再连接一个电阻,其作用在于限制通过二极管的电流,从而达到减少功耗或者满足端口对最大电流的限制。一般发光二极管的点亮电流为5mA至10mA。路灯设计时我采用了红、黄、绿三种发光二级管组。 如下图2-8所示: 图2-8 路灯设计电路 2.6车流量检测电路 此功能只在南北通道上设有,为了方便模拟,用按键代替车辆的通过,每按下按键INT0就代表一辆车通过,没按下按键INT1就代表一辆车出去,接口电路如下图所示: 图2-9 车流量按键模块 2.7时钟电路 时钟电路如下图2-10所示: 图2-10 时钟电路 DS1302是美国 DALLAS 公司推出的一种高性能、低功耗的实时 时钟芯片,附加31字节静态RAM, 采用SPI三线接口与CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电 方式,提供了对后背电源进行涓细电流充电的能力.本论文中通过时间对交通等进行控制,当12点-1点这段时间里为高峰期,此时红绿灯时间从25秒变为45秒。 2.8 电压转换电路 通过电压转换电路系统(6)可将220V转成5V。如下图2-11所示: 图2-11 电压转换电路 2.9系统原理图 系统原理图如下图2-12,2-13,2-14,2-15,2-16所示: 2.12 系统原理图 图2-13系统部分原理图1 图2-14系统部分原理图2 图2-15 系统部分原理图3 图2-16 系统部分原理图4 3 软件系统设计 3.1设计思路及关键技术 一个完整的交通灯相当于一个完整的单片机系统(1),该系统有交通灯设置电路、单片机、显示电路等构成。单片机是集成的IC芯片,只需根据实际设计要求选型。其他部分都需要根据应用要求和性能指标自行设计。首先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。再转状态3,东西绿灯通车,南北红灯。过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1。 3.2 软件流程 系统主机流程图如图3-1所示: 图3-1 整体软件设计流程图 系统从机流程图如图3-2所示 图3-2 3.3 交通灯的设计程序说明 这部分中定义了一些全局变量的数组(9)和变量以及位标志,只是些定义的东西不需要画流程图了。这部分程序如下: #include #include//包含空指令 #define uchar unsigned char #define uint unsigned int #define xx 5 //车流量拥挤下限值 sbit nb1_r=P0^0;//南北红灯 sbit nb1_y=P0^1;//南北黄灯 sbit nb1_l=P0^2;//南北绿灯 sbit nb2_r=P0^3;//东西红灯 sbit nb2_y=P0^4;//东西黄灯 sbit nb2_l=P0^5;//东西绿灯 sbit nb3_r=P0^6; sbit nb3_y=P0^7; sbit nb3_l=P2^0; sbit dx1_r=P2^1; sbit dx1_y=P2^2; sbit dx1_l=P2^3; sbit dx2_r=P2^4; sbit dx2_y=P2^5; sbit dx2_l=P2^6; sbit dx3_r=P2^7; sbit dx3_y=P3^0; sbit dx3_l=P3^6; sbit tu=P3^7; bit liuliang=0;//流量延时 bit flag1=1; bit flagfx=1; uint flow=0; uchar time=20;//循环20次为1S(每次约为50MS) uchar cishu=0; uchar x=26; uchar y=30; 3.4延时函数 延时程序如下: /////////////////////////// //1ms /////////////////////////// void delay05s()//约1ms延时 { uint i; uchar t; for(i=10;i>0;i--) { for(t=100;t>0;t--) {_nop_();} } } ////////////////////////////////////////////// ///1.5ms ///////////////////////////////////////////// void delay1s()//约1.5MS延时 { uint i; uchar t; for(i=10;i>0;i--) { for(t=150;t>0;t--) {_nop_();} } } 3.5 各通道红绿灯状态函数 显示函数如下: void nb1hong() { nb1_r=1; nb1_y=0; nb1_l=0; } void nb1huang() { nb1_r=0; nb1_y=1; nb1_l=0; } void nb1lv() { nb1_r=0; nb1_y=0; nb1_l=1; } void nb1mie() { nb1_r=0; nb1_y=0; nb1_l=0; } void nb2mie() { nb2_r=0; nb2_y=0; nb2_l=0; } void nb3mie() { nb3_r=0; nb3_y=0; nb3_l=0; } void dx1mie() { dx1_r=0; dx1_y=0; dx1_l=0; } void dx2mie() { dx2_r=0; dx2_y=0; dx2_l=0; } void dx3mie() { dx3_r=0; dx3_y=0; dx3_l=0; } void mie() { nb1mie(); nb2mie(); nb3mie(); dx1mie(); dx2mie(); dx3mie(); } void nb2hong() { nb2_r=1; nb2_y=0; nb2_l=0; } void nb2huang() { nb2_r=0; nb2_y=1; nb2_l=0; } void nb2lv() { nb2_r=0; nb2_y=0; nb2_l=1; } void nb3hong() { nb3_r=1; nb3_y=0; nb3_l=0; } void nb3huang() { nb3_r=0; nb3_y=1; nb3_l=0; } void nb3lv() { nb3_r=0; nb3_y=0; nb3_l=1; } void dx1hong() { dx1_r=1; dx1_y=0; dx1_l=0; } void dx1huang() { dx1_r=0; dx1_y=1; dx1_l=0; } void dx1lv() { dx1_r=0; dx1_y=0; dx1_l=1; } void dx2hong() { dx2_r=1; dx2_y=0; dx2_l=0; } void dx2huang() { dx2_r=0; dx2_y=1; dx2_l=0; } void dx2lv() { dx2_r=0; dx2_y=0; dx2_l=1; } void dx3hong() { dx3_r=1; dx3_y=0; dx3_l=0; } void dx3huang() { dx3_r=0; dx3_y=1; dx3_l=0; } void dx3lv() { dx3_r=0; dx3_y=0; dx3_l=1; } 3.6路况红路灯状态总体显示函数 显示函数如下: void nbtongxing()//南北通行,东西禁行 { nb1lv(); nb2lv(); nb3hong(); dx1lv(); dx2hong(); dx3hong(); } void dxtongxing()//东西通行,南北禁行 { dx1hong(); dx2lv(); dx3lv(); nb1lv(); nb2hong(); nb3hong(); } void huangdeng()//黄灯liang { dx1huang(); dx2huang(); dx3huang(); nb1huang(); nb2huang(); nb3huang(); } 3.7定时器0中断函数 定时器0中断函数如下: void timer1() interrupt 1 {TR0=0; TL0=0X00; TH0=0X4C; time--;//20次为1S if(time==0) {ES=1; TI=0; SBUF=0Xee; time=20; cishu++; if(flagfx==1) { if(cishu=x TI=0; SBUF=0Xaa; //ES=0; TR0=0; } else { ES=1; TI=0; SBUF=0Xee; //ES=0; TR0=1; } } } 流程图如下图3-4所示: 图3-4 3.9外部中断0函数 void int0() interrupt 0//进车口检测 { TR0=0; flow++; if(flow>xx) { ES=1; TI=0; SBUF=0Xaa; //ES=0; TR0=0; } else { ES=1; TI=0; SBUF=0Xee; //ES=0; TR0=1; } } 4 Proteus软件仿真和keil软件编程的实现 4.1 keil软件编程的实现 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。 C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面操作。 程序写好后,对程序进行了编译、翻译,在工程菜单栏里为工程设置选项中选择了输出HEX文件,生成HEX以便输入单片机进行仿真。图示如图4-1和图4-2所示: 图4-1 图4-2 4.2 Proteus软件仿真 Proteus软件(10)用于系统的仿真,编译软件采用keil UV4。程序的仿真用英国的labcenter公司的Protens V7.5。其果如下:加电后的结果如图4-3。此时时间已经走过一秒,南北是绿灯,东西是红灯。仿真图如下图4-3和4-4所示: 图4-3 加电后仿真 图4-4 加电后仿真 4.3 南北路灯切换时仿真 切换时,转为黄灯亮,时间为5秒钟。如图4-5所示: 图4-5 黄灯亮时仿真 4.4 高峰期车流量拥挤时仿真 此时,时间标准延长达到最小限度一下时间加上30S。如图4-6和4-7所示: 图4-6 车辆拥挤时仿真 图4-7 拥挤时仿真 5 系统总仿真图 由于仿真过大,为了避免不清楚,此处分为三个图,图4-8主机和从机仿真,图4-9电源仿真,图4-10十字路口八车道红绿灯仿真. 图4-8 主机和从机仿真 图4-9 电源仿真 图4-10 十字路口八车道红绿灯仿真 6 结论 经过几个月的努力,终于按照毕业设计进度要求如期完成了八车道十字路口交通灯智能控制实现设计任务。在做毕业设计的过程中,虽然碰到了不少的困难,但是在申老师的指导以及自己的努力下,终于取得了一定成果。 本系统就是利用了STC89C51芯片的I/O引脚。系统采用宏晶公司生产的单片机STC89C51来设计交通灯控制器,实现了红灯亮30秒,绿灯和左转绿灯各亮25秒。同时设置红、绿灯燃亮的功能和控制来实现在七段数码管上的时间显示;为了系统稳定可靠系统内集成了“看门狗”芯片,避免了系统因为死机而停止工作的情况发生。系统设计简便、实用性强、操作简单、程序设计简便。 系统不足:时间设定由于采用C,定时不是太准确,以及自动根据车流改变红绿灯时间不是太确定,此外,还没有充分考虑的把现代管理、人工智能运用到交通的控制中,来计算交通控制点之间的距离,来更合理的安排红、绿灯的持续时间,使城市的交通管理更加人性化。使人们远离目前的交通拥塞的现象。 谢 辞 首先要对申老师表示感谢,申老师学养深厚,在指导过程中尽职尽责,对论文的选题、框架、范围给予我宝贵的指点,protues和keil的讲解提升了我本来比较凌乱的思想,使我最后完成了论文思路的成熟和体例的成型。毕业设计的完成乃至学业的顺利完成,在这个漫长而又短暂的过程中,谢谢所有的导师。同学还有朋友对我的支持和帮助,在这里请接受我诚挚的谢意。感谢我我的母校给我这么好的学习环境。感谢我的父母对我四年来的鼓励和支持。 参考文献 [1] 余发山.单片机原理及应用技术[M].中国矿业大学.2002 [2] 李朝青.单片机原理及接口技术(修订版)[M].北京:北京航空航天大学出版社,1998 [3] 李广弟.单片机基础[M].北京:北京航空航天大学出版社,1992机微机 [4] 高锋.单片应用系统设计及实用技术[M].北京:机械工业出版社2004 [5] 贾金玲.单片机原理及应用[M】.成都:电子科技大学出版社2O04 [6] 曾峰,侯亚宁,曾凡雨.印刷电路板(P∞)设计与制作[M].北京:电子工业出版社2002 [7] 张鑫. 单片机原理及应用(第2版)[M]. 电子工业出版社,2010年 [8] 张毅刚. 单片机原理与应用设计[M]. 电子工业出版社,2008年 [9] 谭浩强 C语言程序设计(第四版)[M]. 清华大学出版社,2008年 [10] 杨暾 单片机技术及应用:基于Proteus仿真的C语言程序设计[M].电子工业出版社,2012