本人今天又换种思路写了个关于stm32的4X4矩阵键盘定时器扫描消抖法的算法程序,同样是采用的效率较高的翻转法,已通过测试,希望大家喜欢!大概思路为:将端口的第N次扫描值和第(N-1)次的扫描值进行比较,若相等则某个变量自增1次,否则将其清0,当此变量自增的值达到某个值时,则认为按键确实是被按下了,然后再进行后续的行和列的查找工作,最终确定是哪个按键被按下了!注:本程序的定时器中断扫描周期为10ms,同上次本矩阵键盘是采用的PB口的低8位。这个程序只是表达了思路,写得很粗糙,大家可以自行改进。代码如下:
s8 scan_MatrixKey(void)
{
#define PORT GPIOB->IDR
u8 column;
u8 row;
u8 tmp;
static u8 j;
static u8 x;
static u8 i;
s8 MatrixKey_value = 20;
//低8位为推挽输出
GPIOB->CRL &= 0X00000000;
GPIOB->CRL |= 0X33333333;
//初值:低4位为低,次低4位为高
GPIOB->ODR &= 0XFF00;
GPIOB->ODR |= 0X00F0;
//次低4位为上拉输入
GPIOB->CRL &&