以为很简单,没想到遇到点麻烦。 ;单片机的汇编程序 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 |
更多回帖