|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
L_RED BIT P2.1
L_GREEN BIT P2.2
L_YELLOW BIT P2.3
H_RED BIT P2.4
H_GREEN BIT P2.5
H_YELLOW BIT P2.6
;主程序,选择设置红绿灯时间模式或自动调整模式
ORG 0000H
LJMP MAIN
ORG 0003H ;中断入口
LJMP INTV0
ORG 0030H
MAIN:
MOV R3, #20 ;用于嵌套50ms软件方法计时1s
MOV R0, #20 ;预设值红绿灯时间
MOV R1, #20
CLR EX0
K1:
MOV C, P3.7 ;等待检测何种模式按键按下
ANL C, P3.2
JB C, K1
JNB P3.7, F ;F键按下为自动模式,进入扫描
K2:
JNB P3.2, S ;S键按下并等待计数次数
SJMP K2
F:
LCALL DELAY
MOV R0, #30
MOV R1, #30
SETB 00H
SETB EA
SETB EX1
SJMP START
S:
LCALL DELAY
CJNE R0, #40, V1
MOV R0, #20
V1:
INC R0
JNB P0.1, $
JNB P3.6, J ;J键按下并等待计数次数
SJMP K2
J:
LCALL DELAY
CJNE R1, #40, V2
MOV R1, #20
V2:
INC R1
JNB P3.6, $
JNB P3.7, START ;设置完毕为设定时间模式,进入扫描
JNB P3.6, J
MOV P2, #0DDH ;预设信号灯状态,时间和车向
MOV R4, R0
SETB 01H
SETB EX0
;程序开始,进行每50ms扫描
START:
MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
CLR TF0
SETB TR0 ;开始50ms计时
DJNZ R3, Y ;1s是否计时完毕
MOV R3, #20
DJNZ R4, Y ;本状态是否结束,并进行下一状态设置
MOV A, P2
CJNE A, #0DDH,D1
MOV P2, #0BDH
MOV R4, #5
D1:
CJNE A, 0BDH,D2
MOV P2, #0EDH
MOV R4, R1
CLR 01H
D2:
CJNE A, #0EDH,D3
MOV P2, #0E7H
MOV R4, #5
JNB 00H, D3
LCALL DATA1
D3:
CJNE A, #0E7H,Y
MOV R2, #0DDH
MOV R4, R0
SETB 01H
Y:
MOV A, R4 ;LED倒计时显示
MOV B, #10
DIV AB
MOV DPTR, #LEDMAP
MOVC A, @A+DPTR
MOV P1, A
MOV A, B
MOVC A, @A+DPTR
MOV P0, A
LEDMAP:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
JNB 00H, WAIT ;判断是否要计数车流量
JB P3.3, WAIT ;判断是否有车经过
WAIT:
JNB TF0, WAIT ;50ms一次扫描完毕
SJMP START
INTV1:
JNB 01H, U ;判断车向
INC R5
U:
INC R6
RETI
INTV0:
SETB P3.4 ;中断服务子程序,闯红灯或紧停按键
JB P3.7, $
LCALL DELAY
CLR P3.4
RETI
DATA1:
MOV A, R6 ;车流量数据处理及红绿灯时间调整
MOV B, R0
MUL AB
MOV R6, A
MOV A , R5
MOV B, R1
MUL AB
MOV B, #10
MUL AB
MOV B, R6
DIV AB
CJNE A, #7,M1
M2:
MOV R2, #20
MOV R1, #40
SJMP OUT
M1:
JB C, M2
CJNE A, #15,N1
N2:
MOV R0, #30
MOV R1, #30
SJMP OUT
N1:
JB C, N2
MOV R0, #40
MOV R1, #20
OUT:
CLR R5
CLR R6
RET
DELAY:
MOV R2, #14H ;延时程序,用于按键消抖动
A1:
MOV R7, #0FFH
DJNZ R2, $
DJNZ R7, A1
RET
END
这是交通灯的程序,里面有程序错误,JB C,K1,不知道错到哪了?还有R4也有问题!请解答下,谢谢! |
|