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