DJNZ R6,LOOP23 ; 南北左转黄灯亮600ms DEC R2 ;东西向时间减一 MOV R5,#10 ;重置循环变量 MOV R6,#15 DJNZ R0,LOOP4 ;南北向黄灯时间减一,并做循环变量 MOV R0,#2 ;全部红灯2S LOOP6: MOV P1,#00H ;四路红灯亮起 LCALL XIANSHI ;调用显示程序 DJNZ R7,LOOP6 ;1s显示 MOV R7,#25 ;重新赋值循环变量 DEC R2 ;东西方向时间减一 DJNZ R0,LOOP6 ;南北方向时间减一并且做循环变量 MOV R2,32H ;东西向绿灯时间写入 MOV A,32H ;南北向红灯时间计算 ADD A,#10 ;东西向两次黄灯等待时间加入 ADD A,33H ;东西向左转时间加入 MOV R0,A ;南北红灯时间写入 LOP1: SETB P3.4 ;P3.4置1,第二功能要求 MOV P1,#0FFH ;交通灯全灭 SETB P3.0 ;P3.0置1以便检查输入 MOV P1,#10H ;东西绿灯亮;其余红灯亮 LCALL XIANSHI ;调用显示程序 DJNZ R7,LOP1 ;1S显示结束 MOV R7,#25 ;重新赋值循环变量 DEC R0 ;南北方向时间减一 DJNZ R2,LOP1 ;东西方向时间减一,并做循环变量 MOV R2,#3 ;东西方向黄灯显示 LOP2: MOV P1,#0FFH ;交通灯灭 MOV P1,#30H ;南北向红灯,东西直通向灭 LOOP13: CLR P1.4 ;东西黄灯灭 LCALL XIANSHI ;调用显示程序相当于延时40ms DJNZ R5,LOOP13 ;东西黄灯灭400ms LOOP24: SETB P1.4 ;东西黄灯亮 LCALL XIANSHI ;调用显示程序相当于延时40ms DJNZ R6,LOOP24 ; 东西黄灯亮600ms DEC R0 ;南北向时间减一 MOV R5,#10 ;重置循环变量 MOV R6,#15 DJNZ R2,LOP2 ;东西向黄灯时间减一,并做循环变量 MOV R2,#2 ;全部红灯2S LOP5: MOV P1,#00H ;四路红灯亮起 LCALL XIANSHI ;调用显示程序 DJNZ R7,LOP5 ;1s显示 MOV R7,#25 ;重新赋值循环变量
第 13 页 共 40 页
DEC R0 ;南北方向时间减一 DJNZ R2,LOP5 ;东西方向时间减一并且做循环变量 MOV R2,33H ;东西左转绿灯时间写入 LOP3: MOV P1,#0FFH ;交通灯灭 MOV P1,#40H ;东西向左转向绿灯亮,其他红灯 LCALL XIANSHI ;调用显示 DJNZ R7,LOP3 ;延时1s MOV R7,#25 ;秒循环并重新赋值 DEC R0 ;南北时间减一 DJNZ R2,LOP3 ;东西时间减一并循环 MOV R2,#3 ;黄灯3s LOP4: MOV P1,#0FFH ;交通灯灭 MOV P1,#0C0H ;南北向红灯,东西左转灭 LOOP14: CLR P1.6 ;东西左转黄灯灭 LCALL XIANSHI ;调用显示程序相当于延时40ms DJNZ R5,LOOP14 ;东西左转黄灯灭400ms LOOP25: SETB P1.6 ;东西左转黄灯亮 LCALL XIANSHI ;调用显示程序相当于延时40ms DJNZ R6,LOOP25 ; 东西左转黄灯亮600ms DEC R0 ;南北向时间减一 MOV R5,#10 ;重置循环变量 MOV R6,#15 DJNZ R2,LOP4 ;南北向黄灯时间减一,并做循环变量 MOV R2,#2 ;全部红灯2S LOP6: MOV P1,#00H ;四路红灯亮起 LCALL XIANSHI ;调用显示程序 DJNZ R7,LOP6 ;1s显示 MOV R7,#25 ;重新赋值循环变量 DEC R0 ;东西方向时间减一 DJNZ R2,LOP6 ;南北方向时间减一并且做循环变量 LJMP START ;一轮循环结束,返回再次循环
4.2调显示时间程序
在交通灯控制系统中,除了状态灯之外,最重要的就是时间显示,交通是否顺畅,很大程度上取决于红绿灯通行的时间,所以调试程序尤其重要。 4.2.1设计思想
设计四个有效控制位选择控制南北路绿灯时间、南北路左转绿灯时间、东西路绿灯时间、东西路左转绿灯时间,这里选取P0.6,P0.7,P2.6,P2.7分别控制,当然也可集成由一路输入控制,通过计数判断当前状态要修改哪一路信息,为了检测方便和调试程序,本设计分开设置。检测到被调控的显示时间后转入执行相应的调整程序,调整程序中根据是否按下加(P3.6)减(P3.7)执行相应的调整程序,调整完毕后存入新的存储空间(设计中为40H~43H),通过在主程序执行完一次之后在start程序初始赋值(设计中40H~43H重新赋值给30H~33H),调时程序结束后,交通灯不会立刻发生变化,在下一次从主程序开始执行才会发生变化,并且调时结束后交通灯一直按照最新调整结果进行倒计时。在设计中还通过调整和显示程序一共实现延时250ms以便于对计数值修改每秒增量为4,同时也达到了消抖的功能。
第 14 页 共 40 页
4.2.2设计重要部分流程图 调用显示延时200ms 调整结束? 开 始 Y N N N N N 东西左转南北左转南北有效? 东西有效? 有效? 有效? Y Y Y Y T2 调整T5 调整调整T4 调整T3 子程序调控图 开始 程序返回 写入调整初值 调用显示并延时40ms N N 减有效? 加有效? 变量加1 变量减1 Y Y 赋值最大 赋值最大超界限? 超界限? 调整值 调整值 N N 保存结果
结束 第 15 页 共 40 页
4.2.3调显示汇编程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;调整时间服务程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;注意:调整后的时间在第二轮计时才会显示,第一轮仍按照原定时间; TZ1:MOV R1,#00 ;调整寄存器赋初值 MOV R3,#00
TZ11: LCALL XIANSHI1 ;调用显示程序 LCALL XIANSHI1 ;连同下面调时共延时5X40ms LCALL XIANSHI1 LCALL XIANSHI1 JNB P3.0,FANHUI1 ;P3.0为调整结束按钮 JB P0.6,T2 ;若调整南北直通时间则跳转 JB P0.7,T3 ;若调整南北左转时间则跳转 JB P2.6,T4 ;若调整东西直通时间则跳转 JB P2.7,T5 ;若调整东西左转时间则跳转 LJMP TZ11 ;均无效时转回延时继续检测 T2: MOV R1,40H ;南北直通调整时间写入 LCALL XIANSHI1 ;调用显示并且延时40ms JB P3.6,T11 ;若调整+无效则跳转 INC R1 ;南北直通时间加1 CJNE R1,#60,T21 ;南北直通最多限制时间60S MOV R1,#00H ;若R1>=60则赋值为0重新加载 AJMP T21 ;南北向加法调整时间结束,转入赋值 T11: JB P3.7,T21 ;调整-无效则跳转 DEC R1 ;南北向直通时间减1 CJNE R1,#00H,T21 ;最大调整时间60S MOV R1,#60 ;若超出则重新赋值 T21: MOV 40H,R1 ;调整后的时间写入 LJMP TZ11 ;南北向调整完毕返回重新检测 FANHUI1:LJMP FANHUI ;因为JNB跳转范围限制,在此补加一次跳转 T3: MOV R1,41H ;南北左转调整时间写入 LCALL XIANSHI1 ;调用显示并且延时40ms JB P3.6,T12 ;若调整+无效则跳转 INC R1 ;南北左转时间加1 CJNE R1,#30,T22 ;南北左转最多限制时间30S MOV R1,#00H ;若R1>=30则赋值为0重新加载 AJMP T22 ;南北向左转加法调整时间结束,转入赋值 T12: JB P3.7,T22 ;调整-无效则跳转 DEC R1 ;南北左转向时间减1 CJNE R1,#00H,T22 ;最大调整时间30S MOV R1,#30 ;若超出则重新赋值 T22: MOV 41H,R1 ;调整后的时间写入 LJMP TZ11 ;南北左转向调整完毕返回重新检测 T4: MOV R3,42H ;东西向直通时间写入 LCALL XIANSHI1 ;调用显示程序第二功能延时40ms
第 16 页 共 40 页
相关推荐: