交通灯课程设计报告 (2).doc_第1页
交通灯课程设计报告 (2).doc_第2页
交通灯课程设计报告 (2).doc_第3页
交通灯课程设计报告 (2).doc_第4页
交通灯课程设计报告 (2).doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一 设计内容 设计一个十字路口交通灯控制器。模拟东西方向的十字路口交通信号控制情况。东西向通行时间为80s,南北向通行时间为60s,缓冲时间为3s。A方向红灯时间=B方向绿灯时间+B方向黄灯缓冲时间,其中A为东西方向,B为南北方向。二 任务分析 2.1单片机交通控制系统的通行方案设计十字路口分为东西向和南北向,在任一时刻只有一个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向对换。其具体状态如下图所示。说明:黑色表示亮,白色表示灭。交通状态从状态1开始变换,直至状态4然后循环至状态1,周而复始,即如图1所示: 图1 交通状态通过具体的路口交通灯状态的演示分析我们可以把这四个状态归纳如下: 本设计中共12只LED分别为东西向和南北向两组,各组指示灯均有相向的2只红色、2只黄色与2只绿色的LED,交通灯共四种状态,分别设定为S1、S2、S3、S4,交通灯以这四种状态为一个周期,循环执行如图1所示。通行时间通过4个2位数码管以倒计时方式循环显示。其中状态S1:东西方向绿灯亮,允许通行,南北方向红灯亮,禁止通行; 状态S2:东西方向绿灯转黄灯闪烁,允许通行,南北方向红灯亮,禁止通行;状态S3:东西方向红灯亮,禁止通行,南北方向绿灯亮,允许通行;状态S4:东西方向红灯亮,禁止通行,南北方向绿灯转黄灯闪烁,允许通行; 图2 交通灯状态循环 依据上述分析,东西的通行时间为状态S1和状态S2的时间之和,南北的通行时间为状态S3和状态S4的时间之和,因此可以列出各个路口灯的状态转换如表1所示(其中逻辑值“1”代表执行通行,逻辑值“0”代表禁止通行,逻辑值“L”代表绿灯转黄灯):表1 交通灯状态转换表顺序时间东 西南 北绿灯黄灯红灯 绿灯 黄灯 红灯S177s100001S23s0L(闪烁)0001S357s001100S4 3s0010L(闪烁)02.2 单片机交通控制系统的功能要求 本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示,通行时间调整和紧急处理等功能。程序就是上述四种状态下循环转化的,每四个状态为一个周期,正常情况下共花费140S。三 系统硬件设计3.1系统硬件框图 本系统选用MSC-51系列单片机AT89C51为中心器件设计交通灯控制器,实现了红绿灯循环点亮,绿灯变红灯中间为黄灯闪烁警示的功能。用共阴显示驱动芯片MAX7219芯片连接单片机与4个共阴数码管,显示十字路口两个方向通行或禁止的剩余时间,减少了对单片机引脚和机器的占用时间。系统的硬件框图如图3所示。图3 系统硬件框图3.2单元电路设计3.2.1时钟电路取原选则:CPU的需要精确的定时,这是用一个晶体振荡器产生稳定的时钟脉冲来控制的。8051片内有一个有高增益反相放大器所构成的震荡电路,XTAL1和XTAL2分别为震荡电路的输入和输出端,时钟可以由内部方式产生或外部方式产生。在XTAL1和XTAL2之间跨接晶体振荡器和微调电容,组成并联谐振回路,从而构成一个稳定的自激震荡器。电容置在530PF之间选择,电容的大小可起频率微调作用。电容选取22uF,晶振为12MHZ。如图4所示。图4 时钟电路3.2.2复位电路常见的复位电路有两种,上电自动复位、手动复位电路。本设计中采用的是上电自动复位。如图5所示。图5复位电路3.2.3交通灯电路本系统采用LED作为交通灯来使用,单片机的I/O口直接与LED连接。在十字路口的四组红、黄、绿三色交通灯中,东西方向的同色灯连接在一起,南北方向的同色灯也彼此连接,受单片机AT89C51的P0.0P0.5控制。12个LED指示灯采用共阳极的连接方式,因此I/O口输出低电平时,与之相连的LED会亮,输出高电平时,LED熄灭。3.2.4倒计时显示电路该交通灯控制系统在正常工作情况下,为方便提示路上行人及车辆交通灯转换的剩余时间,专门为控制系统提供了一个倒计时的显示装置。该装置采用2位七段数码管来显示,每个路口需要1个,共4个,在设计电路时,本系统采用用共阴显示驱动芯片MAX7219的DIG0DIG1控制4个数码管的循环动态显示。MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其主要的特点是有独立的LED段控制。3.3 理论基础知识3.3.1定时器原理定时器工作的基本原理其实就是给初值,让它不断加1直至减完为模值,这个初值是送到TH和TL中的。它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值,即所要求的计数值设定为C,把计数初值设定为TC 可得到如下计算通式:TC=M-C式中,M为计数器模值。计数值并不是目的,目的是时间值,设计1次的时间,即定时器计数脉冲的周期为T0,它是单片机系统主频周期的12倍,设要求的时间值为T,则有C=TT0。计算通式变为:T=(MTC)T0模值和计数器工作方式有关。在方式0时M为8192;在方式1时M的值为65536;在方式2和3为256。就此可以算出各种方式的最大延时。如单片机的主脉冲频率为12MHZ,经过12分频后,若采用方式最大延时只有8.129毫秒,采用方式最大延时也只有65.536毫秒。这就是为什么扫描周期为50ms的原因,若使用软件则会耽搁程序流程,显然不可行。相反,时间计时方面却不可能只用计数器,因为显然秒钟已经超过了计数器的最大定时间,所以我们还必须采用定时器和软件相结合的办法才能解决这个问题。3.3.2软件延时原理MCS-51的工作频率为12MHZ,机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12MHZ)=1us。我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间,但同时由于单片机的运行速度很快其他的指令执行时间可以忽略不计。3.3.3 中断原理本系统主要使用了外部中断,中断信号有引脚INT0和INT1输入,低电平有效,CPU每个时钟周期都会检测INT0和INT1上的信号,8051允许外部中断以电平方式或负边沿方式两种中断方式输入中断请求信号,可由用户通过设置TCON中IT0和IT1位的状态来实现。以IT0为例,IT0=0,为电平触发方式,IT0=1,为负边沿触发方式,本设计采用电平方式,IE0为其中断标志位,有中断信号则置位,中断服务子程序响应后,IE0自动清零。IE中的EA为允许中断的总控制位,为1开启,EX0为外部中断允许控制位,为1开启。在优先级的允许下,一旦有外部中断信号产生,单片机CPU首先保护断点,PC值进栈,然后执行相应的中断服务子程序,执行完后,用RETI指令返回,此时CPU会从堆栈中取保存的断点地址,送回PC,程序再正常执行。 四 系统软件设计使用proteus软件进行电路仿真,芯片AT89C51还需要载入代码文件来支持其正常工作以实现预期功能要求。程序代码编写是整块设计的核心内容,本系统中利用一个定时器T0完成了交通指示灯所有的切换过程和数码管的倒计时功能,其中指示灯的切换有4种不同的操作,用变量Operation_Type表示当前的操作类型,数码管的切换有2种不同的操作,用变量i表示状态的切换。采用C语言进行编程,下面简要介绍下各段程序代码的意义和功能。4.1主程序框图主程序为交通灯四个状态循环转换的死循环,主程序代码和程序框图如图6所示。 void main()/主程序 Initialise(); TMOD = 0x01;/定时器0工作在方式1 IE=0x82;/允许定时器0中断 TR0=1;/启动定时器 while(1); 全部控制程序实际上分为若干模块:键盘设置处理程序,状态灯控制程序,LED显示程序紧停程序,中断服务子程序,红绿灯时间调整程序等。整个软件程序方面主要分两大部分:主程序部分和中断处理程序。开始系统初始化东西亮绿灯,南北亮红灯调显示子程序(动态显示)东西,南北方向换向东西黄灯闪烁,南北亮红灯灯中断处理子程序处理返回图6 主程序框图 设计说明:该智能交通灯控制系统的软件设计采用的是顺序执行并反复循环的方法。智能交通灯控制系统在正常工作的情况下,每140s循环变化一次。每个循环周期在还剩3s时,正在通行路口的黄灯同时点亮并开始闪烁,以提醒路人上的行人及车辆,交通灯即将发生变化。4.2 过程流程图 图7 过程流程图 五 调试分析及所用器件5.1 调试环境本设计使用仿真软件Proteus和Keil C进行联合调试。原理图在Proteus提供的模板中选择恰当的元器件进行设计绘图,完成电路的搭建,发现设计中的错误及时改正。所有c语言源程序都在Keil C下编写,对仿真软件进行相应的设置后,Keil C和Proteus能进行通信,即在Keil C中全速运行程序时,Proteus中的单片机系统也会自动运行。系统的软件调试借助于TKS仿真器,在进行系统软件的连续调试之前要先进行软件的初调,就是要使各个子程序模块运行正确,程序的运行流程正确。软件调试主要分以下几个步骤进行:1 功能子程序的调试。能子程序的调试包括运算、采样、数字滤波以及PID运算等子程序的调试。在调试功能子程序时,许多参数都是未知的,要根据其所需的条件,给出假定的数据,使其运行,如果能完成预定的处理功能或与手工计算的结果相符,就说明该子程序己调试通过。调试时由小到大,由里到外。例如,调试PID算法子程序时,先调通其包含的各个运算子程序和参数处理子程序,然后将它们连起来进行通调。通调时,也是假定一些数据、参数和初始条件,然后运行程序。当运算结果与手工计算的结果相同时,该算法子程序则调试完成,反之,就要进行相应的修改。其它子程序的调试同理;2 程序流程的调试。序流程的调试主要是查看程序运行的步骤是否正确,在某时刻程序运行所处的位置是否正确,是否能正确运行各个中断服务程序。在调试过程中,先将PID算法子程序屏蔽,输出可控硅导通时间用一个固定的常数代替,在各个中断服务子程序设置断点,然后运行程序,查看程序是否能运行到所有的断点,若所有断点都能运行到,则程序流程基本正确。去掉所有断点,再一次运行程序,查看可控硅状态,从而判断程序流程正确,反之,若程序流程不正确,做相应的修改后,重新调试;3 功能程序与算法程序的通调。完成整个程序流程的调试后,将PID等算法子程序加入,在算法子程序前或后设置断点,运行整个程序。当程序在断点处暂停时,查看PID计算的控制量与手工计算的值是否相同。多运行几次,若每次的结果都正确,则说明程序各个部分互相没有矛盾,反之,则说明算法子程序和其它子程序之间有影响,需要做相应的修改后重新调。5.2所用芯片及参数 表5-1 所用芯片及参数序号名称元件编号参数数量1单片机AT89C5112显示驱动器MAX721913指示灯LED-REDGREENYELLOW12(各4个)47段数码管7SEG-MPX2-CC45电容CAP22pF26晶振 CRYSTAL12Mhz17电阻RES10k38电解电容CAP-ELEC10F1 六 心得体会这次是我认为最有意义的一次课程设计,从原理图设计到软件仿真,我从中收获了许多。设计刚开始时,我就在学校中门仔细观察路口交通灯,经过研究思考最终得到了上述的交通灯状态转换表。 对于交通灯这个题目,由于以前学单片机这个课程时,做过类似相关的实验,觉得这个比较简单而且做出的东西也比较直观,在确定题目之后,查阅了大量的资料,初步完成了电路设计方案。 我选择了用c语言进行编程,在编写倒计时显示遇到了困难,因为不了解芯片MAX7219的显示原理。通过查阅资料,克服了困难,很有成就感。在整个程序的编写过程中,研究每个子程序是否好使,我是通过Keil 和proteus两个软件来实现的。Keil 则帮助我检查程序是否存在语法错误之类的问题,还可以生成hex文件,供proteus软件仿真使用。通过几天的编写,程序最终无误并且在仿真中实现了预定的功能。 七 参考文献1张毅坤. 单片微型计算机原理及应用,西安电子科技大学出版社 1998 2夏继强. 单片机实验与实践教程. 北京:北京航空航天大学出版社, 20013彭伟. 单片机C语言程序设计100例.北京:电子工业出版社, 20095雷丽文. 微机原理与接口技术.北京:电子工业出版社, 20016于永. 51单片机C语言常用模块与综合系统设计.北京:电子工业出版社, 20077谭浩强. C语言程序设计.北京:清华大学出版社, 20058于永. 51单片机C语言常用模块与综合系统设计.北京:电子工业出版社, 2007八 程序代码#include #include #define uchar unsigned char#define uint unsigned int sbit RED_A = P00;sbit YELLOW_A = P01;sbit GREEN_A = P02;sbit RED_B = P10;sbit YELLOW_B = P11;sbit GREEN_B = P12;sbit DIN=P30;sbit LOAD=P31;sbit CLK=P32;uchar Flash_Count = 0, Operation_Type = 1,Time_Count=0,hh=1,i=80,mm=1,tt=9; /写数据void Write(uchar Addr,uchar Dat) uchar i; LOAD=0; for(i=0;i8;i+) CLK=0;Addr=1;DIN=CY; CLK=1;_nop_();_nop_(); CLK=0; for(i=0;i8;i+) CLK=0;Dat=1;DIN=CY; CLK=1;_nop_();_nop_(); CLK=0; LOAD=1;/MAX7219初始化void Initialise() Write(0x09,0x3f);/编码模式地址 Write(0x0a,0x07);/亮度地址 Write(0x0b,0x01);/扫描数码管个数地址 Write(0x0c,0x01);/工作模式地址/T0中断子程序void T0_INT() interrupt 1 TH0=-50000/256;/设定50ms定时初值TL0=-50000%256;if(tt-=0)/50ms*10=500mstt=9;if(hh- =0)/500ms*2=1shh=1;Write(1,i/0x0a);/数码管写数据Write(2,i%0x0a); if(i-=0)/初始化时定义i=80if(mm=0)/判断语句 mm=1;i=80;else mm= 0; i=60; switch (Operation_Type) case 1:/东西向绿灯,南北向红灯 RED_A = 1; YELLOW_A = 1; GREEN_A = 0; RED_B = 0; YELLOW_B = 1; GREEN_B = 1; if(+Time_Count!=155) return;/500ms*(2*77)=77s Time

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论