基于单片机的交通灯控制系统研究
第4章 系统软件设计
4.1一道有车另一到无车的程序设计
主程序采用查询方式定时,有R2寄存器确定调用0.5s延时子程序的次数,从而获取交通灯的各种视角。子程序采用定时器1方式1,查询式定时,定时器定时50ms,R3寄存器确定50ms循环10次,从而获取0.5s的延时时间。
一道有车另一到无车的中断服务程序首先要保护现场,因需要用到延时子程序和P1口,故需保护的寄存器有R3、P1、TH1和TL1。保护现场时还需关中断,以防止高优先级中断(紧急车辆通过所产生的中断)出现时导致程序混论。然后,开中断,由原件查询P3.0和P3.1口,判别哪一道有车,再根据查询情况执行相应的服务。待交通灯信号出现后,保持5s的延时,然后,关中断,恢复现场,再开中断,返回主程序。
程序见附录A:一路有车一路无车中断子程序ONEBUSY
4.2出现紧急状况程序设计
出现紧急车辆时的中断服务程序也需要保护现场,但无需关中断,因其为高优先级中断,然后执行相应的服务,待交通灯信号出现后延时20s,确保紧急车辆通过交叉路口。然后,恢复现场,返回主程序。
交通信号灯模拟控制系统主程序以及中断服务程序的流程图如图所示。 源程序设计如下:
见附录A紧急情况中断子程序EMERG
4.3键盘功能处理程序设计
键盘用外部中断来处理,首先判断哪个案件按下,然后按照总体方案中规划编写每个按键的功能程序,下面列出四个按键的功能描述和处理程序。第一个键。系统由运行状态进入修改参数状态,需做以下工作:
停止倒计时。
将某一方向的红灯参数和绿灯参数调出来,送显示缓冲区。 第一个数码管闪烁,标志进入设置状态。 程序设计:
KEY1: ;第一个键功能 PUSH ACC ;保护现场
CLR TR0 ;关闭定时器,停止倒计时 LCALL RCS ;调用读系统参数子程序 SETB 54H ;第一个闪烁,其余不闪烁
14
基于单片机的交通灯控制系统研究
CLR 55H CLR 56H CLR 57H
POP ACC ;恢复现场 RETI ;中断返回
第二个键,加1键。按下表分配的位标志和显示缓冲区单元,一次对四个数码管的闪烁标志位进行判断,对相应的显示缓冲区进行加1处理(0~9变化)。程序结构如下图所示。程序如下:
KEY2:
MOV R2,55H ;第二个键功能程序 CJNZ R2,#0,KEY2A ;判断是否为0,否转移 MOV 55H,#10 ;是赋值10 KEY2A:DEC 55H ;减1 RETI
第三个键,移位键。使数码管闪烁一次移位,和第二个键配合修改四个数码管上的数据。程序结构和第二个键一样,仅是处理内容不同,进行移位操作。在编程时应注意,移到下一位闪烁时应将前面数码管的亮灭标志清0,避免移位后熄灭。
程序如下:
KEY3: ;第三个键功能 PUSH ACC ;保护现场
JNB 54H,KEY3A ;第一个数码管不闪烁 ;转移判断下一个 CLR 54H ;闪烁,清闪烁 CLR 50H ;清灭标志
SETB 55H ;置下一位闪烁,实现移位 POP ACC ;恢复现场 RETI ;中断返回
KEY3A: JNB 55H,KEY3B ;第二个数码管不闪烁转移判断下一个 CLR 55H ;闪烁,清闪烁 CLR 51H ;清灭标志
SETB 56H ;置下一位闪烁,实现移位 POP ACC ;恢复现场 RETI ;中断返回
KEY3B: JNB 56H,KEY3C ;第三个数码管不闪烁转移判断下一个
15
基于单片机的交通灯控制系统研究
CLR 56H ;闪烁,清闪烁 CLR 52H ;清灭标志
SETB 57H ;置下一位闪烁,实现移位 POP ACC ;恢复现场 RETI ;中断返回 KEY3C: ;第四个数码管闪烁 CLR 57H ;闪烁,清闪烁 CLR 53H ;清灭标志
SETB 50H ;置下一位闪烁,实现移位 POP ACC ;恢复现场 RETI ;中断返回
第四个键,运行键。操作系统重新进入指挥交通状态,需要做以下操作:
保存修改过后的参数,并替换系统的原有参数。数码管上设置的知识一个方向的红绿灯参数,另一个方向可以通过计算求得:
一个方向的红灯数据=另一个方向的绿灯数据+2(黄灯数据) 两个方向的参数一起存放到AT24C02中(调用写子程序)。 设置初始系统状态(于初始化部分一样)。 使数码管不闪烁。
启动倒计时时,进入指挥交通状态。 程序如下:
KEY4: ;第四个键功能 PUSH ACC ;保护现场 MOV A,73H ;取红灯高位 MOV B,#10 MUL AB ;乘10
ADD A,72H ;加红灯低位=南北方向红灯数据 MOV 60H,A ;南北红灯 CLR C SUBB A,#2
MOV 63H,A ;东西绿灯 MOV A,71H ;取绿灯高位 MOV B,#10
MUL AB ;乘10
ADD A,70H ;加上绿灯低位-南北方向绿灯数据
16
基于单片机的交通灯控制系统研究
MOV 62H,A ;南北绿灯 ADD A,#2
MOV 62H,A ;东西红灯 LCALL WRC ;调写参数子程序
MOV 2AH,#0 ;位50H~57H清为0,使数码管正常显示 LCALL STATUS ;调系统初始状态设置子程序 LCALL RCS ;调用读写系统参数子程序 SETB TR0 ;恢复现场 RETI
4.4 LED倒计时显示
LED计时每1秒都要刷新1次,那么计时满1秒时就要将存储时间的工作寄存器R4减1,然后送入LED显示程序中显示。下面要将时间数据R4的十位,个位分开送显P1,P0端口,首先将R4除以10,整数即十位放在A中,余数即个位放在B中,设置7段LED显示数据的数据表,用数据指针寄存器DPTR指向数据表的首地址,再加上A中的偏移量,就可以指向十位数字,然后送显即可,个位显示同理。具体程序如下:
MOV A, R4 MOV B, #10 DIV A, B
MOV DPTR, #LEDMAP MOVC A, @A+DPTR MOV P1, A MOV A, B
MOVC A, @A+DPTR MOV P3, A
LEDMAP: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
……
4.5源程序设计
见附录A
17
基于单片机的交通灯控制系统研究
结 论
通过这次交通灯的课程设计,使我得到了一次用专业知识、专业技能分析和解决现实问题的能力。使我在单片机的基本原理、单片机应用学习过程中,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为一名合格的应用型人才打下良好的基础。综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更深层次的理解和认识。在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流得到解决。
还有交通灯是我们生活中非常常见的一种东西,对于我们学以致用的这种能力得到了很好锻炼,能够为我们以后的工作于学习打下基础。
本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。系统包括人行道、左转、右转、以及基本的交通灯的功能。系统除基本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮时间以及根据具体情况手动控制等功能。由于本人的水平有限,设计中难免会有一些不合理的部分,系统的稳定性还有待提高。
18