单片机课程设计报告带计时的交通灯的实现Word格式文档下载.docx
《单片机课程设计报告带计时的交通灯的实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告带计时的交通灯的实现Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
红黄绿交通灯采用发光二极管,并采用驱动芯片7404驱动其亮灭,数码管的驱动采用两片具有译码与驱动双重功能的CD4511芯片。
本设计采用了Protues7.8版仿真软件对其进行仿真,实现了与Keil软件的联合调试。
关键词:
单片机;
AT89C51;
交通灯;
数码管显示;
Proteus仿真;
Keil软件
3.2软件流程图...........................................4
1设计任务
任务要求:
设计制作一个模拟的十字路口交通信号灯控制系统,要求:
1、正常情况下东西与南北两个方向轮流点亮红、绿信号灯,每次持续时间60s,中间有3s的黄灯过渡。
2、东西、南北两个方向各设一个紧急切换按钮。
某方向按钮按下时,该方向紧急切换为绿灯,以利于特种车辆通过。
3、用数码管显示已点亮灯的剩余时间。
本小组人员分工:
崔晓晨:
程序设计,软件仿真
吴佳怡:
参与程序设计,整理报告
王金石:
搜集参考材料,帮忙整理报告
2系统硬件设计
2.1器件选择
AT89C51单片机及其最小系统,红、黄、绿3种颜色的发光二极管各4个,LED数码管2个,译码驱动芯片CD45112个,驱动芯片74046个,电阻若干
2.2硬件原理图
图2.2.1原理框图
图2.2.4复位电路
图2.2.251单片机及其最小系统
图2.2.6计时数码管驱动
3系统软件设计
3.1程序设计思路
系统正常运行时,十字路口交通灯的执行情况是:
东西方向绿灯,南北方向红灯60秒,接着黄灯3秒,然后东西方向红灯,南北方向绿灯60秒,再黄灯3秒;
之后循环这个过程。
若出现紧急状况,则需紧急切换,(正常情况下紧急开关是断开的):
若此时十字路口为东西方向绿灯,南北方向红灯,一切换,P0.0=1(按下紧急开关P0.0),经程序判断后会跳转,判断P0.1的值(开关P0.1开与断);
P0.1=0,程序顺序执行,使交通灯切换到东西红灯,南北绿灯;
直到P0.1=1,交通灯才会再次切换回来。
3.2软件流程图
3.2软件清单
软件名称
软件功能
KeiluVision4
编写程序并调试
Proteus7.8
单片机及其外围电路仿真
Word
文字编辑,流程图、原理框图绘制
4设计总结
本设计比较简单,只是东西、南北方向轮流点亮信号灯,且都持续60s,中间一个3s黄灯过渡,另外一个东西、南北方向的紧急切换按钮。
硬件电路只有三个模块,比较简单;
软件采用定时器延时的方法,即通过单片机内部定时器T0产生中断来实现;
紧急切换按钮接在P0.0、P0.1上,通过在主程序中查询这两个端口的状态来决定是否进行紧急切换。
功能简单,可以说相对较少,还可以改善。
例如,增加人行道的信号灯;
使红绿灯持续点亮的时间不一致,可以切换不同的时间,以适应路况;
延时方法改为软件延时,先编写1s的子程序,再循环,等等,我们的设计还有很大的提升空间。
学无止境,并且人的潜力是无限的,以上所说的几个功能是非常那个值得我们继续研究,学习的。
还有,这次报告中的程序、原理框图,我们没有用专业绘图软件,只用了Word,效果可能不是特别好,但是让我们学会了更多的Word技巧,运用也更加熟练了。
专业绘图软件的学习也是有必要的,在以后的工作中,以备不时之需。
另外,因我之前用过Multisim这个软件,有了仿真的经验,我们组选择了仿真,并没有做实物,这一点有利也有弊吧。
我们从网上下载了软件Proteus7.8进行学习,并且仿真成功了,让我们从中学到了不少,不过,遗憾的是PCB布线我们并没有学会,这部分还需继续努力。
虽做仿真让我们学会了不少知识,但做实物而获得的动手实践能力,却没有得到锻炼。
我们现阶段的课程主要是学习理论,实践的机会相对较少,再有这样的机会定要牢牢把握住,提高自己的动手能力,把专业知识与动手实践相结合,以不断提高、深化、丰富自己。
参考文献
[1]张迎新.单片机初级教程-单片机基础.-2版北京:
北京航空航天大学出版社,2006.8
[2]李雅轩.单片机实训教程.北京:
[3]康华光.电子技术基础-数字部分.-5版北京:
高等教育出版社,2006.1
[4]楼然苗.单片机课程设计指导.北京:
北京航空航天大学出版社,2007.7
[5]周润景.Proteus在MCS-51&
ARM7系统中的应用百例.北京:
电子工业出版社,2006.10
[6]边海龙.单片机开发与典型工程项目实例详解.北京:
电子工业出版社,2008.10
[7]《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例
COUNTDATA26H;
0.1s计数单元;
****定义
SECONDDATA27H;
秒计数单元
STOREDATA2BH;
存放计时秒数
NUMBER1EQU60;
红绿灯计时秒数
NUMBER2EQU3H;
黄灯计时秒数
;
********************************************************************
ORG0000H
LJMPMAIN;
转主程序
ORG000BH
LJMPCLOCK;
转定时器T0中断
**************************************************************主程序
ORG1000H
MAIN:
MOVSP,#5AH;
堆栈指针
MOVSTORE,#NUMBER1;
调计时秒数
MOVCOUNT,#00H;
0.1S计数单元清0
MOVSECOND,STORE;
计时秒数进秒计数单元
MOVTMOD,#01H;
设定计时器工作方式1
MOVTL0,#0B0H;
设置T0初值(3CB0H=0.05s)
MOVTH0,#3CH
SETBEA;
开中断
SETBET0;
定时器T0中断允许
MOVTCON,#10H;
启动定时器T0
MOVR2,#01H;
先设东西向绿灯亮
MOVP2,#01H;
输出东西绿灯、南北红灯
QIEH:
JBP0.0,QIEH1;
判断P0.0=1,跳转;
P0.0=0,顺序执行
SJMPQIEH
QIEH1:
JBP0.1,QIEH2;
判断P0.1=1,跳转;
P0.1=0,顺序执行
MOVP2,#02H;
输出南北绿灯、东西红灯
QIEH2:
******************************************************定时器T0中断子程序
ORG1400H
CLOCK:
PUSHPSW;
保护
PUSHACC
SETBRS0
MOVR0,#00H
MOVR1,#00H
再设置T0初值
MOVTH0,#3CH
INCCOUNT
MOVA,COUNT
CJNEA,#0EH,DONE;
0.1s计数单元不满20则转
0.1s计数单元满20则清0
DJNZSECOND,OUT2;
秒计数单元减1不为0则转OUT2十进制转换程序,为0顺序执行
MOVA,SECOND
JMPOUT
OUT2:
MOVA,SECOND;
开始十进制转换程序
OUT0:
CLRC
SUBBA,#0AH
JCOUT1
INCR0
JMPOUT0
OUT1:
ADDA,#0AH
MOVR1,A
MOVA,R0
SWAPA
ANLA,#0F0H
ADDA,R1
OUT:
MOVP1,A;
剩余秒数BCD码由P1口输出
CJNEA,#00H,DONE;
剩余秒数不为0则跳转
MOVA,STORE;
剩余秒数为0则转换计时秒数
CJNEA,#NUMBER1,LOOP0
MOVSTORE,#NUMBER2
MOVSECOND,STORE
MOVP2,#04H;
输出黄灯
LJMPDONE
LOOP0:
MOVSTORE,#NUMBER1
MOVA,R2
CJNEA,#00H,LOOP1
INCR2
LJMPDONE
LOOP1:
MOVR2,#00H
DONE:
POPACC
POPPSW
RETI
END