标题:
大神帮忙看一下这个单片机汇编程序,为什么动态数码管只能显示一个数字啊?
[打印本页]
作者:
suibianyige
时间:
2020-11-28 20:50
标题:
大神帮忙看一下这个单片机汇编程序,为什么动态数码管只能显示一个数字啊?
MAIN:
MOV P1,#0FFH
MOV A,P1
CPL A ;输入此时温度
LED_0 EQU 30H
LED_1 EQU 31H
LED_2 EQU 32H
zhuanhuan:
MOV B,#100
DIV AB
MOV LED_2,A
MOV A,B
MOV B,#10
DIV AB
MOV LED_1,A
MOV LED_0,B
MOV DPTR, #TABLE
DISP:
MOV A,LED_0 ;数码显示子程序
MOVC A,@A+DPTR
CLR P2.2
MOV P0,A
LCALL DELAY
SETB P2.2
MOV A,LED_1
MOVC A,@A+DPTR
CLR P2.1
MOV P0,A
LCALL DELAY
SETB P2.1
MOV A,LED_2
MOVC A,@A+DPTR
CLR P2.1
CLR P2.2
MOV P0,A
LCALL DELAY
SETB P2.0
RET
DELAY: MOV R6,#10
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
DELAY2: MOV R5,#20
D2: MOV R6,#20
D3: MOV R7,#250
DJNZ R7,$
DJNZ R6,D3
DJNZ R5,D2
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
作者:
csmyldl
时间:
2020-11-29 01:26
程序结构有问题,第一,主程序未构成循环并且去调用DISP显示子程序,第二,转换程序到底是主程序的一部分还是单独的一个子程序,若为子程序,没有RET指令,第三,延时程序DELAY2在本程序中未调用,可删去。因为对程序结构未搞清,所以不能正常显示
作者:
用户名被注册了
时间:
2020-11-29 09:37
程序结构确实有点乱.....
作者:
Y_G_G
时间:
2020-11-30 14:14
整个程序没有用到一个JMP指令来循环
程序结构太乱
作者:
zhouchuantao
时间:
2020-12-4 17:33
http://www.51hei.com/bbs/dpj-151055-1.html
看看
作者:
zhouchuantao
时间:
2020-12-4 17:33
http://www.51hei.com/bbs/dpj-151055-1.html
看看这个链接
作者:
suncat0504
时间:
2020-12-5 11:30
DISP:
MOV A,LED_0 ;取得第一个显示数据
MOVC A,@A+DPTR ;取得笔段数据
CLR P2.2 ;关闭显示
MOV P0,A ;笔段数据输出到IO口
SETB P2.2 ;打开显示
LCALL DELAY ;延迟显示一段时间
CLR P2.2 ;关闭第一个数码显示,防止下一个笔段数据串位显示到第一个数码管上
MOV A,LED_1 ;取得第二个显示数据
MOVC A,@A+DPTR
CLR P2.1
MOV P0,A
SETB P2.1
LCALL DELAY
CLR P2.1 ;关闭第二个数码显示显示,防止下一个笔段数据串位显示到第二个数码管上
MOV A,LED_2 ;取得第三个显示数据
MOVC A,@A+DPTR
CLR P2.0
MOV P0,A
SETB P2.0
LCALL DELAY
CLR P2.0 ;不加这个代码,并且没有下面的LJMP语句的话,第三个数码管会一直亮下去
LJMP DISP ;循环显示
你之前的代码有几个问题:
1、在显示下一个数码管之前,一定要关闭位驱动,否则会出现一个笔段数据同时显示给几个数码管。
2、在DISP处理中最后执行的是RET。在执行了
CLR P2.1
CLR P2.2
SETB P2.0
之后,P0口保持着第三个数码管的笔段数据,第三个数码管被点亮,并一直保持。
如果想循环显示,必须及时点亮一段时间,然后关闭,处理下一个,并且要保持不断的循环才行
注意,以上代码,是基于P2的IO口输出‘1’时点亮数码管的前提下,才成立。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1