STM32按键总结(低电平有效及上升沿有效))

简介: STM32按键总结(低电平有效及上升沿有效))

低电平有效的按键

#define KEY1  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)//读取按键0

#define KEY2  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)//读取按键1

#define KEY3  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)//读取按键2

#define KEY4   GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11)//读取按键3(WK_UP)

#define KEY5   GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)//读取按键3(WK_UP)

void KEY_Init(void) //IO初始化

{

GPIO_InitTypeDef GPIO_InitStructure;
     /*开启按键端口(PC)的时钟*/
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
     GPIO_InitStructure.GPIO_Pin= GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_13;//KEY0-KEY2;
//      GPIO_InitStructure.GPIO_Speed= GPIO_Speed_10MHz;


GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU;
     GPIO_Init(GPIOC,&GPIO_InitStructure);
}



staticu8 key_up=1;//按键按松开标志
     if(mode)
               key_up=1;  //支持连按           
     if((KEY1==0||KEY2==0||KEY3==0||KEY4==0||KEY5==0))
     {
               delay_ms(40);//去抖动
               key_up=0;
               if(KEY1==0)
                        KEY1_flag=1;
               if(KEY2==0)
                        KEY2_flag=1;
               if(KEY3==0)
            KEY3_flag=1;
               if(KEY4==0)
                  KEY4_flag=1;
               if(KEY5==0)
                        KEY5_flag=1;
     }
     if((KEY1==1||KEY2==1||KEY3==1||KEY4==1||KEY5==1))
     {
               delay_ms(10);//去抖动
               key_up=0;
               if(KEY1==1)
                        KEY1_flag=0;
               if(KEY2==1)
                        KEY2_flag=0;
               if(KEY3==1)
                  KEY3_flag=0;
               if(KEY4==1)
            KEY4_flag=0;
               if(KEY5==1)
                        KEY5_flag=0;
     }
}void KEY_Scan(u8 mode)
{


按键,弹起有效

KEY_Scan函数修改为


void KEY_Scan(u8 mode)
{
staticu8 key_up=1;//按键按松开标志
     if(mode)
               key_up=1;  //支持连按           
     if((KEY1==0||KEY2==0||KEY3==0||KEY4==0||KEY5==0))
     {
               delay_ms(10);//去抖动
               key_up=0;
               if(KEY1==0)
               {
                        KEY1_flag=1;
                        if(0== KEY1_press_flag)
                        {
                                 KEY1_Event_exec_flag= 0;
                                 KEY1_press_flag= 1;
                        }
               }
               if(KEY2==0)
               {
                        KEY2_flag=1;
                        if(0== KEY2_press_flag)
                        {
                                 KEY2_Event_exec_flag= 0;
                                 KEY2_press_flag= 1;
                        }
               }
               if(KEY3==0)
               {
                        KEY3_flag=1;
                        if(0== KEY3_press_flag)
                        {
                                 KEY3_Event_exec_flag= 0;
                                 KEY3_press_flag= 1;
                        }
               }
               if(KEY4==0)
               {
                        if(0== KEY4_flag)
                        {
                                 KEY4_flag=1;
                        }
                        if(0== KEY4_press_flag)
                        {
                                 KEY4_Event_exec_flag= 0;
                                 KEY4_press_flag= 1;
                        }
               }
               if(KEY5==0)
                        KEY5_flag=1;
     }
     if((KEY1==1||KEY2==1||KEY3==1||KEY4==1||KEY5==1))
     {
               delay_ms(10);//去抖动
               key_up=0;
               if(KEY1==1)
               {
                        KEY1_flag=0;
                        if(KEY1_press_flag == 1)
                        {
                                 KEY1_press_flag= 0;
                                 if(0== KEY1_Event_exec_flag)
                                           KEY1_Event_exec_flag= 1;
                        }
               }
               if(KEY2==1)
               {
                        KEY2_flag=0;
                        if(KEY2_press_flag== 1)
                        {
                                 KEY2_press_flag= 0;
                                 if(0== KEY2_Event_exec_flag)
                                           KEY2_Event_exec_flag= 1;
                        }
               }
               if(KEY3==1)
               {
                        KEY3_flag=0;
                        if(KEY3_press_flag== 1)
                        {
                                 KEY3_press_flag= 0;
                                 if(0== KEY3_Event_exec_flag)
                                           KEY3_Event_exec_flag= 1;
                        }
               }
               if(KEY4==1)
               {
                        if(1== KEY4_flag)
                        {                                   
                                 KEY4_flag=0;
                        }
                        if(KEY4_press_flag== 1)
                        {
                                 KEY4_press_flag= 0;
                                 if(0== KEY4_Event_exec_flag)
                                           KEY4_Event_exec_flag= 1;
                        }
               }
               if(KEY5==1)
                        KEY5_flag=0;
     }
}


然后,后面响应按键的操作,不再以KEY_flag为标志,而是以KEY3_Event_exec_flag为标志。

相关文章
|
6月前
|
芯片
最详细STM32,cubeMX 按键点亮 led
最详细STM32,cubeMX 按键点亮 led
114 0
|
6月前
STM32速成笔记(三)—按键检测
本文介绍了如何利用STM32进行按键检测,先介绍了原理,后面给出了配置步骤和应用例程。此外,本文还叙述了如何利用一个按键单独控制一个LED亮灭,以及如何检测按键长短按。
199 0
STM32速成笔记(三)—按键检测
|
3月前
|
数据安全/隐私保护 芯片
【STM32基础 CubeMX】按键的检测
【STM32基础 CubeMX】按键的检测
|
11月前
|
C语言
STM32矩阵按键
STM32矩阵按键
|
12月前
|
芯片
STM32CubeMX按键模块化 点灯
我们继续讲解 stm32 f103,这篇文章将详细 为大家讲解 如何 使用 按键点亮 RGB 灯。
123 0
|
12月前
蓝桥杯 stm32 按键点灯 CubeMX
从图中我们可以看到有 4个按键,B1 , B2 , B3 , B4。 对应的 GPIO 端口是 PB0 , PB1, PB2 ,PA0。 当按键按下,IO 口读到低电平;按键弹起,IO 口读到高电平。 LED 的原理图,CubeMX 配置,以及代码讲解都在我的上篇文章 里详细讲解了,这 篇文章主要为大家讲解 按键 的使用。 蓝桥杯嵌入式之 LED 闪烁
101 0
STM32 使用外部中断实现按键模块化
STM32 使用外部中断实现按键模块化
90 0
STM32学习笔记(2) 使用外部中断控制按键
NVIC_IRQChannel ​​​​:对于RCT6来说,它的中断源如上图所示,在stm32f103.h中已经配置好寄存器,直接调用即可,下图中,RCT6主要用的是STM32F103X_HD的中断源
158 0
|
传感器
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)
536 0
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)