我想使用两个或多个具有不同功能的按钮。如何操作?

问题描述 投票:0回答:2

我想让 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

那么对于多个按钮如何实现呢?算法是怎样的?背后的逻辑是什么?

button assembly pic
2个回答
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

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
    }
}

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

© www.soinside.com 2019 - 2024. All rights reserved.