桂林电子科技大学51单片机实验二流水灯参考
具体要求
仿真
汇编代码如下:
注:只有结束了当前状态才会识别开关,再选择状态
ORG 0000H
AJMP START
ORG 000BH
AJMP TIMING
START:
;定时器T0作为流水灯
MOV TMOD,#01H;工作方式1,50ms
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R0,#0AH; 10*50ms=0.5s ,时间改这里R0=20就是1S
MOV R1,#02H ;2*0.5S=1S ,这个时间是上面的两倍
;开中断
SETB EA
SETB ET0
SETB TR0
SETB P1
SETB P3
MOV P1,#00H;全灭
MAIN:
MOV A,P3 ;开关接的P3.0,P3.1
ANL A,#03H ;保留P3.0与P3.1 ,开关如果接P3.2 和P3.3,这里03H改为0CH
CJNE A,#00H,NEXT01 ;
ACALL STATE00
AJMP MAIN
NEXT01:
CJNE A,#01H,NEXT10 ; 开关如果接P3.2 和P3.3, 01改04
ACALL STATE01
AJMP MAIN
NEXT10:
CJNE A,#02H,NEXT11 ;改08
ACALL STATE10
AJMP MAIN
NEXT11:
ACALL STATE11
AJMP MAIN
STATE00: ;状态1 P1.7<---P1.0
MOV A,#01H
WAIT00:
CJNE R1,#01H,WAIT00
INC R1
MOV P1,A
RL A
CJNE A,#01H,WAIT00
RET
STATE01: ;状态2 P1.7--->P1.0
MOV A,#80H
WAIT01:
CJNE R1,#01H,WAIT01
INC R1
MOV P1,A
RR A
CJNE A,#01H,WAIT01
RET
STATE10: ;状态3
MOV A,#03H
WAIT101:
CJNE R1,#00H,WAIT101
MOV R1,#02H
MOV P1,A
CJNE A,#0C0H,CONTINUE1
WAIT102:
CJNE R1,#00H,WAIT102
MOV R1,#02H
MOV P1,A
CJNE A,#03H,CONTINUE2
RET
CONTINUE2:
RR A
RR A
AJMP WAIT102
CONTINUE1:
RL A
RL A
AJMP WAIT101
STATE11: ;状态4
MOV A,#01H
WAIT11:
CJNE R1,#01H,WAIT11
INC R1
MOV R3,A
ORL A,P1
MOV P1,A
MOV A,R3
RL A
CJNE A,#01H,WAIT11
MOV P1,#00H
WAIT110:
CJNE R1,#01H,WAIT110
INC R1
RET
TIMING: ;定时器T0中断
PUSH A
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,DEAL
MOV R0,#08H
DEC R1
DEAL:
POP A
RETI