proteus 仿真单片机 两位数码管动态扫描显示乱码
使用两位数码管显示器,利用扫描方式循环显示两位数00~99;程序:SMG3.ASMSTART:MOVR0,#0MOVDPTR,#TABLELOOP:ACALLDISPLA...
使用两位数码管显示器,利用扫描方式循环显示两位数00~99
;程序:SMG3.ASM
START: MOV R0, #0
MOV DPTR, #TABLE
LOOP: ACALL DISPLAY
INC R0
CJNE R0,#100,LOOP
JMP START
DISPLAY: MOV A,R0
MOV B, #10
DIV AB
MOV R1, A
MOV R2, B
MOV R3, #50
LOOP1: MOV A, R2
ACALL CHANG
CLR P2.0
ACALL DLY10mS
SETB P2.0
MOV A, R1
ACALL CHANG
CLR P2.1
ACALL DLY10mS
SETB P2.1
DJNZ R3,LOOP1
RET
CHANG: MOVC A,@A+DPTR
MOV P0,A
RET
DLY10mS: mov r6,#20
D1: MOV R7,#248
DJNZ R7, $
DJNZ R6, D1
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H
DB 99H, 92H, 82H, 0F8H
DB 80H, 90H, 88H, 83H
DB 0C6H, 0A1H, 86H, 8EH
END 展开
;程序:SMG3.ASM
START: MOV R0, #0
MOV DPTR, #TABLE
LOOP: ACALL DISPLAY
INC R0
CJNE R0,#100,LOOP
JMP START
DISPLAY: MOV A,R0
MOV B, #10
DIV AB
MOV R1, A
MOV R2, B
MOV R3, #50
LOOP1: MOV A, R2
ACALL CHANG
CLR P2.0
ACALL DLY10mS
SETB P2.0
MOV A, R1
ACALL CHANG
CLR P2.1
ACALL DLY10mS
SETB P2.1
DJNZ R3,LOOP1
RET
CHANG: MOVC A,@A+DPTR
MOV P0,A
RET
DLY10mS: mov r6,#20
D1: MOV R7,#248
DJNZ R7, $
DJNZ R6, D1
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H
DB 99H, 92H, 82H, 0F8H
DB 80H, 90H, 88H, 83H
DB 0C6H, 0A1H, 86H, 8EH
END 展开
2个回答
展开全部
你的问题可能如下:
一、大概是动态扫描的时间间隔太长了,通常动态扫描的时间间隔在1-2ms时间,如果时间太长就会出现闪烁的现象。从你的程序看,你的扫描时间间隔好象是10ms!
二、每次循环的次数要足够多,如用1ms时间间隔扫描,你有二个字符要循环,则循环500次,一共是2*500=1000秒,这样才能看清你的显示的内容。如果你只循环10次,显示的时间太短,看不清,就是你说的乱码了!!!
还有,由于PROTEUS仿真的界面实际上是一个动画,默认时是每秒20帧,如果你的显示刚好和这个时间不协调,就可能出现你说的乱码。
总之,你先把显示的刷新时间改为1ms试一下,如果没问题就可以了,还有问题再说吧!
一、大概是动态扫描的时间间隔太长了,通常动态扫描的时间间隔在1-2ms时间,如果时间太长就会出现闪烁的现象。从你的程序看,你的扫描时间间隔好象是10ms!
二、每次循环的次数要足够多,如用1ms时间间隔扫描,你有二个字符要循环,则循环500次,一共是2*500=1000秒,这样才能看清你的显示的内容。如果你只循环10次,显示的时间太短,看不清,就是你说的乱码了!!!
还有,由于PROTEUS仿真的界面实际上是一个动画,默认时是每秒20帧,如果你的显示刚好和这个时间不协调,就可能出现你说的乱码。
总之,你先把显示的刷新时间改为1ms试一下,如果没问题就可以了,还有问题再说吧!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询