51单片机数码管问题(汇编)

来源:百度知道 编辑:UC知道 时间:2024/06/24 09:06:25
请教前辈了!这是我写的使六段LED数码管从1显示到2的程序:
START:
MOV P2,#00000011B
MOV P0,#11111001B
LCALL DELAY
MOV P2,#11000011B ;(故意让四段亮了)
MOV P0,#10100100B
LCALL DELAY
LJMP START

DELAY:

RET
END
您也看到了,我写的很菜,程序显得很笨。我现在虽然明白了DPTR、DB等指令,但不会用。想让数码管从0显示到9,不知道有没好办法,简化一下程序。恳请高人指点,请附汇编程序以供研究,谢谢!
有好的解答明天即可结束提问

以下程序可以循环显示:0~F。

START:
MOV DPTR, #SEGPT
INI_R2:
MOV R2, #0
DISP_LOOP:
MOV A, R2
MOVC A, @A+DPTR ;查到8段码
MOV P0, A
MOV P2, #11000011B ;(故意让四位亮了)
LCALL DELAY

INC R2
CJNE R2, #16, $+3
JC DISP_LOOP
LJMP INI_R2

SEGPT: DB 0C0H, 0F9H, 0A4H, 0B0H ;0、1、2、3
DB 99H, 92H, 82H, 0F8H ;4、5、6、7
DB 80H, 90H, 88H, 83H ;8、9、A、B
DB 0C6H, 0A1H, 86H, 8EH ;C、D、E、F

DELAY:
......

对,想数码管显示的话基本上都用查表法,

ps:六段LED?

用C语言就很容易了。