我有一个 4x3 矩阵键盘连接到 PIC16F1717 的端口 B (RB1-RB7)。我通过依次将每一行设置为高并读取列值来扫描键盘按键。按下的键可以通过匹配行和列来解码。我正在以短暂的延迟去抖动:
while(1)
{
//scan for key presses
__delay_ms(10);
ROW1 = 1;
ROW2 = 0;
ROW3 = 0;
ROW4 = 0;
if (COL1 == 1)
{
__delay_ms(100);
if (COL1 == 1)
{
key = 1;
keyCount = keyCount ++ 1;
}
}
else if (COL2 == 1)
{
__delay_ms(100);
if (COL2 == 1)
{
key = 2;
keyCount = keyCount + 1;
}
}
//and so on for the other rows and columns
两个变量 key 和 keyCount 分别记录按下了哪个键,以及按下了多少个键。当按下 4 个键时,我想执行以下代码:
if (keyCount == 4)
{
LED = 1;
__delay_ms(500);
LED = 0;
__delay_ms(500);
LED = 1;
__delay_ms(500);
LED = 0;
__delay_ms(500);
LED = 1;
__delay_ms(500);
servoDemo();
__delay_ms(500);
LED = 0;
keyCount = 0;
}
这也在 main 函数内的 while(1) 循环中。我遇到的问题是增加 keyCount 不起作用。以前,我尝试过 keyCount++ 并且它有效,但在此之前这也不起作用。我尝试通过设置 keyCount = 4 而不是将其递增一来进行调试,并且它起作用了。
这两个变量都在 main 函数内声明(并初始化),但在 while(1) 循环之外。另外,我定义了以下内容:
//pin definitions
//////////////////////////
#define ROW1 PORTBbits.RB2
#define ROW2 PORTBbits.RB7
#define ROW3 PORTBbits.RB6
#define ROW4 PORTBbits.RB4
#define COL1 PORTBbits.RB3
#define COL2 PORTBbits.RB1
#define COL3 PORTBbits.RB5
#define SERVOSIG PORTDbits.RD0
#define LED PORTDbits.RD1