以为很简单,没想到遇到点麻烦。
;单片机的汇编程序 8 位轮流显示 0~7,8~F
;E:DPJ7SEG8CC7SEGCC8-2.ASM
;2011 11 14
ORG 00H
AJMP MAIN
ORG 30H
MAIN:
MOV DPTR,#TAB
MOV R4,#100 ;0~7,8~F 各显示100次
DISP:
MOV R0,#30
MOV R3,#0FEH ;R3存放位码
DISP1:
MOV A,@R0 ;@R0存放0~F
MOVC A,@A+DPTR
MOV P0,A ;送段码
MOV P2,R3
ACALL D1MS ;延时1MS,消鬼影
MOV P2,#0FFH ;关显示
MOV A,R3
RL A
MOV R3,A
INC R0
INC R2 ;R2存放位数
MOV A,R2
MOV @R0,A
JB F0,D2 ;F0=0显示 0~7 F0=1显示 8~F
CJNE R2,#8,DISP1
MOV R0,#30
MOV R2,#0
DJNZ R4,DISP1
MOV R4,#100
MOV R0,#38
MOV R2,#8
SETB F0
D2:
CJNE R2,#16,DISP1
MOV R0,#38
MOV R2,#8
DJNZ R4,DISP1
MOV R4,#100
MOV R0,#30
MOV R2,#0
CLR F0
AJMP DISP1
D1MS:
MOV R7,#5
MOV R6,#100
DJNZ R6,$
DJNZ R7,$-4
RET
TAB:
DB 3FH;0
DB 06H;1
DB 5BH;2
DB 4FH;3
DB 66H;4
DB 6DH;5
DB 7DH;6
END
2011 11 15 更新 睡了一觉,头脑清醒多了。修改一下,简洁了。
ORG 00H
AJMP MAIN
ORG 30H
MAIN:
MOV DPTR,#TAB
MOV R4,#100 ;0~7,8~F 各显示100次
MOV R3,#0FEH ;R3存放位码
DISP:
MOV A,R0 ;R0 为0~F
MOVC A,@A+DPTR
MOV P0,A ;送段码
MOV P2,R3
ACALL D1MS ;延时1MS
MOV P2,#0FFH ;关显示,消鬼影
MOV A,R3
RL A
MOV R3,A
INC R0
JB F0,D2 ;F0=0显示 0~7 F0=1显示 8~F
CJNE R0,#8,DISP
MOV R0,#0
DJNZ R4,DISP
MOV R4,#100
MOV R0,#8
SETB F0
D2:
CJNE R0,#16,DISP
MOV R0,#8
DJNZ R4,DISP
MOV R4,#100
MOV R0,#0
CLR F0
AJMP DISP
D1MS:
MOV R7,#5
MOV R6,#100
DJNZ R6,$
DJNZ R7,$-4
RET
TAB:
DB 3FH;0
DB 06H;1
DB 5BH;2
DB 4FH;3
DB 66H;4
DB 6DH;5
DB 7DH;6
DB 07H;7
DB 7FH;8
DB 6FH;9
DB 77H;A
DB 7CH;b
DB 39H;C
DB 5EH;d
DB 79H;E
DB 71H;F
END
|