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

发布者:自在自由最新更新时间:2019-09-05 来源: eefocus关键字: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);


}


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(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;


         }


}


按键,弹起有效


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)

[1] [2]
关键字:STM32  按键总结  低电平有效  上升沿有效 引用地址:STM32按键总结(低电平有效及上升沿有效))

上一篇:判断STM32 GPIO输入口的输入状态(高电平或低电平)
下一篇:STM32中关于高电平有效,低电平有效的一点理解

推荐阅读最新更新时间:2024-11-06 22:14

STM32双缓冲机制初始化(使用STM32CubeMX)
1.使用STM32CubeMX配置的串口引脚设置和dma的设置会生成在usart.c。 1)如果DMA接收想采用循环缓冲区的方式,可以直接将RX-DMA设置成Circle方式,然后数据就会硬件上自动实现环形缓冲区的功能,省了不少时间。 2)DMA在采用Normal模式的时候,当一次任务完成后,DMA- DMA_BufferSize自动清零,并且DMA自动停止。如果想再次设置DMA的BufferSize的话,必须要进行如下操作: step1:DMA_CMD(DMAx_Channely,DISABLE); step2: 设置DMA_BufferLen step3:DMA_CMD(DMAx_Channely
[单片机]
STM32独立看门狗IWDG时限的确定
看门狗定时时限= IWDG_SetReload()的值 / 看门狗时钟频率 看门狗时钟频率=LSI(内部低速时钟)的频率(40KHz)/ 分频数 1.STM32 看门狗的 例子 IWDG的时限定为280微秒。这个时限可能会随着LSI(内部低速时钟)的频率漂移而产生微小的变化。 /* IWDG timeout equal to 280 ms (the timeout may varies due to LSI frequency dispersion) ------------------------------------------------------------- */ /* Enable write acces
[单片机]
基于STM32的PS2遥控小车
摘要:PS2手柄是索尼的PlayStation2游戏机的遥控手柄。索尼的psx系列游戏主机在全球很是畅销。不知什么时候便有人打起ps2手柄的主意,破解了通讯协议,使得手柄可以接在其他器件上遥控使用,比如遥控我们熟悉的智能小车。突出的特点是这款手柄性价比极高,按键丰富,方便扩展到其它应用中。 1.PS2手柄控制 PS2手柄由手柄与接收器两部分组成,手柄主要负责发送按键信息;接收器与单片机(也可叫作主机,可直接用在PS2游戏机上)相连,用于接收手柄发来的信息,并传递给单片机,单片机也可通过接收器,向手柄发送命令,配置手柄的发送模式。 2.PS2手柄时序 1、CS线在通讯期间拉低,通信过程中CS信号线在一串数据(9个字节,每
[单片机]
基于<font color='red'>STM32</font>的PS2遥控小车
STM32学习第二课:STM32c语言基础2
1.Typedef typedef用于为现有类型创建一个新的名字,或称为类型别名,用来简化变量的定义。typedef在MDK用得最多的就是定义结构体的类型别名和枚举类型了。 如:typedef struct { u16 seq_num; u16 len; u8 dev_id ; u16 command_id; u8 *pro_data; }gprs_pro_cmd_t; 然后我们就可以直接使用gprs_pro_cmd_t定义一个结构体变量。 2.结构体 ① 一般形式:Struct 结构体名 { 成员列表; }变量名列表; ② 这样是声明后直接定义,也可以先声明,后定义; 如: Stru
[单片机]
Stm32 IO口配置和使用
1、IO的模式 STM32 GPIO的配置种类有8种: (1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输入 (3)GPIO_Mode_IPD 下拉输入 (4)GPIO_Mode_IPU 上拉输入 (5)GPIO_Mode_Out_OD 开漏输出 (6)GPIO_Mode_Out_PP 推挽输出 (7)GPIO_Mode_AF_OD 复用开漏输出 (8)GPIO_Mode_AF_PP 复用推挽输出 用的最多的也就是推挽输出、开漏输出、上拉输入。在这里做一个总结: 一、推挽输出:可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导
[单片机]
STM32+OLED巧妙显示汉字英文
目标:实现OLED_Print函数,可以在OLED屏幕上显示中英文和符号混合的任意字符串 汉字编码原理 ASCII码显示的原理这里不再说明,一般的OLED例程都有使用方法。下面说一下中文编码的原理。 在keil的环境使用的是GBK或者GB2312的编码方式,GBK编码汉字使用两个字节: 第一个字节为区码,第二个好像叫段码,区码是大于127的,段码不一定。 具体编码方式可以查阅资料: 下面编写一个简单的程序进行验证: int main(void) { char *s = 哈h ; int i; delay_init(); //延时函数初始化 NVIC_Configurat
[单片机]
STM32+OLED巧妙显示汉字英文
ARM开发(7)基于STM32的独立看门狗
一 独立看门狗原理: 1.1 本实验实现STM32的独立看门狗 1.2 实验思路:理解STM32独立看门狗原理,根据其原理写驱动。 1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真 二 实验步骤: 2.1 wdg.h代码: #ifndef __WDG_H #define __WDG_H #include sys.h void IWDG_Init(u8 prer,u16 rlr); //独立看门狗初始化 void IWDG_Feed(void); //喂狗 #endif 2.2 wdg.c代码(独立看门狗初始化与喂狗): #include wdg.h /*初始化独立看门狗 prer:分频数:0
[单片机]
STM32ADC采样时间、采样周期、采样频率计算方法
ADC转换就是输入模拟的信号量,单片机转换成数字量。读取数字量必须等转换完成后,完成一个通道的读取叫做采样周期。采样周期一般来说=转换时间+读取时间 。而转换时间=采样时间+12.5个时钟周期。采样时间是你通过寄存器告诉 STM32 采样模拟量的时间,设置越长越精确 一 STM32 ADC采样频率的确定 1. :先看一些资料,确定一下ADC的时钟: (1),由时钟控制器提供的ADCCLK时钟和PCLK2(APB2时钟)同步。CLK控制器为ADC时钟提供一个专用的可编程预分频器。 (2) 一般情况下在程序 中将 PCLK2 时钟设为 与系统时钟 相同 RCC_HCLKConfig(RCC_SYSCLK_Div1); RC
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved