(1)开关键盘a、改变数码管显示的时间;b、开关控制十字路口十个方向的灯同时显示红灯且数码管显示00。
(2) 由AT89C51单片机每秒钟通过P0、P2口向74LS47的数据口送信息,由P1口显示红、绿、黄灯的燃亮情况;由7SEG-MPX2-CA显示每个灯的燃亮时间。
(3)AT89C51 P3.3为低电平时,P1口对应的红灯即四个方向的红灯亮,数码显示为00.
(4 AT89C51 P3.2有下降沿触发时,时间暂停,进入时间显示状态,当P3.6为低电平时,时间显示以240ms的速度进行加1;当P3.7为低电平时,时间显示以240ms的速度进行减1;当P1.0为低电平时,时间暂停消除,恢复正常。
(5)初始状态东西方向绿灯60秒南北方向红灯65秒。
(6)当东西方向绿灯60秒倒计时完了。进入下一阶段,东西方向黄灯3秒,且黄灯以40ms的速度闪烁;南北方向红灯5秒。
(7)当东西方向黄灯3秒倒计时完。进入第三阶段,东西方向红灯40秒;南北方向红灯2秒。
(8)当南北方向红灯2秒倒计时完。进入第四阶段,东西方向红灯38秒;南北方向绿灯35秒。
(9)当南北方向绿灯35秒倒计时完。进入第五阶段,东西方向红灯3秒;南北方向黄灯3秒,且黄灯以40ms的速度闪烁。
(10)东西方向红灯和南北方向黄灯3秒同时倒计时完毕,重新循环。
ORG 0000H ;伪指令、程序开始、中断入口地址
LJMP MAIN
ORG 0003H
LJMP ZHD1
ORG 000BH
LJMP ZHD2
ORG 0013H
LJMP ZHD3
ORG 1000H
;主程序
MAIN:MOV TMOD,#01H ;设工作方式
MOV TL0,#0F0H ;设初值 ,单片机晶振12M,定时10ms
MOV TH0,#0D8H
SETB EA ;开放总中断
SETB ET0 ;开放T0中断
SETB TR0 ;启动T0定时
SETB EX0 ;开放外中断0
SETB EX1 ;开放外中断1
SETB IT0 ;设外中断0为边沿触发
CLR IT1 ;设外中断1为低电平有效
SETB PT0
CYCLE:MOV R0,#60 ;AB方向绿灯显示时间
MOV R1,#65 ;CD方向红灯显示时间
MOV R2,#25 ;为延时1秒而用
;CD红灯 AB绿灯
LOOP1:SETB P3.4
MOV P1,#01H
SETB P1.7 ;点亮红灯
SETB P1.4 ;点亮绿灯
LCALL DISPLAY ;调用显示程序
DJNZ R2,LOOP1
MOV R2,#25
DEC R1
DJNZ R0,LOOP1
MOV R0,#3 ;AB方向黄灯显示时间
;CD红灯 AB黄灯
LOOP2:MOV P1,#01H
SETB P1.7 ;点亮红灯
SETB P1.3 ;点亮黄灯
LLJ: LCALL DISPLAY ;调用显示程序
CPL P1.3
DJNZ R2,LLJ
DEC R1
MOV R2,#25
DJNZ R0,LOOP2
MOV R0,#40 ;AB方向红灯显示时间
;CD红灯 AB红灯
LOOP3:MOV P1,#01H
SETB P1.7 ;点亮红灯
SETB P1.2 ;点亮红灯
LCALL DISPLAY ;调用显示程序
DJNZ R2,LOOP3
MOV R2,#25
DEC R0
DJNZ R1,LOOP3
MOV R1,#35 ;CD方向绿灯显示时间
;CD绿灯 AB红灯
LOOP4:MOV P1,#01H
SETB P1.5 ;点亮绿灯
SETB P1.2 ;点亮红灯
LCALL DISPLAY ;调用显示程序
DJNZ R2,LOOP4
MOV R2,#25
DEC R0
DJNZ R1,LOOP4
MOVR1,#3 ;CD方向黄灯显示时间
;CD黄灯 AB红灯
LOOP5:MOV P1,#01H
SETB P1.6 ;点亮黄灯
SETB P1.2 ;点亮红灯
LLJ1: LCALL DISPLAY ;调用显示程序
CPL P1.6
DJNZ R2,LLJ1
MOV R2,#25
DEC R0
DJNZ R1,LOOP5
LJMP CYCLE
;键盘中断程序
ZHD1: LCALL DISPLAY
JB P3.6,Q2
INC R1
INC R0
CJNE R1,#99,TIAO2
MOV R1,#00H
TIAO2:CJNE R0,#99,TIAO3
MOV R0,#00H
TIAO3:LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
JNB P1.0,Z2
Q2: JB P3.7,WAIT1
DEC R1
DEC R0
CJNE R1,#00H,TIAO
MOV R1,#99
TIAO: CJNE R0,#00H,TIAO1
MOV R0,#99
TIAO1:LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
WAIT1:JNB P1.0,Z2
WAIT: LJMP ZHD1
Z2: RETI
;时间中断程序
ZHD2: MOV TL0,#0F0H ;重先赋值
MOV TH0,#0D8H
CLR P3.4
RETI
;应急通道中断程序
ZHD3:MOV P1,#85H
MOV P0,#30H
MOV P2,#30H
JNB P3.3,ZHD3
RETI
;数显显示
DISPLAY:MOV A,R0 ;AB方向时间的显示
MOV B,#10
DIV AB ;把要显示的数的十位存放在A中,个位存放在B中
ADD A,#10H ;位选通十位
MOV P0,A ;显示十位数字
TI0: JNB P3.4,TT
SJMP TI0
TT: SETB P3.4
MOV A,B
ADD A,#20H ;位选通个位
MOV P0,A ;显示个位数字
TI1: JNB P3.4,TT1
SJMP TI1
TT1: SETB P3.4
;CD方向的显示
MOV A,R1 ;CD方向时间的显示
MOV B,#10
DIV AB
ADD A,#10H ;位选通十位
MOV P2,A ;显示十位数字
TI2: JNB P3.4,TT2
SJMP TI2
TT2: SETB P3.4
MOV A,B
ADD A,#20H ;位选通个位
MOV P2,A ;显示个位数字
TI3: JNB P3.4,TT3
SJMP TI3
TT3: SETB P3.4
RET
|