交通灯设计.docx
《交通灯设计.docx》由会员分享,可在线阅读,更多相关《交通灯设计.docx(18页珍藏版)》请在冰豆网上搜索。
交通灯设计
通信系统综合实验报告
交通灯设计实验
摘要
当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。
但这一技术在19世纪就已出现了。
绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。
左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。
红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。
本设计是关于单片机控制的交通灯模拟系统的设计。
主要内容有交通灯模拟系统设计方案,主要功能,各功能模块的介绍,电路设计,硬件部分设计,软件部分设计,硬件调试,设计方法以及课程设计的心得体会等等。
该设计中用光二极管来模拟信号灯,要求使AT89s51定时/计数器0作为定时器,要求对通行时间进行倒计时,在LED数码管上显示并进行递减,以此来实现十字路口交通灯的指示功能。
根据交通灯系统所需要实现的功能要求,先画出实验程序框图和主程序流程图,然后根据流程图写出其子程序。
最后将程序烧至单片机实验箱的芯片中,通过程序控制交通灯的亮灭,以此模拟十字路口真实的交通灯。
关键字:
交通灯LED数码管AT89S51单片机
目录
1设计要求3
2设计目的3
3实验原理3
3.1基本原理3
3.2AT89S514
4实验流程图5
4.1实现方法5
4.2流程图5
5硬件设计5
5.1单片机结构5
5.2主要元器件6
5.3复位部分电路6
5.4时钟部分电路7
5.5显示部分电路7
6软件设计8
6.1单片机中断系统基本结构11
6.2每秒钟的设定11
6.3定时器初值计算11
6.4软件流程11
7系统仿真13
8实物效果14
9心得体会17
10参考文献18
一、设计要求
1.利用单片机的定时器定时,实现道路的红绿灯交替点亮和熄灭。
2.以AT89S51单片机为核心,设计一个十字路口交通灯控制系统。
用单片机控制LED灯模拟交通信号灯显示。
假定东西方向绿灯时间为15秒,南北方向方向绿灯时间为10秒,黄灯时间均为5秒,东西方向的红灯时间等于南北方向绿等时间加黄灯时间,南北方向红灯时间等于东西方向绿灯时间加黄灯时间。
3.南北方向、东西方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。
二、设计目的
1.综合运用“单片机原理与应用”课程和先修课程的理论及生产实际知识去分析和解决电子设计问题,进行电子设计的训练。
2.学习电子设计的一般方法,掌握AT89S51芯片以及简单电子设计过程和运行方式,培养正确的设计思想和分析问题、解决问题的能力,特别是总体设计能力。
3.通过计算和绘制原理图、布线图和流程图,学会运用标准、规范、手册、图册和查阅有关技术资料等,培养电子设计的基本技能。
4.通过完成一个包括电路设计和程序开发的完整过程,了解开发单片机应用系统全过程,为今后从事的工作打基础。
5.通过本次课程设计进一步熟悉和掌握单片机的结构及工作原理,巩固和加深“单片机原理与应用”课程的基本知识,掌握电子设计知识在实际中的简单应用。
三、实验原理
1.基本原理
主体电路:
交通灯自动控制模块。
这部分电路主要由80C51单片机的I/O端口、定时计数器、外部中断扩展等组成。
本设计先是从普通三色灯的指示开始进行设计,用P1口作为输出。
程序的初始化是东西南北方向的红灯全亮。
然后南北方向红灯亮,东西方向绿灯亮,60秒后东西方向黄灯闪亮5秒后南北方向绿灯亮,东西方向红灯亮。
重复执行。
倒计时用到定时器T0,用P2口作为LED的显示。
二位一体的LED重复执行60秒的倒计时。
作为突发事件的处理,本设计主要用到外部中断EX0。
用一模拟开关作为中断信号。
实际中可以接其它可以产生中断信号的信号源。
2.芯片AT89S51
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。
使用AT89S51系列单片机编程,可以在没有实物单片机的情况下在普通电脑上进行程序编写甚至是调试工作。
一般工作中使用Keil公司开发的51单片机编程软件进行编程,它采用目前流行的开发环境,集编辑,编译和仿真于一体。
在该软件上用户可以编写汇编语言或C语言源程序,并利用该软件生成单片机能运行的程序。
主要功能特性:
1、4kBytesFlash片内程序存储器;
2、128bytes的随机存取数据存储器(RAM);
3、32个外部双向输入/输出(I/O)口;
4、2个中断优先级、2层中断嵌套中断;
5、5个中断源;
6、2个16位可编程定时器/计数器;
7、2个全双工串行通信口;
8、看门狗(WDT)电路;
9、片内振荡器和时钟电路;
10、与MCS-51兼容;
11、全静态工作:
0Hz-33MHz;
12、三级程序存储器保密锁定;
13、可编程串行通道;
14、低功耗的闲置和掉电模式。
四.实验流程图
1、实现方法
(1)在设计中利用定时器的方法来控制红绿黄灯亮的时间。
P2口的P2.0、P1.2、P2.2、P2.3、P2.4、P2.5作为红绿灯控制端口。
南北向的绿灯连P2.0、南北红灯连P2.1、南北黄灯连P2.2、东西向的红灯连P2.3、东西红灯连P2.4、东西黄灯连P2.5。
通过给P2端口赋值来控制6个LED灯的亮灭,显示时两个方向各用两位数码管显示倒计时时间。
2、流程图
5、硬件设计
1、单片机的结构
单片微机(Single-ChipMicrocomputer)简称为单片机。
它在一块芯片上集中成了中央处理单元CPU、随机存储器RAM、只读存储器ROM、定时/计数和多功能输入/输出I/O口,如并行口I/O、串行口I/O和转换A/D等。
就其组成而言,一块单片机就是一台计算机。
由于它具有体积小、功能强和价格便宜等优点,因而被广泛地应用于产品智能化和工业控制自动化上。
2、主要元器件
(1)开关管的选择:
BUTTON按钮
(2)LED发光二极管LED-RED,LED-YELLOW,LDE-GREEN
(3)数码管(红色)
(4)74LS47段显示译码器
(5)AT89S51系列单片机
3、复位部分电路
复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
复位电路通常采用上电自动复位和按钮复位两种方式。
该设计采用加电直接复位,复位电容采用22uF,电阻1000欧,为了节省元件,没有采用上电加按键模式。
加电瞬间,RES管脚为高电平。
通过电阻回路放电,使电压逐渐降为零,从而实现了复位功能。
4、时钟部分电路
时钟电路用于产生MCS-51单片机工作时所必须的时钟控制信号。
其内部电路在时钟信号控制下,严格地按时序执行指令进行工作。
在执行指令时,CPU首先要到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号去完成指令所规定操作。
本设计采用12MHz晶振和两个20Pf瓷片电容,他们构成一个稳定的自激振荡器。
该电容的大小影响振荡器频率的高低、振荡器的稳定性和起振的快速性。
为单片机提供标准时钟。
其中两个瓷片电容起微调作用。
ATMEL公司生产的AT89C51单片机它是硬件电路的核心部分,在由多片单片机组成的系统中,为了各单片机之间的时钟信号同步,应当引入唯一的公用外部脉冲信号作为各单片机的振荡脉冲,外部脉冲信号一般不低于33MHz的方波。
5、显示部分电路
LED数码显示部分。
LED数码显示部分由七段数码显示管组成。
发光二极管显示原理:
发光二极管是采用砷化镓、镓铝砷和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。
发光二极管在制作时,使用的材料不同,那么就可以发出不同颜色的光。
当定时器定时为1秒,时程序跳转到时间显示及信号灯显示子程序,它将依次显示信号灯时间,同时一直显示信号灯的颜色,这时在返回定时子程序定时一秒,在显示黄灯的下一个时间,这样依次把所有的灯色的时间显示完后在重新给时间计数器赋初值,重新进入循环。
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。
这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
6、软件设计
在进行应用系统的总体设计时,软件设计与硬件设计应统一考虑,相结合进行。
当系统的电路设计定型以后,软件的任务也就明确了。
一般来说,软件的功能可分为两大类。
一类是执行软件,它能完成各种实质性的功能,如测量计算、显示、打印、输出控制等;另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织协调角色。
我们设计时,应从以下几个方面考虑:
1)根据软件功能的要求,将系统软件分为若干个相对独立的部分。
设计出合理的软件总体结构,使其清晰、简捷、流程合理。
2)各功能程序实行模块化、子程序化。
3)在编写应用软件之前,应绘制出程序流程图。
4)要合理分配系统资源,包括ROM、RAM、定时器/计数器、中断源等。
本设计采用了模块化设计,主要由主程序模块、功能实现模块两大部分模块组成。
1.单片机中断系统基本结构
中断是一项重要的计算机技术,是处理正常工作与紧急状态的好办法,是实现人机实时交互的重要途径,在单片机应用系统中,中断技术得到了广泛应用。
下面详细介绍单片机中断系统基本结构、与中断相关的特殊寄存器的设置及中断应用系统编程方法。
当CPU查询到系统有中断请求时,如果系统处于中断允许状态,CPU将停止当前的工作,响应中断请求,转向中断服务,中断服务完成后,返回原程序继续执行当前任务,这叫单片机中断。
8051系列单片机中断系统结构如图3.7所示。
能让CPU产生中断的信号源叫中断源。
8051单片机有NT0、INT1、T0、T1、TI、RI六个中断源,但只有EX0、ET0、EX1、ET1、ES五个向量,下面简要介绍六个中断源。
图:
单片机中断系统基本结构
INT0、INT1:
外部中断源,由P3.2和P3.2引脚输入。
具有低电平和脉冲两种触发方式,在每个机器周期的S5P2采样引脚信号,如有效则由硬件将它的中断请求标志IE置1,请求中断。
当CPU响应中断时,由硬件复位。
T0、T1:
定时/计数器中断,当定时/计数器产生溢出时,置位中断请求标志TF请求中断处理。
RI、TI:
串行中断,RI是接收,TI为发送。
单片机串行口接收到一个字符后RI置1,发送完一个字符TI置1。
值得注意的是,RI、TI在响应中断后,必须由用指令将其复位。
中断响应:
CPU在执行程序的过程中,在每个机器周期的S5P2对中断标志位按中断优先级进行查询,一旦查询到有中断请求,CPU只要不在执行同级或高级的中断服务程序和当前指令(RETI指令或访问IE、IP的指令除外)执行完毕两种情况,则响应中断。
如果当前正在执行的指令是RETI或访问IE、IP的指令,则当前指令执行完毕后,CPU才可响应中断。
中断响应时间可以从中断信号被查询开始算起,中断响应时间在以下三种情况下,响应时间还会更长:
1、CPU正在执行一个比要响应的中断源优先级相等或更高的中断源的中断服务程序,此时须等到中断服务程序执行完毕才可中断响应。
2、正在执行的当前指令不是在最后一个机器周期,只有指令执行完后才响应中断。
3、如果当前执行的是RETI或访问IE、IP的指令,则当前指令执行完毕后,CPU需再执行一条指令才可以中断响应,因此附加等待响应时间不会超过5个机器周期。
中断入口:
单片机响应中断后,将转向特定的入口进行中断服务,单片机的中断入口地址如表3.2所示。
中断源
入口地址
IE0(外部中断0)
0003H
TF0(定时器0溢出中断)
000BH
IE1(外部中断1)
0013H
TF1(定时器1溢出中断)
001BH
RI+TI(串行口中断)
0023H
表3.2MCS-51单片机中断服务程序入口地址表
从表中可以看出,两相邻中断源的入口地址间隔为8个单元。
这意味着如果要把中断源对应的中断服务程序从入口地址开始存放,则程序的长度不能超过8个字节,否则会影响到下一个中断源的入口地址的使用。
而通常的情况下,中断服务程序的长度不止8个字节,因此,常见的处理方法是:
在入口地址处存放一条无条件转移指令,通过这条转移指令转向对应的中断服务程序入口,中断服务程序以RETI为结束。
中断请求的撤销:
CPU响应中断请求,在中断返回(RETI)之前,该中断请求应被撤除,否则会引发另一次中断。
定时/计数器中断请求撤销:
CPU在响应中断后,由硬件自动清除中断请求标志TF。
外部中断请求撤销:
如果采用脉冲触发方式,CPU在响应中断后,由硬件自动清除中断请求标志IE;对于电平触发方式的外部中断请求,中断标志的撤销是自动的,由于造成中断请求的低电平继续存在,所以在响应中断后再次会产生中断请求,为此响应中断后要撤销外部信号。
2.每秒钟的设定
延时方法可以有两种一中是利用MCS-51内部定时器才生溢出中断来确定1秒的时间,另一种是采用软延时的方法。
3.计数器初值计算
定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。
我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC可得到如下计算通式:
TC=M-C
4.软件流程
序号
状态
状态(flag)
延时(s)
备注
1
东西绿南北红
1
15
可调整东西绿灯时间
2
东西黄灯南北红灯
2
3
3
南北绿东西红
3
10
可调整南北绿灯时间
4
南北黄东西绿
4
3
a、红绿灯控制模块
6个红绿灯通过给P2端口赋值来控制,一共有4中情况,分别是南北绿东西红、南北黄东西红、东西绿南北红、东西黄南北绿,这四种模式循环切换。
通过定时器控制每种状态持续的时间,以及控制状态的切换。
南北绿灯时间为10s,黄灯为3s,红灯为15s;东西绿灯为15s,黄灯为3s,红灯为18s。
b、数码管显示和定时器中断模块
数码管用74LS47BCD7段显示译码器驱动,通过位选与段选的控制,实现动态的显示。
数码管显示函数放在定时器中断服务函数中,定时器定时5ms,这样每5ms显示一个数码管,4个数码管循环显示,有于速度很快,这样看上去就是一起显示的,从而实现了动态数码管的效果。
c、按键检测模块
本次实验一共使用了4个按键,分别连接到P0.0、P0.1、P0.2、P0.3,按键的功能如下:
key1:
开始暂停键
Key2:
模式选择键,通过key2可以选择调整南北路或者东西路绿灯的时间,而红灯时间也随之改变。
Key3:
时间加
Key4:
时间减
d、定时器中断模块
定时器中断模块用于数码管显示模块,定时时间为5ms,相对来说也比较长,用于显示数码管可以更好的利用定时器资源,同时定时器也进行秒的设定,每次进入中断服务函数都进行计数加一,当技计数到200时时间即为1s。
以此改变数据显示和亮灯时间设定。
七、系统仿真
模拟仿真图
说明:
下方的方框表示东西方向的倒计时牌,上面的方框表示南北方向的倒计时牌,倒计时牌的数值为当前对应的灯的亮灯时间。
其中黄灯的亮灯时间均为3秒,两边的绿灯亮灯时间分别为10秒和15秒,所以红灯时间为13秒和18秒。
8、实物效果
9、心得体会
整个的通信系统课程设计已经接近尾声,在整个交通灯的设计中我感受颇多。
最开始的工作理解电路图,我们掌握了交通灯的电路图的设计理念以及方法,单片机芯片89s51各个管脚的作用,以及上电复位电路,时钟控制电路的作用及绘制方法,总体来说收获是非常的大的。
整个设计过程的第二步则是理解交通灯是工作流程,在这个过程中我请教了老师,最后理清了整个计时、显示的规范和流程。
根据流程图将主程序编写出来,通过努力,我在第二天时写出了程序,但是在调试的过程中出现了很多意想不到的问题,将程序放到keil中编译,出现了多处错误,但是我都通过查阅书籍,请教老师和学长等方法对程序进行了更正。
在这个更正错误,调试程序的过程,可以说收获是巨大的,也对程序的意义有了更多的体会和更熟练地理解。
主程序调试通过后,第二步就是加入个种子程序,其中包括:
显示器动态扫描子程序,码表刷新子程序,交通灯定时中断服务子程序,这是一个十分困难的过程,要将各个程序相互融合在一起,并且使其正常运行,要花大量时间调试,更改程序。
此过程中典型的一次错误是:
在东西红灯亮,南北绿灯亮时,二极管和码表都可显示运行的时候,当程序跳转到黄灯时,码表计时溢出,检查程序,发现程序逻辑上存在问题,最后经修改调试码表显示正常。
之后在加入按键又出现了诸多问题,首先是按键精准度问题,我通过修改消抖时间和判断按键是否松开来确定一次按键结束。
这样按键较为精准,每次按键都有响应且响应正确。
接着是显示问题,在修改绿灯的时间的时候,我的整个显示界面做的不好,我既没有显示是否可以修改的状态,也没有显示可以修改哪一边的绿灯时间。
最后我修改程序使得有良好的提示界面:
进入绿灯上限值修改时会跳到最大值,并且可以通过模式选择进行切换,哪一边的绿灯亮就修改哪一边的值。
最后我修改了数码管的显示顺序,开始是左边比右边多黄灯的时间,接着是右边比左边多黄灯的时间,这一点在实际应用中很有必要。
通过这个调试过程,我认识到只要细心地去读程序,认真的去理解,真正将程序领悟透彻后,很多问题都可以迎刃而解,当然在这个过程中我也应当几级的请教别人,在相互讨论中共同学习。
通过这次课设,对学过的知识进行了巩固,加深了理解,提高了应用的能力,而且提高了我们的发现、分析、解决问题的能力。
经历了从最初的设计到最后在试验箱上实现,提高了我们对专业的认识及兴趣,对于我们工科来说,对以后就业有及其重大的影响。
最后,在此感谢徐清源老师在本次设计过程中的帮助和指导,使我们在课程设计的过程中不只是学习到了知识,更学到了一些思想和理念。
10、参考文献
[1]陈蕾等.单片机原理与接口技术[M].北京:
机械工业出版社,2012。
[2]郭天祥等.51单片机C语言教程[M].北京:
电子工业出版社,2008。