uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
uint8_t bitstatus = 0x00;
if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
{
bitstatus = (uint8_t)Bit_SET; //Bit_SET=1
}
else
{
bitstatus = (uint8_t)Bit_RESET; //Bit_RESET=0
}
return bitstatus;
}
//判断按键按下
u8 ReadKeyDown(void)
{
/*!< Pin 0 selected */
/* 1 key is pressed */
if(GPIO_ReadInputDataBit(GPIO_KEY1_PORT, GPIO_KEY1)==0)
//GPIO_KEY1=((uint16_t)0x0001)
{
return KEY1; /*返回KEY1*/
}
/* 2 key is pressed */
if(GPIO_ReadInputDataBit(GPIO_KEY2_PORT, GPIO_KEY2)==0)
{
// GPIO_KEY2= ((uint16_t)0x0002)
return KEY2; /*返回KEY2*/
}
return NOKEY ;
}
查参考手册得到GPIOx->IDR的复位值是0x0000 XXXX,它与 GPIO_Pin执行按位与之后不是一直为0吗?那判断还有什么意义?
STM32按键扫描
1. u8 KEY_Scan(void) 里的u8是返回值。2. key_up的作用是保证在按键全松开的情况下才开始检测,key_up==1表示在上次检测时按键是全部松开的,本次检测完毕后如果有按键按下则key_up==0,这样下次检测如果按键未松开则不会重复检测。3. #ifndef __KEY_H是防止头文件重复引用,在多个.c文件...
stm32矩阵键盘长按的问题
u8 GetKEY(void);\/\/按键扫描 按下时返回1-16,不按时返回0,这个你自己写吧 u8 LockFlag = 1;\/\/0代表有键按下u8 KEY;\/\/键值 \/\/主程序或者中断中循环执行下边的程序 KEYValue = GetKEY();if(KEYValue){ if(LockFlag) { LockFlag = 0; KEY=KEYValue; }}else{LockFla...
PROTUSE 仿真STM32按键控制LED,按键不起作用
仿真查看按键不按下时,是否会进你的if语句。如果还是会进入,就用万用表量一下此时这个io口的电平。如果不进入,继续排查。当按键按下时,是否会进入你的if,如果不能,那么同上,用万用表量一下io口的电平。按道理讲,应该不会有问题的。除非硬件焊接有问题。建议把K1定义拿出去,和temp放在一起...
stm32按键处理函数的逻辑关系是什么?
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))这句意思是如果keyup为1,同时key0123中有一个按键被按下,那么if为真,执行取值操作,作为返回值付给主函数的t,else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;这个意思是如果上面的if为假,那么如果key0123没有...
stm32编程问题,状态机,求大神指导,初学者,主要是switch语句后面的变 ...
然后switch(KeyScanState) 这其实就是将第4位判断哪个具体位为0,说明哪个按下。然后在把2进制的值用10进制表示当然你这个是已经被重新定义过的了:KeyScanState_0,1,2.。。。这些,所以你要先看看他是定义的几才行。没有按键为0时应该是0x0f。。以此类推 ...
用STM32做矩阵键盘、自己理解的外部中断方式的几个问题。
当你按下键时,肯定会出现抖动,那抖动一次就是一个边沿,自然会一次次的触发中断了。我以前也试验过,很不好使。用systick扫描是一个办法,我用这个实现了线反转法扫描4X4的键盘矩阵。设置10ms中断一次,每次进中断首先检查有没有按键,如果没有就pass,如果有就先计个数再退出,重复三次操作确定都...
STM32单片机按键消抖和FPGA按键消抖大全
在STM32单片机中,按键去抖通常通过软件算法实现,简单有效的方法是在检测到按键按下后加入一定延时,再进行判断。具体实现如下:1.1 简单的软件消抖程序包括两步:先检测按键值,然后在20毫秒后再次检测。如果在20毫秒后检测到按键值变为0(即释放),则确认按键被按下,输出对应的逻辑状态。1.2 对于...
STM32按键状态机3——增加双击与功能优化
通过实测,我们验证了短按、长按和双击的正确性,并展示了一个从确认第二次按下状态过渡到长按状态的示例。在实际应用中,按键检测程序应被设计为独立模块,当检测到特定按键状态发生变化时,通知应用程序执行相应操作。对于STM32裸机开发,将按键状态机整合到定时器中断服务函数中,当检测到按键状态触发时...
STM32上拉输入和下拉输入
相比之下,下拉输入则使用了下拉电阻。当按键未按下时,端口接收到低电平状态,即0V。一旦按键被按下,电路从低电平状态跳转至高电平,即3.3V状态。这是因为下拉电阻将输入端拉向地,阻止电流流向电源,从而产生高电平状态。在STM32中,WK_UP功能通常采用下拉输入模式,这意味着当按键未被按下时,...
关于STM32使用GPIO和SysTick定时器实现按键扫描
|= SysTick_CTRL_ENABLE_Msk; \/\/开启定时器 while(1);} } void SysTick_Handler(void) \/\/SysTick中断(每隔100us扫描一次按键){ if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==0) \/\/判断按键是否按下 { \/\/user_code;} while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==0);} ...