0

我想让 2 个或更多按钮等待按下。

例如,增加或减少 7 段显示中的值。Button1 递增,Button2 递减该值。对于下面的代码,我可以减少或增加它,但不能同时做。

对于一个按钮,我这样做的方式是:

PROCESS2: ;SW09 & SW11 的功能

.....................

    BTFSC   PORTB,7       This line is to understand whether we pressed button or not.        

    GOTO    PROCESS2      We cant go below until the button pressed 

    CALL    UP        ;Up increments the value which will be shown in the 7-segment-display.

    BTFSS   PORTB,7

    GOTO    $-1

那么如何为多个按钮做到这一点。算法是什么?其背后的逻辑是什么?

4

2 回答 2

0

我不知道它是否必须使用汇编程序,但在 C 中这很简单。

假设 BUTTON1 和 BUTTON2 在其他地方定义为输入引脚并且它们具有上拉电阻,您可以尝试:

void checkIncrement(void)
{
    if (BUTTON1 == 0) {
        while (BUTTON1 == 0) DelayMs(1); // software debounce
        increment(); // call the increment function
    }
}

void checkDecrement(void)
{
    if (BUTTON2 == 0) {
        while (BUTTON2 == 0) DelayMs(1);
        decrement();
    }
}

int main(void)
{
    // your main loop
    while (1)
    {
        checkIncrement();
        checkDecrement();

        // do something else if none of the buttons are pressed
    }
}

如果需要汇编程序,您可以尝试编译并查看汇编程序清单以了解它是如何完成的。

于 2013-04-24T14:41:24.637 回答
0

我不熟悉 PIC 程序集,但我记得 MCS51 程序集,也许这不是根据您的问题,但可以用作参考。

我假设按钮工作为低电平有效(当按下按钮时,按钮端口将被拉低或按钮端口将在按下按钮时接地)。

    button1 EQU P1.0 ; Port1 bit0 as button1 (input)
    button2 EQU P1.1 ; Port1 bit1 as button2 (input)
    led     EQU P2   ; Port2 bit 0 until 8 as led (output)

    ORG  00H      
    mov A,#7FH       ; init led value 7FH = 0111 1111B
    mov R0,A
main:

btn1sts:
    jb button1, btn2sts  ;if button1 not pressed then check button2 status
    jnb button1, $       ;wait until button 1 is released
    inc R0               ;A value only increases after the button1 is released.
    sjmp process:

btn2sts:
    jb button2, btn1sts  ;if button2 not pressed then check button1 status
    jnb button2, $       ;wait until button 2 is released
    dec R0               ;A value only decreases after the button2 is released.

process:
   mov A, R0        
   mov led, A       ;show A value in P2 (led).
   ljmp main:       ;goto main
于 2017-07-19T02:40:12.003 回答