交通信号灯控制电路设计单片机.docx
《交通信号灯控制电路设计单片机.docx》由会员分享,可在线阅读,更多相关《交通信号灯控制电路设计单片机.docx(27页珍藏版)》请在冰豆网上搜索。
交通信号灯控制电路设计单片机
江西航空职业技术学院
毕业设计说明书(论文)
课题名称
交通信号灯控制电路设计(单片机)
航空电子设备维修专业081331班
学生姓名邓超学号37
指导老师贺国灿技术职称______________
2011年3月16日
江西航空职业技术学院
毕业设计(论文)任务书
学生姓名:
邓超班级:
37
1.毕业设计(论文)题目:
交通信号灯控制电路设计(单片机)
2.毕业设计(论文)使用的原始资料数据及设计技术要求:
1、单片机应用技术
2、单片机典型模块设计实例导航
3、单片机课程设计指导
4、单片机基础
针对实际要求,灵活应用所学知识,独立进行系统综合设计的过程以达到巩固单片机基础知识、掌握单片机系统开发过程和提高动手实践能力的目的。
2.毕业设计(论文)工作内容及完成时间:
本设计是以89S51为主控芯片,利用P1口控制74LS240(八反相缓冲器,线驱动器)驱动发光二极管模拟交通灯。
倒计时显示部分采用串口实现。
串口工作在方式0时通过外接移位寄存器74LLS164实现串并转换。
需要显示的数据经RXD端输出经过74LS164串并转换输出到共阳极的LED数码管显示,利用T0定时器进行1S定时。
日期:
自2010年12月15日至2011年3月16日
指导老师评语:
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
指导老师:
贺国灿系主任:
姚卫华
参考文献27
前言
本毕业设计的主要任务是通过解决一、两个实际问题,主要是巩固和加深“单片机原理与应用”以及以前所学的电子理论知识和实验能力,基本掌握单片机应用电路的一般设计方法,提高电子电路的设计和实验能力,加深对单片机软硬知识的理解,获得初步的应用经验,为以后工作打下一定的基础。
在今天,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。
但这一技术在19世纪就已出现了。
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
通过三个星期的学习,本人对单片机的结构和功能已有了初步的了解和认识。
单片机在交通控制中起到了举足轻重的作用,掌握了单片机的工作原理也就基本了解了交通灯的运做原理。
作为一个学生,为了更好地掌握单片机的结构和功能,为了进一步加强自己的实践能力,本人设计了以下的一款交通灯。
关键词:
交通灯单片机AT89S51
一、设计的要求和内容
1.1工作要求
本次毕业设计,是针对实际要求,灵活应用所学知识,独立进行系统综合设计的过程以达到巩固单片机基础知识、掌握单片机系统开发过程和提高动手实践能力的目的。
1.2、技术要求
某十字路口,如下图所示,设计一个十字路口交通灯信号控制器,指挥交通车的通行。
要求如下:
1)东西通道和南北通道交替通行,东西通道每次放行时间大于南北通道每次放行时间。
2)绿灯亮表示可以通行,红灯亮表示禁止通行。
3)每次绿灯变红灯时,绿灯先闪转变黄灯(此时另一干道上的红灯不变)。
4)十字路口要有数字显示,作为时间提示,以便人们更直观地把握时间。
具体要求东西通道、南北通道通行时间及黄灯亮的时间均以秒为单位作减计数。
十字路口如图1所示
图1
二.硬件电路说明
2.1电路设计原理图
见附录
2.2电路工作原理
本设计是以89S51为主控芯片,利用P1口控制74LS240(八反相缓冲器,线驱动器)驱动发光二极管模拟交通灯。
倒计时显示部分采用串口实现。
串口工作在方式0时通过外接移位寄存器74LLS164实现串并转换。
需要显示的数据经RXD端输出经过74LS164串并转换输出到共阳极的LED数码管显示,利用T0定时器进行1S定时。
2.389S51单片机介绍
MCS-51单片机是美国INTE公司于1980年推出的产品,典型产品有8031(内部没有程序存储器,实际使用方面已经被市场淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51的5倍,实际使用方面已经被市场淘汰)和8751等通用产品,一直到
现在,MCS-51内核系列兼容的单片机仍是应用的主流产品(比如目前流行的89S51、89C51等),各高校及专业学校的培训教材仍与MCS-51单片机作为代表进行理论基础学习。
8051是早期的最典型的代表作,由于MCS-51单片机影响极深远,许多公司都推出了兼容系列单片机,就是说MCS-51内核实际上已经成为一个8位单片机的标准。
其他的公司的51单片机产品都是和MCS-51内核兼容的产品而以。
同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51,PHILIPS(菲利浦),和WINBOND(华邦)等,我们常说的已经停产的89C51指的是ATMEL公司的AT89C51单片机,同时是在原基础上增强了许多特性,如时钟,更优秀的是由Flash(程序存储器的内容至少可以改写1000次)存储器取带了原来的ROM(一次性写入),AT89C51的性能相对于8051已经算是非常优越的了。
不过在市场化方面,89C51受到了PIC单片机阵营的挑战,89C51最致命的缺陷在于不支持ISP(在线更新程序)功能,必须加上ISP功能等新功能才能更好延续MCS-51的传奇。
89S51就是在这样的背景下取代89C51的,现在,89S51目前已经成为了实际应用市场上新的宠儿,作为市场占有率第一的Atmel目前公司已经停产AT89C51,将用AT89S51代替。
89S51在工艺上进行了改进,89S51采用0.35新工艺,成本降低,而且将功能提升,增加了竞争力。
89SXX可以像下兼容89CXX等51系列芯片。
同时,Atmel不再接受89CXX的定单,大家在市场上见到的89C51实际都是Atmel前期生产的巨量库存而以。
如果市场需要,Atmel当然也可以再恢复生产AT89C51。
89S51相对于89C51增加的新功能包括:
--新增加很多功能,性能有了较大提升,价格基本不变,甚至比89C51更低!
--ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。
是一个强大易用的功能。
--最高工作频率为33MHz,大家都知道89C51的极限工作频率是24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。
--具有双工UART串行通道。
--内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元电路。
--双数据指示器。
--电源关闭标识。
--全新的加密算法,这使得对于89S51的解密变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。
--兼容性方面:
向下完全兼容51全部字系列产品。
比如8051、89C51等等早期MCS-51兼容产品。
也就是说所有教科书、网络教程上的程序(不论教科书上采用的单片机是8051还是89C51还是MCS-51等等),在89S51上一样可以照常运行,这就是所谓的向下兼容。
比较结果:
就如同INTEL的P3向P4升级一样,虽然都可以跑Windows98,不过速度是不同的。
从AT89C51升级到AT89S51,也是同理。
和S51比起来,C51就要逊色一些,实际应用市场方面技术的进步是永远向前的
2.3关于74LS240
由于单片机的驱动能力太弱,所以给加了驱动电路有因为发光二极管驱动功率不大,所以我选用了八反相缓冲器/8位三态门电路74LS240无锁存功能。
逻辑图,功能状态图分别如图2、图3所示:
2.4介绍74LS164
本设计采用164把串行口逐位输出的数据进行串并转换进而控制LED的显示
2.5单片机最小系统
图4
2.6紧急功能部分
本设计了应急通行用按钮开关控制东西南北的应急通行信号其中东西方向接外中断0;南北接外中断1。
按一下按钮该方向通行另外方向停止按两下恢复原样。
具体看原理图
2.7框图
状态
持续时间/S
东西方向
南北方向
绿
黄
红
绿
黄
红
1
1
灭
灭
亮
灭
灭
亮
2
30
亮
灭
灭
灭
灭
亮
3
3
亮
亮
灭
灭
灭
亮
4
20
灭
灭
亮
亮
亮
灭
5
3
灭
灭
亮
闪
亮
灭
6
30
亮
灭
灭
灭
灭
亮
循环
三.软件部分说明
3.1利用定时器定时1S
定时/计数器的四种工作方式
工作方式0:
定时/计数器的工作方式0称之为13位定时/计数器方式。
它由TL的低5位和TH的8位构成13位的计数器,此时TL的高3位不用。
工作方式2:
在工作方式2中,只有8位参与计数,而高8位是不参与计数的,用作预置数的存放,这样计数范围就小了,每当计数溢出,就会打开T0的高、低8位之间的开关,预置数就进入低8位。
当然这是由硬件自动完成的,不需要我们去操心。
通常工作方式2用于波特率发生器,对于这种用途,定时器就是为了提供一个时间基准,计数溢出后不需做任何的事情,要做的仅仅只有一件,就是重新装入预置数,再开始计数,而且中间不能有任何的延迟,可见这个任务用这种工作方式来完成是最妙不过了。
工作方式3:
在这种工作方式下,T0被拆成2个独立的定时/计数器来用。
其中,TL0可以构成8位的定时器或计数器工作方式;而TH0则只能作为定时器用,我们知道定时/计数器使用时需要有控制,计满后溢出需要有溢出标记,T0被分成两个来用,那就要两个控制及溢出标记了,从何而来呢?
TL0还是用原来的T0的标记,而TH0则借用T1的标记,如此一来T1不是标记、控制可用了吗?
是的,在一般情况下,只有在T1以工作方式2运行时,才让T0工作于方式3。
工作方式1:
工作方式1是16位的定时/计数器方式,将TMOD的M1M0设为“01”即可,其他特性与工作方式0相同。
3.1.1定时1S
十字路口交通灯模拟控制器定时器采用工作方式1,先定时125MS,然后在定时中断程序中累加中断次数,8次为一秒,这样就可以起到定时1S的功能。
工作方式由工作方式控制寄存器(TMOD)决定,FR寄存器TMOD用于2个定时器/计数器T1/T0的工作方式设定,各位的含义表示如下:
GATE:
门控位,定义T1/T0的启动方式,
C/T-:
定时/计数功能选择位。
为“0”作定时器用;为“1”,作计数器用。
M1M0:
工作方式选择位。
01方式013位计数器
02方式116位计数器
10方式2初值自动重装8位计数器
11方式32个8位计数器,仅适用于T0
十字路口交通灯模拟控制器设计采用6M晶振,因此定时125MS,可用下列语句实现。
工作方式1是16位计数结构的工作方式,计数器由TH全部8位和TL全部8位构成。
所以初始化定时器T0工作方式1,定时125MS的语句如下:
MOVTMOD,#01
MOVTH0,#3CH
MOVTL0,#0B0H
定时1S在定时器0中断程序中完成,即计数八次为1S。
定时器中断初始化
程序如下:
SETBEA;开中断
SETBET;定时器0允许中断
SETBTR;开始定时
定时器定时1S的中断流程图如图5:
3.2外中断程序
对于外中断必须有中断的初始化程序、中断服务程序。
3.2.1中断的初始化步骤
1)要使用中断则首先必须中断中断允许。
2)硬件的初始化:
设置引脚连接设置I/O口的输入输出。
3)软件的初始化:
设置中断寄存器,设置中断服务地址,清除中断标志,设置中断触发模式。
4)使能中断。
外中断是由外部原因引起的中断,有两个中断源,即外中断0和外中断1,中断请求信号由引脚P3.2和P3.3输入。
外中断请求信号弹有两种方式,一是电平方式,二是脉冲方式,可通过有关控制位的定义进行规定。
电平方式为低电平有效,只需在单片机的(INT0)和(INT1)中断请示输入端采样到有效的低电平时,就会激活外部中断。
脉冲方式则在脉冲的后负跳沿有效,即在相邻两个机器周期对中断请求引入端电平进行采样中,如前一次为高,后一次为低即为有效中断请求。
这就要求在这种中断方式,中断请求信号的脉冲宽度必须大于一个机器周期,以保证电平变化能被单片机采样到。
3.2.1定时器控制寄存器(TCON)
外中断请求方式的控制位在定时控制寄存器TCON中的位(IT0)和(IT1)两个位,当IT0(IT1)=0为电平方式,IT0(IT1)=1为脉冲方式。
同时此寄存器中的位89(IE0)和(IE1)为外中断请求标志位,当CPU采样到INT0(INT1)端出现有效中断请求时,此位由硬件置1。
在中断响应完成后转向中断服务时,再由硬件自动清除。
3.2.2中断允许控制寄存器(IE)
下面本文对有关控制位作说明:
EA——中断允许总控制位。
EA=0,中断总禁止,禁止所有中断。
EA=1,中断总允许,总允许位打开后,各中断的允许或禁止由各中断允许控制位设置决定。
.EX0(EX1)——外部中断允许控制。
EX0(EX1)=0,禁止外部中断。
EX0(EX1)=1,允许外部中断。
.EX0(ET1)——定时/计数中断允许控制位。
ET0(ET1)-0,禁止定时/计数中断。
ET0(ET1)=1,允许外部中断。
ET0(ET1)=1,允许定时/计数中断。
.ES——串行中断允许控制位。
ES=0,禁止串行中断。
ES=1,允许串行中断。
中断的允许和禁止就是中断的开放和关闭,中断允许就是开放中断的禁止就是关闭中断。
从以上说明我们可看出,MCS-51的中断允许是通过两级控制的,以EA位作为总中断控制位,以各中断挖掘位为分控制位。
当总中断位为禁止状态时,不管分控制位是允许或禁止,整个中断都是禁止的。
MCS-51单片机复位后,IE=00H,因此中断处于禁止状态。
值得一提的是:
单片机中断响应后还会自动关闭中断,因此在转入中断服务程序后,应由软件指令禁止中断。
3.2.4中断优先级控制寄存器(IP)
MCS-51的中断优先级控制比较简单,只设置了高、低两个级别的有限级,各中断源的优先级别先级别由优先寄存器(IP)进行控制。
.PX0——外中断0(INT0)优先级控制位。
.PI0——定时中断0优先级控制位。
.PX1——外中断1优先级控制位。
.PT1——定时中断1优先级控制位。
.PS——串行中断优先级控制位。
控制位=0,优先级为低。
控制位=1,优先级为高。
中断优先级是为了中断嵌在服务的,控制原则为:
1)低优先级中断不能打断高优先级的中断服务,而高优先级的中断服务可以打断低优先级的中断服务。
2)同级的中断已经响应,其他中断将被禁止。
3)如果同级的多个中断源同时出现,CPU将按查询次序确定哪个中断被响应,次序为:
外中断0-定时中断0-外中断1-定时中断1-串行中断。
3.2.5中断控制寄存器的状态设置
本例设计要采用定时器中断,外中断0,外中断1。
定时器中断、外中断、串口中断控制如下,其中外中断0、1优先级最高,保证了应急通行的需求。
MOVSCON,#00H;工作于工作方式0,既移位寄存器状态
SETBES;开总中断
SETBET0;开定时器中断
SETBTR0;启动T0定时器
SETBIT0;外中断0为脉冲触发方式
SETBIT1;外中断0为脉冲触发方式
MOVIP,#05;外中断0,1为高优先级
SETBEX0;开个中断0
SETBEX1;开外中断1
外中断程序逻辑流程如图6:
3.3.串口工作方式设计
3.3.1串口工作方式
串口有4种方式:
方式0、1、2、3,由串口控制寄存器SCON和PCON控制。
10方式0同步移位寄存器
11方式110位异步收发
20方式211位异步收发
11方式311位异步收发
1)方式1:
10位异步收发
方式1下,串行口位10位通用异步接口。
发送或接收数据信息为10位,包括1位起始位“0”、8位数据、1位停止“1”。
方式1发送:
数据从TXD端口输出,当数据写入发送缓冲器SBUF时,启动发送器发送。
发送完数据后,置中断标志T1=1,申请中断,通知CPU可以发送下一个数据。
方式1接收:
首先使REN=1,串行口从RXD接收数据,当采样到1至0跳变时,确认是起始位“0”,就开始接收数据,当接收完数据时,置中断标志RI=1,申请中断,通知CPU从SBUF取走接收到的数据。
2)方式2:
11位异步收发方式。
发送或接收信息包括1位起始“0”、8位数据库位、1位可编程位、1位停止位“1”。
方式2发送:
发送前,先根据通信协议由软件包设置TB8为“奇偶校验位”或“数据标识位”,然后将要发送的数据SBUF,即能启动发送器。
发送过程是由执行任何一条以SBUF为目的的寄存器的指令而启动的,把8位数据装入SBUF,同时还把TB8装到发送移位寄存器的第9位上,然后从TXD(P3.1)端口输出数据。
方式2接收:
先置REN=1,使串行口为允许接收状态,同时还要将RI清“0”。
然后再根据SM2的状态和所接收到的RB8的状态决定此串行口在信息到来后是否置R1=1,并申请中断,通知CPU接收数据。
当SM2=0时,不管RB8为“0”还是为“1”,都置RI=1,此串行接收发送来的信息。
当SM2=1时,且RB8=0,表示在多机通信情况下,接收的信息为“数据帧”,但不是发给本从机的,此时RI不置“1”,因而SBUF中接收的数据帧将丢失。
3)方式3:
11位异步收发。
方式3为波特率可变的11位异步通信方式,除了波特率区别之外,其他方式都与方式2相同。
4)方式0:
在方式0下,串行口作同步移位寄存器用,以8位数据为一帧,先发送或接收最低位,每个机器周期发送或接收一位,故其波特率固定为“F/12”。
串行数据由RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)端送出.这种方式常用于扩展I/O口,可以外接74165或者74164.
方式0发送:
当1个数据写入发送缓冲器SBUF时,串行口即把8位数据以F/12的波特率从RXD端口送出,发送完后将中断标志TI置“1”。
方式0接收:
REN是串行接收允许控制位。
REN=0时禁止接收;REN=1时允许接收。
当接收到8位数据时,将中断标志RI置“1”。
3.3.2十字路口交通灯模拟控制器串口设计
本例设计串口若悬河工作于工作方式0,即同步移位寄存器状态
MOVSCON,#00H;串口工作方式0
传送数据语句如下:
MOVDPTR,#SEGTABI;字形码0~9地址
MOVA,DIS-LB;低位数据
MOVCA,@A+DPTR;查表
MOVSBUF,A;发送数据
DL1:
JNBTI,DLI;查询是否发送完一个字节
CLR
3.3.3关于字形编码
根据各管的接线形式,可分成共阴极型和共阳极型。
给LED数码管的七个发光二极管加不同的电平,二极管显示不同亮暗的组合就可以形成不同的字形,这种组合称之为字形码。
显示字型
H
G
F
E
D
C
B
A
共阴极字形码
共阳极字形码
0
0
0
1
1
1
1
1
1
0X3F
0XC0
1
0
0
0
0
0
1
1
0
0X06
0XF9
2
0
1
0
1
1
0
1
1
0X5B
0XA4
3
0
1
0
0
1
1
1
1
OX4F
0XB0
4
0
1
1
0
0
1
1
0
0X66
0X99
5
0
1
1
0
1
1
0
1
0X6D
0X92
6
0
1
1
1
1
1
0
1
0X7D
0X82
7
0
0
0
0
0
1
1
1
0X07
0XF8
8
0
1
1
1
1
1
1
1
0X7F
0X80
9
0
1
1
1
1
1
1
1
0X6F
OX90
3.3.4主程序流程图
每个状态大致一样之举了第一状态,流程图如下图7、图8所示:
3.3.5源程序和重要注释说明
注:
程序用了伪指令方便修改时间参数这个程序具有紧急通道
DIS_LBEQU32H;时间数据高位
DIS_HBEQU33H;时间数据高位
E_PASSTEQU30;东西方向绿灯通电时间
N_PASSTEQU20;南北方向绿灯通电时间
FLASHTEQU5;黄灯闪烁时间
SECOND_FEQU20H.0;定时1S标志
INT0_FEQU20H.1;外中断0标志位
INT1_FEQU20H.1;外中断1标志位
ORG0000H
AJMPMAIN
ORG0003H;外中断0入口地址
LJMPINT_0;调至外中断0服务程序
ORG000BH;T0中断入口
AJMPT0_INT;调至T0服务程序
ORG0013H;外中断1入口地址
LJMPINT_0;调至外中断1服务程序
ORG0100H
MAIN:
;初始化程序*********************************
MOVSP,#50H;定时器T0工作于方式1,定时125MS,开起定时器0中断
MOVTMOD,#01
MOVTH0,#0BH
MOVTL0,#0DCH;串口工作于工作方式0,即移位寄存器状态
MOVSCON,#00H
SETBEA;开总中断
SETBET0;开定时器中断
SETBIT0;外中断0为脉冲触发方式
SETBIT1;外中断0为脉冲触发方式
MOVIP,#05;外中断0,1为高优先级
SETBEX0;开外中断0
SETBEX1;开外中断1
;****************************************************
MOVR2,#0
MOV20H,#0
;开始所有灯亮以便检测交通灯的好坏,亮一秒
MOVP1,#0FFH
SETBTR0
;开启定时
JNBSECOND_F,$
CLRSECOND_F
;********************************************************
T_LIGHT:
MOVR3,#E_PASST
F_STEP:
MOVP1,#24H;东西亮绿灯,南北亮红灯,即P1
MOVA,R3
LCALLH_D;调用十六-十进制程序
LCALLDIS;调用显示程序
JNBINT0_F,LP11
AJMPF_STEP
LP11:
JNBINT1_F,LP12
AJMPT_STEP
LP1