代码清单 org 0000h ljmp main org 000bh ljmp inti0 org 0030h main:mov tmod,#01h mov ie,#82h mov th0,#4ch mov tl0,#00h mov sp,#60h mov 31h,#30 ;东西绿灯初值30秒 mov 32h,#30 ;南北红灯初值30秒 clr 4fh ;清标志位 clr p1.1 ;开东西绿灯 clr p1.5 ;开南北红灯 setb tr0 ;启动T0 loop:lcall key ;调用应急按键判断 ljmp loop inti0:push psw clr ea mov th0,#4ch mov tl0,#00h inc 35h mov a,35h cjne a,#20,out ;判1秒是否到时 mov 35h,#00 jb 4fh,yi ;判别标志位 dec 31h ;东西时间每秒减1 dec 32h ;南北时间每秒减1 mov a,31h cjne a,#05,out ;判是否到25秒 setb p1.1 ;东西绿灯闪灭3秒 lcall del500ms clr p1.1 lcall del500ms setb p1.1 lcall del500ms clr p1.1 lcall del500ms setb p1.1 lcall del500ms clr p1.1 lcall del500ms setb p1.1 ;灭东西绿灯 sjmp er out:setb ea pop psw reti er:clr p1.2 ;东西黄灯亮2秒 mov 33h,#4 ;延时2秒 loop1:lcall del500ms djnz 33h,loop1 setb p1.2 ;2秒后灭东西黄灯 clr p2.1 mov 31h,#20 ;东西时间赋20秒初值 mov 32h,#20 ;南北时间赋20秒初值 setb 4fh setb p1.5 ;关南北红灯 clr p1.0 ;点亮东西红灯 clr p1.6 ;点亮南北绿灯 sjmp out yi:dec 31h ;东西时间每秒减1 dec 32h ;南北时间每秒减1 mov a,31h cjne a,#5,out ;判是否到15秒 setb p2.7 ; setb p1.6 ;南北绿灯闪灭3秒 lcall del500ms clr p1.6 lcall del500ms setb p1.6 lcall del500ms clr p1.6 lcall del500ms setb p1.6 lcall del500ms clr p1.6 lcall del500ms setb p1.6 ;关南北绿灯 clr p1.7 ;南北黄灯亮2秒 mov 34h,#4 ;延时2秒 loop2:lcall del500ms djnz 34h,loop2 setb p1.7 ;2秒后灭南北黄灯 clr p2.7 ; mov 31h,#30 ;东西时间重赋30秒初值 mov 32h,#30 ;南北时间重赋30秒初值 clr p1.1 ;点亮东西绿灯 clr p1.5 ;点亮南北红灯 setb p1.0 ;关东西红灯 clr 4fh ljmp out table:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h ;0-9数字 del1ms:mov r7,#10 ;1ms延时子程序 d1:mov r6,#50 djnz r6,$ djnz r7,d1 ret del500ms:mov r5,#5 ;500ms延时子程序 del3:mov r4,#200 del4:mov r3,#250 djnz r3,$ djnz r4,del4 djnz r5,del3 ret key:jb p1.3,keyout jnb p1.3,$ clr ea inc 36h mov a,36h cjne a,#2,key4 mov 36h,#00 setb p1.6 ;东西绿灯闪灭3秒 lcall del500ms clr p1.6 lcall del500ms setb p1.6 lcall del500ms clr p1.6 lcall del500ms setb p1.6 lcall del500ms clr p1.6 lcall del500ms setb p1.6 ;灭东西绿灯 clr p1.7 ;东西黄灯亮2秒 mov 33h,#4 ;延时2秒 loop3:lcall del500ms djnz 33h,loop3 setb p1.7 ;2秒后灭东西黄灯 setb p1.0 ;关东西红灯 setb p1.6 ;关南北绿灯 clr p1.1 ;开西绿灯 clr p1.5 ;开南北红灯 setb ea sjmp keyout key4:clr p1.6 ;开南北绿灯 clr p1.0 ;开东西红灯 setb p1.1 setb p1.2 setb p1.3 setb p1.4 setb p1.5 setb p1.7 keyout:ret end
要像这样子的流程图
|