用51单片机控制交通灯汇编语言编写讲解Word下载.docx
《用51单片机控制交通灯汇编语言编写讲解Word下载.docx》由会员分享,可在线阅读,更多相关《用51单片机控制交通灯汇编语言编写讲解Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
C实现急通车。
这需要人工实现,编程时利用到中断才能带到目的,只要有按钮按下,那么四个方向全部显示红灯,禁止以诶车辆通行。
当情况解除,让时间回到只能隔断处继续进行。
2.2总体设计框图
见图一:
三硬件设计
3.1LED循环电路设计
3.1.189cs51单片机概述
MCS-51单片机内部结构:
89CS51是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。
89CS51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等极大单元及数据总线、地址总线和控制总线等三大总线,现在分别加以说明。
*中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统的工作,完成运算和控制输入输出等操控。
*数据存储器(RAM):
89CS51内部有128个8位用户数及存储单元和128个寄存器单元,他们是统一编址的,专营寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户自定义的字型表。
*程序存储器(ROM):
89CS51共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
*定时/计数器(ROM):
89CS51有两个16位的可编程定时/计数器,一时想定时或计数产生中断用于控制程序转向。
*并行输入输出(I/O)口:
89CS51共有4组8位I/O口(P0、P1、P2或P3),用于对外数据传输。
*全双工串行号:
89CS51内置一个全双行串行通信口,用于与其它设备间的串行数据传输,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
*中断系统:
89CS51具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,客满著不同的控制要求,并具有2级优先级别选择。
*时钟电路:
89CS51内置最高频率高达12Hz的时钟电路,用于产生整个单片机运行的脉冲时序,但89CS51单片继续外置震荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。
MCS-51系统的引脚说明:
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,图二是它们的引脚配置,40个引脚中,正电源和底线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用
图二
8951的抚慰方式可以自动复位,也可以是手动复位,见下图。
除此之外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可以接上没用电源,以保证单片机内部RAM的数据不丢失。
在编程时,EA/Vpp脚还需加上21V的编程电压。
3.1.2LED循环说明
东西、南北两干道交于一个十字路口,各干道有一组红、绿、黄三色的指示灯,指挥车辆和行人的安丘按通行。
红灯禁止通行,绿灯亮允许通行。
黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西,南北两干道的公共停车时间。
状态
1
2
3
4
循环
时间
45s
5s
。
南北通道
红灯亮
绿灯亮
黄灯闪
东西通道
上表说明东西路口亮绿灯的同时,南北路口红灯亮,同时开始45s倒计时。
倒计时结束后开始5s倒计时,东西黄灯闪烁南北还是亮红灯,计时结束后状态交换然后依次循环下去。
完成一次这样的循环要50s。
电路图如图三所示。
图三
3.2倒计时显示电路
3.2.174LS164芯片
74LS164用于扩展并行输出口。
用89CS51串行口外接164串入-并出移位寄存器扩展8位并行口。
8位并行口的每位分别接到数码显示管的不同显示端。
74LS164芯片管脚排列如下图,管脚1、2相连共同接单片机管脚RXD,8管脚接单片机管脚TXD,9管脚接高电平,7管脚接地,14管脚接高电平,其他管脚依次接数码显示管管脚。
倒计时显示可以提醒驾驶员在信号灯灯色发生改变的时间、在“停止”和“通过”两者间作出合适的选择。
驾驶员和行人普遍都愿意选择有倒计时显示的信号控制方式,并且认为有倒计时显示的路口更安全。
倒计时显示是用来减少驾驶员在信号灯色改变的关键时刻做出复杂判断的1种方法,它可以提醒驾驶员灯色发生改变的时间,帮助驾驶员在“停止”和“通过”两者间作出合适的选择。
图四
3.2.2共阴极数码显示管
这里列出了共阴和共阳数码管的管脚平排列和内部结构。
数码管3、8管脚内部连在一起。
如果是共阳极则将其接到高电平。
如果是共阴极则将其接地。
为了数码显示管的安全这里用三个二极管与其串联来降压。
图五
3.2.3倒计时电路
倒计时显示电路如图六。
利用两个74LS164芯片并联后,其1、2管脚至单片机RXD管脚8管脚至单片机TXD管脚。
然后其他管脚依次接至数码管个管脚。
对于数码管其3、8管脚经过三个串联的二极管接地。
图六
3.2.4急通车电路
为了实现此功能,利用单片机中断达到目的。
利用一个手动按钮开关接至单片机外部中断0,同时在软件设计时将其设为最高优先级。
当有按键按下,四方全为红灯,同时将终端位置的PSW、ACC进栈保护。
当再按下按钮,将PSW、ACC出栈,回到原来的位置继续执行,电路图如下图。
4.2交通灯中的中断处理流程
(1)现场保护和现场恢复:
有特殊车辆要通过时就要进行中断,在中断之前,先将交通灯中断前情况保护好,当中断执行后再恢复现场,包括信号灯和时间显示电路。
(2)中断打开和中断关闭:
为了使特殊车辆通行按一下打开中断开关就可以打开中断,关闭中断开关就关闭中断。
(3)中断服务程序:
有中断产生,就必然有其具体的需执行的任务,中断服务程序就是执行中断处理的具体内容:
即如果南北方向有特殊车辆要求通过,南北方向转换为绿灯,东西方向为红灯;
如果东西方向有特殊车辆要求通过,东西方向转换为绿灯,南北方向为红灯。
(4)中断返回:
执行完中断服务程序后,必然要返回,即回交通灯信号回到中断前状态,显示时间也和中断前一样。
系统硬件总电路构成及原理
实现本设计要求的具体功能,可以选用AT89C51单片机及外围器件构成最小控制系统,12个发光二极管分成4组红绿黄三色灯构成信号灯指示模块,8个LED东西南北各两个构成倒计时显示模块,若干按键组成时间设置和紧急按钮。
4.3.1系统硬件电路构成
本系统以单片机为核心,系统硬件电路由状态灯,LED显示,按键,组成。
其具体的硬件电路总
图七
四软件按设计
4.1程序流程图:
如图八所示。
图八
4.2LED红绿灯显示
如图三所示,当P1端口输出高电平,即P1各端口=1时,根据发光二极管的单向导电性可知,这是发光二极管熄灭;
当P1个端口输出低电平,即P1各端口=0时,发光二极管亮。
我们可以使用SETB指令使P1各端口输出高电平,使用CLR指令时P各端口输出低电平。
至于循环需要软件控制,程序见附录。
4.3倒计时显示
此处采用LED静态显示方式,当显示器显示某个字符时,相应的段恒定的导通或截止,直到显示另个字符为止。
89C51的串行口RXD和TXD为一个全双工串行通信口,但工作在方式0下可作同步移位寄存器,其数据由RXD端串行输出或输入;
而同步移位时钟由TXD端串行输出,在同步时钟的作用下,实现由串行到并行的数据通信。
在不需要使用串行通信的场合,利用串行口加外围芯片74LS164就可构成一个或多个并行输入\输出口,用于串——并转换或显示器LED驱动。
此利用后者。
4.4急通车控制
将一按钮接到单片机外部中断0端口。
另一端接地,通过在程序里设置外部中断0为最高优先级。
当检测到有按钮按下时,产生中断,停止刚才的程序,转向中断执行。
在此过程必须利用PUSH、POP指令保护现场,这样当情况解除可以回到原来的地方继续执行。
4.5程序代码
系统工作原理
系统上电或手动复位之后,系统先显示状态灯及LED数码管,将状态码值送显P1口,将要显示的时间值的个位和十位分别送显P0口,在此同时用软件方法计时1秒,到达1s就要将时间值减1,刷新LED数码管。
时间到达一个状态所要全部时间,则要进行下一状态判断及衔接,并装入次状态的相应状态码值以及时间值,
当然,还要开启两个外部中断,其一为紧急情况处理中断,一旦信号有效,即K键为低电平时进入中断服务子程序,东西南北路口的保持现有通行状态,再按一下K键,中断结束返回。
其二为通行时间调整中断,若按键有效,进入相应的中断子程序,对时间进行调整,可延长或减少某一路段的通行时间,此后再按键则中断结束返回。
4.4其它硬件介绍及连接
显示数值
dp,g,f,e,d,c,b,a
驱动代码
11111100
FCH
01100000
60H
11011010
DAH
11110010
F2H
01100110
66H
5
10100110
B6H
6
10101110
BEH
7
11100000
E0H
8
11111110
FEH
9
11110110
F6H
0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H
五总结
在学习单片机理论课时候就感觉到内容很多,知识点很杂,分繁琐。
在老师的讲解下,在通过自己的努力也更进一步了解了单片机的内部构造和工作原理,以及接外部电路的情况。
当然光有理论知识那只是“纸上谈兵”,还需要实际动手去实践。
真正把所学的用到日常生活中,理论联系实际,做出实物模型。
这次单片机实习,我选的是交通灯设计,通过这次设计我感觉到要想做成功,必须花时间多准备,查阅大量资料,认证分析每一步每一个模块要实现的功能,然后分步进行,最后正和一个整体。
通过这次实习,我们要对所做的事情有耐性,在编程的时候会有困难,也可能变得不一定成功,所以要经过多次调试,分析,改正,反复去做。
在这次实习中,经历了多次失败的洗礼,我明白在以后学习和实践中,我要努力掌握知识,多动手,多思考,以免在以后的学习工作中犯同样的错误。
经过两周的努力工作,终于在同组人的共同合作下完成了《简易智能交通灯设计》单片机课程设计。
虽然设计仿真调试的过程很艰辛,但结果还是好的,看到仿真结果出来,看到交通灯的循环闪烁,心情顿时好起来,调试过程中的种种怨言都没有了。
这次课程设计主要是软件仿真,由于器材有限就没有弄硬件部分。
在软件的设计与调试过程中,我觉得它主要考验你的思维逻辑能力及你对指令的熟悉程度。
可以说再整个软件设计过程中,我感觉又重新学了一次单片机,在学习的过程中不仅学会了延时的两种方法,即软件延时和硬件延时,还掌握数码管的两种显示方式(即动态显示与静态显示)及其如何选择。
通过几次反复调试过程,使得我对c语言有了更深刻的理解。
在整个课程设计过程我还学会熟练使用Keil、proteus等软件,对我在今后的学习中会有很大的帮助。
同时,在这次课程设计中,老师和同组的马柱国,李臻同学给了我很大的帮助,要特别感谢他们。
参考文献
[1]叶挺秀.应用电子学[M].杭州:
浙江大学出版社,1994
[2]朱承高.电工及电子技术手册[M].北京:
高等教育出版社,1990
[3]阎石.数字电子技术基础(第三版)[M].北京:
高等教育出版社,1989
[4]周润景.PEOTEUS在MCS-51&
ARM7系统中的应用百例[M].北京:
电子工业出版社,2006
[5]李朝青.单片机原理及接口技术(第三版)[M].北京:
北京航空航天大学出版社,2005
ORG0000H
LJMPSTART
ORG0003H
LJMPINT
ORG0100H
START:
SETBIT0
MOVTMOD,#01H
SETBEA
SETBEX0
MOVTH0,#3CH
MOVTL0,#0B0H
SETBTR0
MAIN:
MOV70H,#0
MOV71H,#5
LCALLDISPLAY
MOVP1,#21H;
?
MOVR3,#45
KK1:
LCALLWAIT1
LCALLYUNSUAN
DJNZR3,KK1
MOVR3,#5
KK2:
CLRP1.0
CPLP1.2
DJNZR3,KK2
MOVP1,#12H;
MOVR3,#45
KK3:
DJNZR3,KK3
KK4:
CLRP1.1
CPLP1.3
DJNZR3,KK4
LJMPMAIN
INT:
MOVA,P1
PUSHACC
PUSH70H
PUSH71H
PUSHTH0
PUSHTL0
MOVP1,#00H
MOV58H,#0FH
OK:
CPLP1.0
CPLP1.4
CPLP1.1
CPLP1.5
LCALLDEL
DJNZ58H,OK
LJMPOK1
DEL:
MOV43H,#0FFH
DEL1:
MOV44H,#0FFH
DJNZ44H,$
DJNZ43H,DEL1
RET
OK1:
MOVA,R5
MOVP1,A
POPTL0
POPTH0
POP71H
POP70H
POPACC
RETI
WAIT1:
MOVR2,#10
KK:
JNBTF0,KK
CLRTF0
DJNZR2,KK
YUNSUAN:
MOVA,70H
JZNEXT
DEC70H
NEXT:
MOV70H,#9
DEC71H
DISPLAY:
MOVA,70H
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSBUF,A
JNBTI,$
CLRTI
MOVA,71H
TAB:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H
END