Assembly 使用PIC18F452(组件)在双7segs LED显示屏上显示2位数字

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

数据表

可以获得与我使用的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    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。。在此期间运行一个简单的循环就足够了。如果没有,试试看。我看你的代码没有问题。