Assembly 使用PIC18F452(组件)在双7segs LED显示屏上显示2位数字
数据表 可以获得与我使用的7segs相关的数据表 编辑(15/4/2013):下面的代码是PORTD的指令字Assembly 使用PIC18F452(组件)在双7segs LED显示屏上显示2位数字,assembly,pic,pic18,Assembly,Pic,Pic18,数据表 可以获得与我使用的7segs相关的数据表 编辑(15/4/2013):下面的代码是PORTD的指令字 ldig SET b'00001000' ;for rght digit rdig SET b'00000100' ;for left digit 第一次执行代码时TRISB、TRISD、PORTB和PORTD的指令字 CLRF TRISB ;port B as output CLRF TRISD ;port D as output CLRF PO
ldig SET b'00001000' ;for rght digit
rdig SET b'00000100' ;for left digit
第一次执行代码时TRISB、TRISD、PORTB和PORTD的指令字
CLRF TRISB ;port B as output
CLRF TRISD ;port D as output
CLRF PORTD ;clear port D not to select any digit
SETF PORTB ;set port B to off all segments
我想使用assembly在2个七段LED显示屏上显示两个不同的数字。我尝试使用下面列出的代码,但它不起作用。
注:rdig=右面板,ldig=左面板,disp1表示1,依此类推
loop MOVFF disp1, PORTB
MOVLW rdig ;select only the left display
MOVWF PORTD ;unit to be on
MOVFF disp8, PORTB
MOVLW ldig ;select only the left display
MOVWF PORTD ;unit to be on
bra loop
输出应该是81(在七段显示器上),没有一个数字出现。每个面板上只显示某种暗淡的灯光。但是,如果我试图在七段显示器的任一侧只显示一个数字,代码就会起作用
loop MOVFF disp8, PORTB
MOVLW ldig ;select only the left display
MOVWF PORTD ;unit to be on
bra loop
编辑:我尝试使用TMR0N(b'00000000'指令字,tmrL=FF,tmrH=FB)向每个数字显示请求添加一个小延迟(2微秒),如下所示,并且只有数字1出现在右面板上
loop MOVFF disp1, PORTB
MOVLW rdig ;select only the left display
MOVWF PORTD ;unit to be on
call delay
MOVFF disp8, PORTB
MOVLW ldig ;select only the left display
MOVWF PORTD ;unit to be on
call delay
bra loop
TMR0N的指令设置
initwrd SET 0x00
tmrH SET 0xFF
tmrL SET 0xFB
假设PORTD正确设置了每个数字的enables,并且硬件连接的enables相同,那么您的代码是正确的。你唯一的错误就是耽搁的时间太长。从1毫秒开始并增加,直到显示两位数字且无可见闪烁。延迟量取决于您使用的7段显示器的数量(同样是为了避免闪烁)。2 usec还远远不够。我已经与图片工作了很长时间,这应该工作 你应该发明解决方案,用小的积木来构建它们。你不应该在网上找到现成的、完整的解决方案。缺少的不是互联网。这是…@AlexeyFrunze我不希望有人教我如何从头做起。到目前为止,我在学习18F452编码方面做得很好。然而,我坚持这一部分整整一周,需要一些解决方案。首先确定具体问题如何?陷入困境,整个星期、学校等都无关紧要。具体向我们展示您遇到的困难以及您已经尝试过的内容,即失败的想法和失败的代码。如前所述,您的问题相当模糊,无法解决。改进它。@AlexeyFrunze好吧。感谢您的见解。我相信您需要包括设备的示意图和7-seg LED的数据表。此外,您没有定义诸如
disp1
、PORTB
、rdig
之类的内容。如果没有所有这些信息,一个怎么能帮助你呢?我已经按照你的建议将延迟时间改为1ms,但7seg显示器仍然只能在右侧面板上显示1。如果你的答案是肯定的,也许我的7segs的原理图/数据表有点不同,或者其他什么。我会先从我的讲师那里拿到示意图。现在是周末,所以我暂时无法联系到他。与其使用硬件定时器进行延迟,不如编写一个软件延迟子程序,给出1ms。。在此期间运行一个简单的循环就足够了。如果没有,试试看。我看你的代码没有问题。