基于单片机控制的交通灯控制器.docx
《基于单片机控制的交通灯控制器.docx》由会员分享,可在线阅读,更多相关《基于单片机控制的交通灯控制器.docx(11页珍藏版)》请在冰豆网上搜索。
基于单片机控制的交通灯控制器
基于单片机控制的交通灯控制器
摘要:
本次单片机课程设计选择的题目是交通灯程序设计,主要是根据本学期所学的《单片机原理和接口技术》的知识,编写交通灯的控制程序,在WAVE6000集成调试软件上进行编译,并在Proteus7Professional软件上进行仿真,观看结果。
在经过多次的调试和电路上的修改,实现了所需要的结果(达到了设计任务书上的要求)。
主要涉及的内容包括倒计时、中断等,使用芯片80C51进行程序控制。
关键词:
AT89C51 LED显示 交通灯
1.引言
当今,红绿灯安装在各个道口上,已经成为数到交通车辆最常见和最有效的手段。
但这一技术在19世纪就已出现了。
红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,死机遇到红灯时按一下喇叭,就是红灯变为绿灯。
红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉有人要过马路。
红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。
2.总体设计方案
2.1设计思路
一个完整的交通灯相当于一个简单的单片机系统,该系统有交通灯设置电路、单片机、显示电路等构成。
单片机是集成的IC芯片,只需根据实际设计要求选型。
其他部分都需要根据应用要求和性能指标自行设计。
基于单片机的交通灯的设计时要充分的认识以下问题:
因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。
假设一个十字路口为东西南北走向。
初始状态0为东西红灯,南北红灯。
然后转状态1南北绿灯通车,东西红灯。
过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。
再转状态3,东西绿灯通车,南北红灯。
过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。
最后循环至状态1。
该系统控制红黄绿四组12个发光二极管的亮灭,真实模拟双干线交通信号的管理,实现交通的安全畅通运行。
该系统设置东南西北四个方向的四组红黄绿灯,并设置两对两位LED显示器,在正常情况下,交通灯的转换状态如表1
表1交通灯状态转换表
状态
持续时间
东
西
南
北
红
黄
绿
红
黄
绿
红
黄
绿
红
黄
绿
1
30
灭
灭
亮
灭
灭
亮
亮
灭
灭
亮
灭
灭
2
5
灭
闪
灭
灭
闪
灭
亮
灭
灭
亮
灭
灭
3
30
亮
灭
灭
亮
灭
灭
灭
灭
亮
灭
灭
亮
4
5
亮
灭
灭
亮
灭
灭
灭
闪
灭
灭
闪
灭
2.2设计方框图
该系统需要一个12位的输出口用于连接四个方向上的信号灯,需要扩展4位LED显示器,没两位一组,分别用于两个方向信号灯的持续时间,总体方案如图1所示。
图1总体方案框图
3.交通灯的设计程序框图
开始
图2主程序流程图
按照上述流程图,内部数据存储器分配如下:
(1)0H—7FH:
堆栈;
(2)CH—5FH:
显示缓冲区;
(3)5BH:
定时溢出次数计数;
(4)5AH:
秒计数器;
(5)20H:
状态标志单位;
(6)其他:
数据缓冲区。
4.系统硬件电路的设计
本系统中,P0,P1口中的12条I/O线用作四组12个交通灯的输出口,P2口的8条I/O线用于LED显示器的段码输出,P3口中的4条I/O线用于LED显示器的位选输出,计时以倒计时的方式将剩余时间显示在LED显示器上。
交通灯的控制顺序从P0.0到P1.3的顺序依次是东绿黄红,南绿黄红,西绿黄红,北绿黄红。
单片机选用Intel生产的8255,由于其内存足够,因此,采用最小系统即慢走要求,不需要进行外部扩展。
晶振频率选择6MHZ,VCC的选择电压为24伏。
交通灯控制系统的原理图如图3所示
图3交通灯管理系统电路
管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
5.结论与心得
本次单片机程设计收获颇丰,不仅对于WAVE6000集成调试软件和Proteus7Professional软件有了进一步的熟悉,使用WAVE6000集成调试软件进行了C语言的程序编写与编译,也再次的复习了本学期所学的知识。
本学期学习了《单片机原理与接口技术》这门功课,主要学习了使用汇编语言进行编写程序,利用单片机实现其功能。
这次的课程设计,根据所学知识,包括LED的显示、倒计数器、中断等,进行交通灯程序的设计,对于软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,也对单片机的使用有了更深刻的了解。
在Proteus7Professional软件进行仿真,看到了所编程序所实现的功能,完全达到了课程设计的要求。
也通过这次的课程设计,对使对AT89C51上实现功能,有了更多的了解与认识,也因为学习单片机汇编语言,所以很快就摸清了门路。
整个设计过程很顺利。
通过这次的课程设计,对《单片机原理与接口技术》所学的知识有了更进一步的了解,也看到单片机的优点。
收获颇丰。
存在的不足及建议:
由于实验室机器的落后,电脑的病毒太多,导致多次劳动的成功打了水漂。
实验室电脑不能连网,交流不便。
参考文献
[1]张毅刚《单片机原理及应用》高等教育出版社1995年.
[2]彭冬明韦友春《单片机实验教程》北京理工大学出版社1997年.
[3]曾屹.单片机原理与应用[M].湖南:
中南大学出版社,2009年.
[4]叶挺秀.应用电子学[M].杭州:
浙江大学出版社,1994年.
[5]朱承高.电工及电子技术手册[M].北京:
高等教育出版社,1990年.
[6]阎石.数字电子技术基础(第三版)[M].北京:
高等教育出版社,1989年.
附录1
交通灯程序:
ORG0000H
LJMPMAIN
ORG0003H
LJMPKK
ORG000BH
LJMPMMM
ORG0013H
LJMPLL
ORG0200H
MAIN:
MOVSP,#30H
SETBPX0
SETBPT0
MOVTCON,#10H
MOVIE,#87H
MOVTMOD,#06H
MOVTH0,#0FFH
MOVTL0,#0FFH
LOOP:
MOVA,#0F3H
MOVP2,A
MOVR1,#185
DIP1:
ACALLDELAY
DJNZR1,DIP1
MOVR1,#15
WAN1:
CPLP2.2
ACALLDELAY
DJNZR1,WAN1
MOVA,#0F5H
MOVP2,A
MOVR1,#10
YL1:
ACALLDELAY
DJNZR1,YL1
MOVA,#0DEH
MOVP2,A
MOVR1,#185
DIP2:
ACALLDELAY
DJNZR1,DIP2
MOVR1,#15
WAN2:
CPLP2.5
ACALLDELAY
DJNZR1,WAN2
MOVA,#0EEH
MOVP2,A
MOVR1,#10
YL2:
ACALLDELAY
DJNZR1,YL2
AJMPLOOP
KK:
CLREA
PUSHA
SETBEA
MOVA,#0F3H
MOVP2,A
MOVR2,#100
DEY0:
ACALLDELAY
DJNZR2,DEY0
CLREA
POPA
SETBEA
RETI
MMM:
CLREA
PUSHA
SETBEA
MOVA,#0DEH
MOVP2,A
MOVR2,#100
DEY1:
ACALLDELAY
DJNZR2,DEY1
CLREA
POPA
SETBEA
RETI
LL:
CLREA
PUSHA
SETBEA
MOVA,#0F3H
MOVP2,A
MOVR1,#85
DIP3:
ACALLDELAY
DJNZR1,DIP3
MOVR1,#15
WAN3:
CPLP2.2
ACALLDELAY
DJNZR1,WAN3
MOVA,#0F5H
MOVP2,A
MOVR1,#10
YL3:
ACALLDELAY
DJNZR1,YL3
MOVA,#0DEH
MOVP2,A
MOVR1,#85
DIP4:
ACALLDELAY
DJNZR1,DIP4
MOVR1,#15
WAN4:
CPLP2.5
ACALLDELAY
DJNZR1,WAN4
MOVA,#0EEH
MOVP2,A
MOVR1,#10
YL4:
ACALLDELAY
DJNZR1,YL4
CLREA
PopA
SETBEA
RETI
DELAY:
MOVR5,#20
D1:
MOVR6,#20
D2:
MOVR7,#248
DJNZR7,$
DJNZR6,D2
DJNZR5,D1
RET
END
附录2
PCB图