交通灯控制Word格式.docx
《交通灯控制Word格式.docx》由会员分享,可在线阅读,更多相关《交通灯控制Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
前提:
本次设计,是针对实际要求,灵活应用所学知识,独立进行系统综合设计的过程,以达到巩固单片机基础知识、掌握单片机系统开发过程和提高动手实践能力的目的。
要求:
某十字路口,设计一个十字路口交通灯信号控制器,指挥交通车的通行。
要求如下:
1)东西通道和南北通道交替通行,东西通道每次放行时间大于南北通道每次放行时间。
2)绿灯亮表示可以通行,红灯亮表示禁止通行。
3)每次绿灯变红灯时,绿灯先闪转变黄灯(此时另一干道上的红灯不变)。
4)十字路口要有数字显示,作为时间提示,以便人们更直观地把握时间。
具体要求东西通道、南北通道通行时间及黄灯亮的时间均以秒为单位作减计数。
二.硬件电路说明
MCS-51单片机是美国INTE公司于1980年推出的产品,典型产品有8031(内部没有程序存储器,实际使用方面已经被市场淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51的5倍,实际使用方面已经被市场淘汰)和8751等通用产品,一直到现在,MCS-51内核系列兼容的单片机仍是应用的主流产品(比如目前流行的89S51、89C51等),各高校及专业学校的培训教材仍与MCS-51单片机作为代表进行理论基础学习。
<
1>
电路工作原理:
本设计是以89C51为主控芯片,利用P1口控制74LS240(八反相缓冲器,线驱动器)驱动发光二极管模拟交通灯。
倒计时显示部分采用串口实现。
串口工作在方式0时通过外接移位寄存器74LLS164实现串并转换。
需要显示的数据经RXD端输出经过74LS164串并转换输出到共阳极的LED数码管显示,利用T0定时器进行1S定时。
2>
原理图中部分构成说明:
1、单片机的最小系统:
晶振和时钟电路
2、74LS240和74LS164
由于单片机的驱动能力太弱,所以给加了驱动电路,又因为发光二极管驱动,功率不大所以我选用了八反相缓冲器/8位三态门电路74LS240
设计采用164把串行口逐位输出的数据进行串并转换进而控制LED的显示
74LS164的真值表和构成如下图:
3、改进部位
本设计添加了应急通行,用按钮开关控制东西南北的应急通行信号。
其中东西方向接外中断0南北接外中断1,按一下按钮该方向通行,另外方向停止,按两下恢复原样。
三.软件部分说明:
(1)、定时/计数器介绍:
定时/计数器的四种工作方式:
工作方式0:
定时/计数器的工作方式0称之为13位定时/计数器方式。
它由TL的低5位和TH的8位构成13位的计数器,此时TL的高3位不用。
工作方式1:
工作方式1是16位的定时/计数器方式,将TMOD的M1M0设为“01”即可,其他特性与工作方式0相同。
工作方式2:
在工作方式2中,只有8位参与计数,而高8位是不参与计数的,用作预置数的存放,这样计数范围就小了,每当计数溢出,就会打开T0的高、低8位之间的开关,预置数就进入低8位。
当然这是由硬件自动完成的,不需要我们去操心。
通常工作方式2用于波特率发生器,对于这种用途,定时器就是为了提供一个时间基准,计数溢出后不需做任何的事情,要做的仅仅只有一件,就是重新装入预置数,再开始计数,而且中间不能有任何的延迟,可见这个任务用这种工作方式来完成是最妙不过了。
工作方式3:
在这种工作方式下,T0被拆成2个独立的定时/计数器来用。
其中,TL0可以构成8位的定时器或计数器工作方式;
而TH0则只能作为定时器用,我们知道定时/计数器使用时需要有控制,计满后溢出需要有溢出标记,T0被分成两个来用,那就要两个控制及溢出标记了,从何而来呢?
TL0还是用原来的T0的标记,而TH0则借用T1的标记,如此一来T1不是标记、控制可用了吗?
是的,在一般情况下,只有在T1以工作方式2运行时,才让T0工作于方式3。
(2)、定时1S
十字路口交通灯模拟控制器定时器采用工作方式1,先定时125MS,然后在定时中断程序中累加中断次数,8次为一秒,这样就可以起到定时1S的功能。
工作方式由工作方式控制寄存器(TMOD)决定,FR寄存器TMOD用于2个定时器/计数器T1/T0的工作方式设定,各位的含义表示如下:
GATE:
门控位,定义T1/T0的启动方式,
C/T-:
定时/计数功能选择位。
为“0”作定时器用;
为“1”,作计数器用。
M1M0:
工作方式选择位。
00方式013位计数器
01方式116位计数器
10方式2初值自动重装8位计数器
11方式32个8位计数器,仅适用于T0
由于十字路口交通灯模拟控制器设计采用6M晶振,因此定时125MS,可用下列语句实现。
工作方式1是16位计数结构的工作方式,计数器由TH全部8位和TL全部8位构成。
初始化如下:
MOVTMOD,#01
MOVTH0,#3CH
MOVTL0,#0B0H
定时1S在定时器0中断程序中完成,即计数八次为1S。
定时器中断初始化程序如下:
SETBEA;
开中断
SETBET;
定时器0允许中断
SETBTR;
开始定时、
中断流程图如下图:
(3)、中断的初始化步骤:
、要使用中断则首先必须中断中断允许。
、硬件的初始化:
设置引脚连接设置I/O口的输入输出。
3>
、软件的初始化:
设置中断寄存器,设置中断服务地址,清除中断标志,设置中断触发模式。
4>
、使能中断.
外中断程序:
对于外中断必须有中断的初始化程序、中断服务程序。
外中断是由外部原因引起的中断,有两个中断源,即外中断0和外中断1,中断请求信号由引脚P3.2和P3.3输入。
外中断请求信号弹有两种方式,一是电平方式,二是脉冲方式,可通过有关控制位的定义进行规定。
电平方式为低电平有效,只需在单片机的(INT0)和(INT1)中断请示输入端采样到有效的低电平时,就会激活外部中断。
脉冲方式则在脉冲的后负跳沿有效,即在相邻两个机器周期对中断请求引入端电平进行采样中,如前一次为高,后一次为低即为有效中断请求。
这就要求在这种中断方式,中断请求信号的脉冲宽度必须大于一个机器周期,以保证电平变化能被单片机采样到。
(4)、中断控制寄存器的状态设置
设计中采用定时器中断,外中断0,外中断1。
定时器中断、外中断、串口中断控制如下,其中外中断0、1优先级最高,保证了应急通行的需求。
MOVSCON,#00H;
工作于工作方式0,既移位寄存器状态
SETBES;
开总中断
SETBET0;
开定时器中断
SETBTR0;
启动T0定时器
SETBIT0;
外中断0为脉冲触发方式
SETBIT1;
MOVIP,#05;
外中断0,1为高优先级
SETBEX0;
开个中断0
SETBEX1;
开外中断1
外中断程序逻辑流程:
否
是
(5)串口工作方式设计
(1)、串口有4种方式:
方式0、1、2、3,由串口控制寄存器SCON和PCON控制。
10方式0同步移位寄存器
11方式110位异步收发
20方式211位异步收发
31方式311位异步收发
十字路口交通灯模拟控制器串口设计
本例设计串口若悬河工作于工作方式0,即同步移位寄存器状态
串口工作方式0
传送数据语句如下:
MOVDPTR,#SEGTABI;
字形码0~9地址
MOVA,DIS-LB;
低位数据
MOVCA,@A+DPTR;
查表
MOVSBUF,A;
发送数据
DL1:
JNBTI,DLI;
查询是否发送完一个字节
CLRTI
(6)字形编码:
根据各管的接线形式,可分成共阴极型和共阳极型。
给LED数码管的七个发光二极管加不同的电平,二极管显示不同亮暗的组合就可以形成不同的字形,这种组合称之为字形码。
显示字型
H
G
F
E
D
C
B
A
共阴极字形码
共阳极字形码
1
0X3F
0XC0
0X06
0XF9
2
0X5B
0XA4
3
OX4F
0XB0
4
0X66
0X99
5
0X6D
0X92
6
0X7D
0X82
7
0X07
0XF8
8
0X7F
0X80
9
0X6F
OX90
四、源程序和重要注释说明:
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入口地址
调至外中断1服务程序
ORG0100H
MAIN:
;
初始化程序*********************************
MOVSP,#50H
MOVTMOD,#01;
定时器T0工作于方式1,定时125MS,开起定时器0中断
MOVTH0,#0BH
MOVTL0,#0DCH
MOVSCON,#00H;
串口工作于工作方式0,即移位寄存器状态
MOVIP,#05;
开外中断0
;
****************************************************
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
LP12:
JNBSECOND_F,$;
显示上面数据1S
CJNER3,#0,F_STEP;
变化显示数据
****************************
MOVR3,#FLASHT;
东西亮绿灯,南北闪烁黄灯
S_STEP:
MOVA,R3
MOVP1,#22H
LCALLH_D
LCALLDIS
JNBINT0_F,LP21
是否第一次出现外中断0,是转东西亮绿灯,南北亮红灯,
;
否则检测外中断1信号是否第一次出现
LP21:
JNBINT1_F,LP22
AJMPT_STEP;
外中断1第一次出现转东西亮红灯,南北亮绿灯
LP22:
JNBSECOND_F,$;
CLRSECOND_F;
示出现外中断正常显示
CJNER3,#0,LP1
LP1:
MOVP1,#02H
CJNER3,#0,S_STEP
*********************************
T_STEP:
MOVR3,#N_PASST;
南北亮绿灯,东西亮红灯
LP2:
MOVP1,#81H
JNBINT0_F,LP31
LP31:
JNBINT1_F,LP32
LP32:
CLRSECOND_F
CJNER3,#0,LP2
南北亮绿灯,东西闪烁黄灯
FORTH_STEP:
MOVP1,#41H
JNBINT0_F,LP41
LP41:
JNBINT1_F,LP42
LP42:
JNBSECOND_F,$
CJNER3,#0,LP3
LJMPT_LIGHT
LP3:
MOVP1,#40H
CJNER3,#0,FORTH_STEP
***************************
十六到十式转换
H_D:
MOVB,#10
DIVAB
MOVDIS_HB,A
JNZLP5
MOVA,#10
LP5:
MOVA,B
MOVDIS_LB,A
RET
********************************
时间显示子程序,显示两位十进制数,发光显示共阳极
DIS:
MOVR7,#2
MOVR0,#DIS_LB
DL0:
MOVA,@R0
ADDA,#0BH
MOVCA,@A+PC
MOVSBUF,A
DL1:
JNBTI,DL1
INCR0
DJNZR7,DL0
SEGTAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
T0_INT:
CLRTR0
MOVTL0,#0DCH
INCR2
CJNER2,#8,RETURN
SETBSECOND_F
DECR3
RETI
INT_0:
CLREX0;
关外中断
CLREX1
JNBINT0_F,INT0LP1;
检测外中断0信号是否第一次,是则置位
CLRINT0_F;
外中断0信号第二次出现,恢复数据,启动定时器0
MOVR3,40H
开外中断
AJMPINT0LP2
INT0LP1:
CLRTR0;
外中断0信号第一次出现,关定时器0清1S标志位
SETBINT0_F;
置位外中断0标志位
MOV40H,R3;
保存数据
MOVR3,#99;
送99S显示
INT0LP2:
INT_1:
CLREX0
JNBINT1_F,INT1LP1
CLRINT1_F
SETBEX0
AJMPINT1LP2
INT1LP1:
SETBINT1_F
MOV40H,R3
MOVR3,#99
INT1LP2:
SETBEX1
RETURN:
END
五、电路仿真原理图
六、PCB制版图
七、主程序流程图及状态显示图:
八、课程设计总结
通过这次的课程设计让我受益匪浅,设计中我把80C51,74LS240和74LS146结合起来,加上7段数码管用作显示通过51单片机进行定时和计数运用到很多联系,感觉自己的只是还是不够,所以在网上收集了很多大致的材料,进行借鉴和修改,从而我能深一步的了解控制的内容和方法,让知识连贯起来运用到实际的设计中。
通过这次的课程设计,让我受益匪浅,也让我了解和掌握了一些编程思想和对I/O接口的使用和应用的条件的思考,对单片机的各个管脚功能的理解和掌握。
实现了软件和硬件的有效结合,缺一不可。
设计让我把单片机的理论知识用在实践中,实现了理论和实践相结合,从中更懂得理论的是实践的基础,实践有能检验理论的正确性,更激发了我对专业知识的渴求,这些对我以后参加工作或者继续学习都会有很大的帮助和影响。
一个小小的单片机居然涵盖了如此之多,输入输出端口不说,还有显示部分。
用到中断、串行口、更使我对单片机的基本原理、单片机应用系统、开发过程,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。
而作为一位学生,在对交通灯的设计中,因知识和经验的不足,只能通过模仿其它的编程思路,再加上一些自己的思想去完成这个设计,因此在各个方面都会有一些不足,敬请指正。
但我会在以后的学习中逐渐去完善、巩固我的单片机知识。
、
所谓理论联系实际,控油理论知识而没有去动手操作,学的再好也还是书本上的知识,只有运用到实际中我们才可以发现利用自己所学的知识的价值,通过此次的课程设计,我更加明白了自己的知识和操作的不足,所以应当多涉猎点相关的知识并动手去做,这样才能让知识成为自己的利剑,让他大放异彩!
参考文献
(1)、倪志莲.《单片机应用技术》,北京理工大学出版社。
(2)、徐根耀.《电子元器件与电子制作》。