摘要在日常生活中信号灯的控制应用非常的广泛,它也是单片机的一种应用,针对信号灯的控制特点,我们可以利用单片机的应用来实现。设计程序模拟信号灯控制系统,实现如下功能:首先,东西路口红灯亮,南北路口绿灯亮,同时开始25秒倒计时,以7段数码管显示时间。25秒倒计时结束后开始5秒倒计时,同时南北路口的绿灯闪烁,计时到最后2秒时,南北路口黄灯亮。完成一次这样的循环总共需要30秒。30秒结束后,南北路口红灯亮,东西路口绿灯亮,并开始下一轮30秒的循环。用AT89S51单片机的并行口接发光二极管,模拟交通灯的变化规律,并用AT89S51单片机的并行口接双管数码管,显示倒计时,并仿真。欲实现上述功能,可设计两个部分:信号灯的变化规律控制的主程序,采用定时器1定时实现时间的控制同时通过逻辑分离一个数的个位与十位以及不断自减循环的思想得到需显示的倒计时数据;通过调用数码管显示的子程序实现倒计时的显示。外部中断0和外部中断1均设为边沿触发方式,当有延出发时,可以控制启动或是闭合。关键词:信号灯控制系统;单片机;数码管;倒计时1前言设计编写程序模拟信号灯控制系统,实现如下功能:首先,东西路口红灯亮,南北路口绿灯亮,同时开始25秒倒计时,以7段数码管显示时间。25秒倒计时结束后开始5秒倒计时,同时南北路口的绿灯闪烁,南北路口黄灯亮。完成一次这样的循环总共需要30秒。30秒结束后,南北路口红灯亮,计时到最后2秒时,东西路口绿灯亮,并开始下一轮30秒的循环。用AT89S51单片机的并行口接发光二极管,模拟交通灯的变化规律,并用AT89S51单片机的并行口接双管数码管,显示倒计时,并仿真。该设计采用定时器1定时控制时间,外部中断控制信号灯系统的开启与闭合的思想。使问题变得简洁明了。2系统总体方案设计图2.1信号灯控制系统方框图3硬件电路设计3.1.1单片机主控电路设计图3.1单片机主控电路设计单片机主控倒计时显示模块控键信号灯显示模块3.1.2单片机引脚资源分配单片机引脚P0.0--P0.6分别接数码管A--D的输入引脚,单片机引脚P2.0,P2.1分别接数码管的片选输入端1,2。单片机引脚P1.0接东西红灯,P1.1接南北黄灯,P1.2接南北绿灯,P1.3南北红灯,P1.4接东西黄灯,P1.5东西绿灯。单片机引脚P3.2与P3.3接按键控制开关。3.2信号灯控制模块电路设计图3.2信号灯控制电路设计3.3倒计时显示模块电路设计图3.3倒计时显示模块电路设计4软件流程设计4.1主程序流程图图4.1主程序流程图外部中断初始化Start=0?等待中断开始(a)19h(a)存于30单元(b)0ah(a)除以(b)商存于(r6)余数存于(r5)调用10次数码管显示子程序(a)(30h)T1定时器初始化是否(30h)(30h)-1(a)=0?是否重置定时初值(a)存于31单元(a)除以(b)商存于(r6)余数存于(r5)调用10次数码管显示子程序(a)(31h)(a)=2?是(a)05h(b)0ah(31h)(31h)-1否东西绿(红)灯亮,南北红(绿)灯亮东西(南北)绿灯闪东西(南北)黄灯亮(a)=0?否是4.2数码管显示子程序流程图图4.2数码管显示子程序流程图置字型表头地址开始将字型码送出显示取出十位字型码数码管位选通第一片不选通第一片取个位显示数据取出个位字型码tf1=1?数码管位选通第二片不选通第二片Tf1清零,返回主程序取十位显示数据是否将字型码送出显示5源程序代码;**********信号灯控制系统主程序************startbit00h;s1键按下置位,s2键松开时清0org0000hajmpmainorg0003hajmpintrp;外部中断0入口,交通灯开始工作org0013hajmpexit;外部中断1入口,交通灯停止工作main:anlp1,#00hanlp0,#00hsetbex0;允许外部中断0中断setbit0;外部中断0为边沿触发方式setbex1;允许外部中断1中断setbit1;外部中断1为边沿触发方式setbea;cpu开中断clrstart;清start标志位loop1:jnbstart,$;start=“0”时,等待begin:movsp,#60h;建堆栈movtmod,#10h;设定时模式movth1,#0d8h;设初值,定时100毫秒movtl1,#0f0hsetbtr1;启动定时器1;东西绿灯·南北红灯亮25sfix251:mova,#19h;给a寄存器赋25dis11:mov90h,#28hmov30h,a;将a中的数值存于30单元movb,#0ah;给b寄存器赋10divab;a寄存器的值除以b寄存器的值movr6,a;取商存放在r6movr5,b;取余数存在r5movr7,#10;给r7赋10fan11:lcallloop;调用数码管显示子程序djnzr7,fan11dec30h;30单元的值自减1mova,30h;将30单元的值传送给寄存器jzfix51sjmpdis11;东西黄灯亮,南北绿灯闪烁5sfix51:movtmod,#10hmovth1,#0d8hmovtl1,#0f0hmova,#05hmovr0,#3dis21:mov31h,amovb,#0ahdivabmovr6,amovr5,bmovr4,#10clrp1.3fan21:setbp1.5lcallloopclrp1.5djnzr4,fan21djnzr0,lp1setbp1.4lp1:dec31hmova,31hjzfix252sjmpdis21;东西红灯.南北绿灯亮25sfix252:movth1,#0d8h;设初值,定时100毫秒movtl1,#0f0hmova,#19h;给a寄存器赋25dis12:mov90h,#05hmov30h,a;将a中的数值存于30单元movb,#0ah;给b寄存器赋10divab;a寄存器的值除以寄存器的值movr6,a;取商存放在r6movr5,b;取余数存在r5movr7,#10;给r7赋10fan12:lcallloop;调用数码管显示子程序djnzr7,fan12dec30h;30单元的值自减1mova,30h;将30单元的值传送给寄存器jzfix52sjmpdis12;南北黄灯亮,东西绿灯闪烁5sfix52:movtmod,#10hmovth1,#0d8hmovtl1,#0f0hmova,#5hmovr0,#3dis22:mov31h,amovb,#0ahdivabmovr6,amovr5,bmovr4,#10clrp1.0fan22:setbp1.2lcallloopclrp1.2djnzr4,fan22djnzr0,lp2setbp1.1lp2:dec31hmova,31hjzzhsjmpdis22zh:ljmpfix251;**********数码管动态显示子程序*************loop:movdptr,#tab;字型表头地址送dptrmova,r6;取出欲显示数据movca,@a+dptr;取出字型码movp0,a;送出显示setbp2.0;位选控制clrp2.0mova,r5movca,@a+dptrmovp0,asetbp2.1clrp2.1jbctf1,returnsjmplooptab:db3fh,06h,5bh,4fh,66h,6dhdb7dh,07h,7fh,6fh,77h,7chdb39h,5eh,79h,71h,40h,00hreturn:retdingshi:movtmod,#10hmovth1,#0d8hmovtl1,#0f0hdjnzr7,loopljmpfix251intrp:setbstart;s1键按下时,置位startretiexit:anlp1,#00h;s2键按下时,所以灯灭clrstart;start清0popaccpopaccmovdptr,#loop1;地址压栈pushdpl;中断强制返回至处pushdphretiend6系统仿真图6.1东西路口绿灯亮,南北路口红灯亮,同时25秒倒计时,此时计到18秒图6.2开始5秒倒计时同时东西路口绿灯闪烁,此时绿灯刚好闪烁,并记时在4秒图6.325秒倒计时结束后开始5秒倒计时同时南北绿灯闪烁,计到最后2秒时东西路口黄灯亮,此时刚好计到最后2秒,南北路口绿灯闪烁,东西路口黄灯亮7课程设计的总结与体会(1)通过本次课程设计使我对单片机产生了更加浓厚的兴趣,我深深体会到单片机的应用是很实用的技术,同时我认识到了硬件与软件密切结合的应用。(2)本次课程设计的难点是数码管的倒计时显示,刚开始对数码管的动态显示似懂非懂,通过上网查询资料和查阅相关书籍使我基本掌握数码管的应用。(3)中断系统的应用能够有效控制信号灯的启动与关闭,定时器的使用是信号灯的变化和倒计时时的显示同步实现。同时在准确度上来说时间的差错较小。(4)在本次课程设计中我深深体会到了与同学们交流学习心得的充实与快乐,大家互相帮助,互相探讨问题加快了我们学习的进步。(5)我非常感谢我们的老师,他教与我们许多单片机的知识,让我们了解单片机以及基本掌握了单片机的原理与应用,同时我还想感谢我的指导老师,感谢她的指导以及对我们课程设计的严格要求,在他们的帮助下使我顺利完成了本次课程设计。参考文献资料[1]孙涵芳,徐爱卿.MCS-51/96系列单片机原理及应用(修订版)[M].北京:北京航空航天大学出版社,1996.[2]石柯,阳富民,胡贯荣.基于UML的嵌入式系统模型验证机制的研究[J].计算机工程与应用,2001.[3]李朝青.单片机原理及接口技术(简明修订版).北京:北京航空航天大学出版社,1999.[4]何立民.单片机高级教程.北京航空航天大学出版社,2004.致谢我之所以能够顺利完成课程设计,是与许多人的关心和帮助分不开的。首先我要感谢的是担任我们单片机教学的陈玮老师,在他的精心教学下我学到了很多的单片机知识,掌握了一些基本的单片机应用。其次我要感谢我的课程设计的指导老师顾老师,在她的的悉心指导下,使我能够破解设计过程中的难题,顺利完成本课程设计的任务。最后我要感谢我的同学和朋友,他们给与我鼓励,帮我出谋划策,给与我生活与学习上的关心。我衷心的谢谢他们!