;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
E_W_LEFT_R BIT P0.0 ;;东西方向定义
E_W_LEFT_G BIT P0.1
E_W_R BIT P0.2
E_W_G BIT P0.3
E_W_P_R BIT P0.4
E_W_P_G BIT P0.5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
S_N_LEFT_R BIT P0.6 ;;南北方向定义
S_N_LEFT_G BIT P0.7
S_N_R BIT P2.3
S_N_G BIT P2.2
S_N_P_R BIT P2.1
S_N_P_G BIT P2.0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BUFFER1 data 41h ;四方向数码管缓冲区定义
BUFFER2 data 42h
BUFFER3 data 43h
BUFFER4 data 44h
BUFFER5 data 45h
BUFFER6 data 46h
BUFFER7 data 47h
BUFFER8 data 48h
;;;;;;;;;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0000h
LJMP MAIN
ORG 000BH ;T0中断服务程序入口地址
LJMP T0_INT
ORG 0100H
MAIN: MOV TMOD,#01H
MOV TH0,#3CH ;定时器为50ms定时
MOV TL0,#0B0H
SETB ET0
SETB EA
SETB TR0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RESTART: MOV P0,#0A9H ;状态1LED显示
MOV P2,#05H
MOV R0,#00H
MOV R3,#40 ;R3控制南北方向数码管显示
MOV R2,#10 ;R2控制东西方向数码管显示
STATE1: CJNE R0,#20,POOL1
MOV R0,#00H ;R0 控制1s的循环控制
DEC R3
DEC R2
LCALL JUST1
LCALL JUST2
LCALL DISP
POOL1: CJNE R2,#00H,STATE1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV P0,#0A8H ;状态2LED显示
MOV R0,#00H
MOV R2,#04
STATE2: CJNE R0,#20,POOL2
MOV R0,#00H ;R0 控制1s的循环控制
DEC R3
DEC R2
LCALL JUST1
LCALL JUST2
LCALL DISP
POOL2: CJNE R2,#00H,STATE2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV P0,#0A6H ;状态3LED显示
MOV R0,#00H
MOV R2,#07
STATE3: CJNE R0,#20,POOL3
MOV R0,#00H ;R0 控制1s的循环控制
DEC R3
DEC R2
LCALL JUST1
LCALL JUST2
LCALL DISP
POOL3: CJNE R2,#00H,STATE3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV P0,#96H ;状态4LED显示
MOV R0,#00H
MOV R2,#15
STATE4: CJNE R0,#20,POOL4
MOV R0,#00H ;R0 控制1s的循环控制
DEC R3
DEC R2
LCALL JUST1
LCALL JUST2
LCALL DISP
POOL4: CJNE R2,#00H,STATE4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV P0,#82H ;状态5LED显示
MOV R0,#00H
MOV R2,#4
STATE5: CJNE R0,#20,POOL5
MOV R0,#00H ;R0 控制1s的循环控制
DEC R3
DEC R2
LCALL JUST1
LCALL JUST2
LCALL DISP
POOL5: CJNE R2,#00H,STATE5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV P0,#6AH ;状态6LED显示
MOV P2,#05H
MOV R0,#00H
MOV R3,#10
MOV R2,#40
STATE6: CJNE R0,#20,POOL6
MOV R0,#00H ;R0 控制1s的循环控制
DEC R3
DEC R2
LCALL JUST1
LCALL JUST2
LCALL DISP
POOL6: CJNE R3,#00H,STATE6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV P0,#2AH ;状态7LED显示
MOV R0,#00H
MOV R3,#4
STATE7: CJNE R0,#20,POOL7
MOV R0,#00H ;R0 控制1s的循环控制
DEC R3
DEC R2
LCALL JUST1
LCALL JUST2
LCALL DISP
POOL7: CJNE R3,#00H,STATE7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV P0,#0AAH ;状态8LED显示
MOV P2,#09H
MOV R0,#00H
MOV R3,#7
STATE8: CJNE R0,#20,POOL8
MOV R0,#00H ;R0 控制1s的循环控制
DEC R3
DEC R2
LCALL JUST1
LCALL JUST2
LCALL DISP
POOL8: CJNE R3,#00H,STATE8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV P2,#0AH ;状态9LED显示
MOV R0,#00H
MOV R3,#15
STATE9: CJNE R0,#20,POOL9
MOV R0,#00H ;R0 控制1s的循环控制
DEC R3
DEC R2
LCALL JUST1
LCALL JUST2
LCALL DISP
POOL9: CJNE R3,#00H,STATE9
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV P2,#00H ;状态10LED显示
MOV R0,#00H
MOV R3,#4
STATE10: CJNE R0,#20,POOL10
MOV R0,#00H ;R0 控制1s的循环控制
DEC R3
DEC R2
LCALL JUST1
LCALL JUST2
LCALL DISP
POOL10: CJNE R3,#00H,STATE10
LJMP RESTART
;;;;;;;;;;;;;;;;;;中断服务程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
T0_INT: INC R0
MOV TH0,#3CH
MOV TL0,#0B0H
RETI
;;;;;;;;;;;;;;;;;;调整子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
JUST1: MOV A,R3
MOV B,#10 ;调整南北方向低位
DIV AB
MOV R7,A
MOV A,B
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 42H,A
MOV 46H,A
MOV A,R7 ;调整南北方向高位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 41H,A
MOV 45H,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
JUST2: MOV A,R2
MOV B,#10 ;调整东西方向低位
DIV AB
MOV R7,A
MOV A,B
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 43H,A
MOV 47H,A
MOV A,R7 ;调整东西方向高位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 44H,A
MOV 48H,A
RET
;;;;;;;;;;;;;;;;;;显示子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISP: PUSH ACC
MOV SCON,#00H
MOV R1,#41H
MOV R6,#08
POOL11: MOV A,@R1
MOV SBUF,A ;开始串行输出
JNB TI,$ ;输出完否
CLR TI ;清TI标志,以备下次发送
INC R1
DJNZ R6,POOL11
POP ACC
RET
;;;;;;;;;;;;;;;;;;段码显示;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TAB: DB 0C0H, 0CFH, 64H, 46H,4BH, 52H, 50H,0C7H, 40H, 42H
END
自己再稍加修改就会得到你满意的结果
这是我自己做的!要的话给我QQ留言!程序我也有!