-1

PIC18Fxx2数据表

可以在此处获得与我正在使用的 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

我想使用组装在 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
4

1 回答 1

0

假设 PORTD 的每个数字的启用设置正确且硬件连接相同,那么您的代码是正确的。您唯一的错误是延迟量。从 1 ms 开始并增加,直到显示没有明显闪烁的两位数字。此延迟量取决于您使用的 7 段显示器的数量(同样是为了避免闪烁)。2 微秒根本不够。我一直在使用图片多年,这应该可以。

于 2013-04-14T03:44:02.533 回答