stm32 矩阵键盘如何实现按钮长按只返回一次

2019-07-21 00:15发布

stm32的矩阵键盘如何实现按钮按下后,不管按下的时间长短,都只返回一次键值。
或者告诉我怎么判按钮断按下与松开?谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
cjiamoo
2019-07-21 08:57
回复【2楼】BMN李:
---------------------------------
GPIO_Write(GPIOD,(GPIOD->ODR & 0xf0ff | 0x0100)); //让PB11到PB8输出二进制的0001.

switch(GPIOD->IDR & 0xf000)//对PB12到PB15的值进行判断,以输出不同的键值。
{
case 0x1000: KeyVal=0; break;
case 0x2000: KeyVal=4; break;
case 0x4000: KeyVal=8; break;
case 0x8000: KeyVal=12; break;
}
   
GPIO_Write(GPIOD,(GPIOD->ODR & 0xf0ff | 0x0200)); //让PB11到PB8输出二进制的0010.
switch(GPIOD->IDR & 0xf000)         //对PB12到PB15的值进行判断,以输出不同的键值。
{
case 0x1000: KeyVal=1; break;
case 0x2000: KeyVal=5; break;
case 0x4000: KeyVal=9; break;
case 0x8000: KeyVal=13; break;
}

GPIO_Write(GPIOD,(GPIOD->ODR & 0xf0ff | 0x0400)); //让PB11到PB8输出二进制的0100.
switch(GPIOD->IDR & 0xf000)         //对PB12到PB15的值进行判断,以输出不同的键值。
{
case 0x1000: KeyVal=2; break;
case 0x2000: KeyVal=6; break;
case 0x4000: KeyVal=10; break;
case 0x8000: KeyVal=14; break;
}
 
 GPIO_Write(GPIOD,(GPIOD->ODR & 0xf0ff | 0x0800)); //让PB11到PB8输出二进制的1000.
switch(GPIOD->IDR & 0xf000)         //对PB12到PB15的值进行判断,以输出不同的键值。
{
case 0x1000: KeyVal=3; break;
case 0x2000: KeyVal=7; break;
case 0x4000: KeyVal=11; break;
case 0x8000: KeyVal=15; break;
}

上面是我的程序,要在哪里加呢?未松开用什么表示?

一周热门 更多>