;将内部RAM30H~32H单元中存储的6位十进制数显示在6个数码管上。
;要求编写将一个内存单元中的压缩BCD码转换为两个七段显示码的子程序和
;延时子程序。不允许在程序中给30H、31H和32H单元赋值,要通过存
;储器窗口赋值。尝试改变点亮数码管的时间,观察显示效果
;把LED_CS接到CS0,若接到其他位置,需要改段地址和位地址的D12~D14位
代码
ORG 0000H
LJMP MAIN
ORG 0050H
MAIN:
MOV 30H,#20H
MOV 31H,#02H
MOV 32H,#09H
MOV 33H,#11H
A1:
MOV R0,#33H;内部RAM指针
MOV R1,#80H;位选,下面使用循环右移
LOOP:
MOV A,@R0;取出内部RAM数据
LCALL SHOW
MOV A,@R0;取出内部RAM数据
SWAP A
LCALL SHOW
DEC R0
CJNE R0,#2FH,LOOP
SJMP A1
SHOW:
PUSH ACC
MOV A,R1
MOV DPTR,#8001H
MOVX @DPTR,A;送入位选
RR A
MOV R1,A
POP ACC
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR;获取字形码
MOV DPTR,#8002H
MOVX @DPTR,A;写入字形码
LCALL DELAY
CLR A
MOVX @DPTR,A;清空,防重影
RET
DELAY:;10ms则X=23,Y=204
MOV R7,#0
D1: MOV R6,#0
DJNZ R6,$
DJNZ R7,D1
RET
; 0 1 2 3 4 5 6 7 8 9
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END