MAIN: MOV SP,#60H ;设置堆栈
CLR A ;为缓存器初始化做准备
MOV 41H,A ;41H、42H、43H为十进制缓冲单元 MOV 42H,A MOV 43H,A
MOV 30H,#0ffh ;44H、45H为十六进制缓冲单元 MOV 31H,#23h
START:LCALL H_BCD ;调用十六进制-十进制转换子程序 MOV 30h,#0FFH MOV 31H,#23H
LCALL DISP lJMP START
H_BCD:PUSH PSW MOV R1,#41H MOV R5,#03H CLR A LP1: MOV @R1,A INC R1
DJNZ R5,LP1 MOV R7,#10H LP2: MOV R0,#30H MOV R6,#02H CLR C
LP3: MOV A,@R0 RLC A
MOV @R0,A INC R0
DJNZ R6,LP3 MOV R1,#41H MOV R5,#03H NOP
LP4: MOV A,@R1 ADDC A,@R1
DA A MOV @R1,A INC R1
DJNZ R5,LP4 DJNZ R7,LP2 POP PsW RET
;显示子程序
DISP: MOV R0,#3aH mov R4,#04
;调用显示子程序 ;保护现场数据 ;十进制单元低位
;准备对41H、42H、43H清零 ;BCD码初始化
;对41H、42H、43H清零 ;转换双字节十六进制整数 ;从高端移出待转换数的一位到CY中 ;BCD码带进位自身相加,相当于乘2 ;十进制调整
;转换结果放在41H、42H、43H单元 ;恢复现场 ;显示缓冲器单元首址 MOV A,41H ;对十进制单元数据进行拆分 LCALL PTDS MOV A,42H
LCALL PTDS ;就本任务本身43H单元为0,显示省略 MOV R0,#3AH ;显示缓冲器单元首址(指向个位) MOV R2,#00H ;延时时间参数
MOV R3,#0FEH ;初始字位码(指向个位) MOV DPTR,#LEB ;显示字形码表格首址 LOP1:MOV P2,#0FFH ;关显示器 MOV A,@R0 ;取字形
MOVC A,@A+DPTR ;查表取字形码 MOV P1,A ;送字形码到字形口 MOV P2,R3
WAIT: DJNZ r2,wait ;延时
INC R0 ;修改显示缓冲区单元地址 MOV A,R3
RLC A ;修改显示位 MOV R3,A ;取字形 dJNz R4,LOP1 ;四位显示完了吗? RET
LEB: DB 0C0H,0F9H ;0、1的字形码 DB 0A4H,0B0H ;2、3的字形码 DB 99H,92H,82H ;4、5、6的字形码 DB 0F8H, 80H,90H ;7、8、9的字形码 ;拆分子程序
PTDS: MOV R1,A ;暂存A,准备处理低半字节 LCALL PTDS1 ;调用子程序
MOV A,R1 ;准备处理高半字节 SWAP A ;高低半字节交换 PTDS1: ANL A,#0FH ;保留低半字节 MOV @R0,A
INC R0 RET END
因篇幅问题不能全部显示,请点此查看更多更全内容