;将内部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
还没有评论,来说两句吧...