使用51单片机的操控二极管及数码管的显现来模仿交通灯,体系晶振为11.0592MHZ,东西方向红灯设置为30秒,南北方向红灯设置为20 秒,P1.3接一个应急按钮,按下第一次铺开,南北方向绿灯一向亮,东西方向红灯一向亮(意图是为了便利大领导通行),按下铺开第2次,南北绿灯闪3秒黄灯亮2秒后变红灯,东西方向变为绿灯,之后沿着之前的设置一向循环,下面是仿真图、程序源代码
仿真图
程序源代码如下:
作者:胡琴
联络qq:1257394091
网站:http://www.51hei.com
本程序现已经过软件仿真以及在自己建立的硬件上测试经过.
org 0000h
ajmp main
org 000bh
ajmp 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 display ;调用显现子程序
lcall key ;调用应急按键判别
ajmp 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 p2.0 ;到25秒关时刻显现
setb p2.1
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.0 ;5秒后开时刻显现
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.6 ;到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