51单片机显示0到9
ORG 0000HSTART: MOV DPTR,#TABLE
MOV A, #00H
S2: MOVC A,@A+DPTR
CJNE A,#00H,S1
LJMP START
S1: MOV P1,A
INC A
CALL DELAY
LJMP S2
TABLE: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ,00H
DELAY:MOV R7,250
L1:MOV R6,200
L2:MOV R5,20
DJNZ R5,$
DJNZ R6,L2
DJNZ R7,L1
RET
END
本人想显示数码管0-9十个数字,但是上面那段程序运行时只显示0,而且一直停在0,调试时发现每次跳转时就不能跳到S2,而是跳到MOVA,#00H这一行,百思不得其解,所以请求大家,这个是为什么.
本帖最后由 Jong0019 于 2014-8-5 07:54 编辑
0000000000000 本帖最后由 沉思的牛 于 2014-7-14 23:02 编辑
我不是很懂51的汇编;
帮你看了一下,存在一些问题
从START开始:
MOV DPTR, #TABLE //取TABLE首地址
MOV A, #00H //累加器清零
MOVC A, @A+DPTR //取DPTR=DPTR=0C0H
CJNE A, #00H,S1 //不等于,跳转到S1
S1:
MOV P1,A //把数据传送到P1锁存器,你的段选端口,但是我没看见你的位选
INC A //A++ A=0C1H
CALL DELAY //调用延时
LJMP S2 //跳回S2
当你再次跳转到S2时, 你想取段选数据;
你的段选数据就不对了, DPTR =DPTR超过你的TABLE
望楼主下次发代码用代码编辑器:handshake 关键是对于MOVC A,@A+DPTR这条语句的理解,这条语句在执行前,累加器A中存的是偏移地址,执行后存的是查到的字型码。要想实现显示0到9的目的,需要偏移地址加1,而你的问题是:把字型码加1了,再次查表就查不到0到9的字型码了。 :lol::lol::lol::shy::shy::shy:
页:
[1]