STM32按键设计一之扫描
按键扫描原理
- 按键扫描即扫描IO口电平状态,来判断按键是否按下。当按键按下时,IO口电平发生改变。
- 由于按键在按下过程中,按键内部簧片接触过程中会出现很短暂的电平不稳定状态,一般需要去抖。方式有两种,第一种物理去抖,第二种软件去抖。本篇采用软件去抖,即5~10ms的延时。
扫描程序
- 在key.h中进行引脚宏定义
/* key0 define */
#define KEY0 PEin(4)
#define KEY0_GPIO_Pin GPIO_Pin_4
#define KEY0_GPIO_Port GPIOE
#define KEY0_RCC_APB2Periph_CLK RCC_APB2Periph_GPIOE/* key1 define */
#define KEY1 PEin(3)
#define KEY1_GPIO_Pin GPIO_Pin_3
#define KEY1_GPIO_Port GPIOE
#define KEY1_RCC_APB2Periph_CLK RCC_APB2Periph_GPIOE/* key_up define */
#define WK_UP PAin(0)
#define KEY_UP_GPIO_Pin GPIO_Pin_0
#define KEY_UP_GPIO_Port GPIOA
#define KEY_UP_RCC_APB2Periph_CLK RCC_APB2Periph_GPIOA
- 定义枚举值,用于扫描返回值
typedef enum _KEY_STA_t KEY_STA_t;
enum _KEY_STA_t
{KEY0_PRESS = 1,KEY1_PRESS,WK_UP_PRESS
};
- 在key.c中进行按键的IO口定义
/*** @name: KEY_GPIO_Init* @description: KEY 初始化 * @param {*}* @return {*}*/
void KEY_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(KEY0_RCC_APB2Periph_CLK | KEY_UP_RCC_APB2Periph_CLK, ENABLE);GPIO_InitStruct.GPIO_Pin = KEY0_GPIO_Pin;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(KEY0_GPIO_Port, &GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin = KEY1_GPIO_Pin;GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin = KEY_UP_GPIO_Pin;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;GPIO_Init(KEY_UP_GPIO_Port, &GPIO_InitStruct);
}
- 按键扫描函数定义
/*** @name: KEY_Scan* @description: 按键扫描* @param {u8} mode mode=0 表示开启连按; mode=1 表示不能连按;* @return {*}*/
u8 KEY_Scan(u8 mode)
{static u8 key_up = 1;if(mode) key_up = 1;if(KEY0 == 1 && KEY1 == 1 && WK_UP == 0){key_up = 1;}if(key_up && (KEY0 == 0 || KEY1 == 0 || WK_UP == 1)){delay_ms(10);if(KEY0 == 0 || KEY1 == 0 || WK_UP == 1){key_up = 0;if(KEY0 == 0) return KEY0_PRESS;if(KEY1 == 0) return KEY1_PRESS;if(WK_UP == 1) return WK_UP_PRESS;}}return 0;
}
按键扫描运行
- 在main.c中调用
int main(void)
{uint8_t key_sta = 0;uint32_t t = 0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);initSysTick();Usart1_Init(115200);LED1_Init();LED2_Init();KEY_GPIO_Init();printf("Init Hardware OK ... \n");for(;;){t++;if(t >= 2000)t = 0;/* 按键开关程序 */key_sta = KEY_Scan(0);if(key_sta == KEY0_PRESS){LED1_Open();printf("key0 press! \n");}if(key_sta == KEY1_PRESS){LED1_Close();printf("key1 press! \n");}/* 系统正常指示灯 */if(0 == t % 100) {LED2_Toggle();}}
}
- 程序运行结果,串口中的显示
喜欢请点个赞哦,谢谢!欢迎指正
STM32按键设计一之扫描相关推荐
- 单片机按键设计的四个方案
在单片机系统里,按键是常见的输入设备,在本文将介绍几种按键硬件.软件设计方面的技巧.一般的在按键的设计上,一般有四种方案:一是GPIO口直接检测单个按键,如图1.1所示;二是按键较多则使用矩阵键盘,如 ...
- STM32课程设计--数字时钟+数字电压表+扩展功能--从零开始
STM32课程设计–数字时钟+数字电压表+扩展功能–从零开始 目录 STM32课程设计--数字时钟+数字电压表+扩展功能--从零开始 准备 建立工程 下载工程模板 添加项目所需文件 下载 加入工程 加 ...
- STM32软件架构设计
STM32软件架构设计 V2.0 1.架构设计的意义 2.总体架构图 3.结构层说明 (1)应用层 (2)业务逻辑层 (3)功能模块层 (4)硬件抽象层 4.遵循规则 (1)命名 (2)调用 (3)增 ...
- STM32按键控制开关灯
2018/4/1 STM32 1.按键操作的原理 1.在stm32f103rc中,存在三个按键(不包括复位),分别为key0(PC5),key1(PA15),wkup(PA0),按下key0和key1 ...
- STM32作品设计:蓝牙彩灯V1.4(WS2812全彩、声控、光控、人体红外、小科语音控制、手机APP、蓝牙无线升级)
@ 蓝牙彩灯V1.4 biliblil视频链接:https://www.bilibili.com/video/BV14L411V78b/ 资料可联系作者:2809786963 一.功能描述 1.手机A ...
- (39)FPGA按键设计(第8天)
(39)FPGA按键设计(第8天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)FPGA按键设计(第8天) 5)技术交流 6)参考资料 2 FPGA初级课程介绍 ...
- 4月13日,每天30秒,昨夜今晨一览无余/两款iPhone 15 Pro将取消固态按键设计/法国正在考虑对苹果采取反垄断行动
1.永辉超市全资控股的私募基金主动注销 2.蚂蚁保上线"省心配"智能配置工具 3.国家能源局:大力发展风电太阳能发电,2023年全年风电.光伏装机增加1.6亿千瓦左右 4.国家能源 ...
- 【IoT-卫朋】智能硬件 | 产品按键设计
卫朋丨第123篇文章 阅读提示丨3105字 5分钟 篇幅较长,大家可先收藏 文末有免费彩蛋(8大产品干货资料) 虚实结合,打造最强产品人 上到战略规划,中至运营策略,下至元器件选型,本号力图为读者呈现 ...
- 浅析STM32 Bootloader设计
不需要拆机就能对产品进行固件升级是很多人想要的效果,不仅方便而且节省精力和成本.那么如何完成这项工作呢?接下来所介绍的Bootloader就可以完成这项工作,通过Bootloader引导程序完成固件的 ...
最新文章
- 推荐8个特别实用、功能强大的软件,解决痛点需求
- Windows下Git Bash 远程仓库
- Windows7无法访问共享文件夹(0x800704cf,0x80070035)解决方法
- HSC86H SUMTOR 混合步进伺服电机驱动器
- 计算机组成原理 — CPU 中央处理器
- GIS投影的基本原理、超图数据集导入导出坐标系文件
- java开发http协议接口_java开发接口利用http协议传输数据
- Nginx源码包软件安装步骤
- 项目质量管理—七种基本质量工具
- Java Swing
- windows补丁修复
- vue 下载Excel 文件
- Python应用练习题(第一期)——基本语句练习
- 代码的坏味道之十七 :Inappropriate Intimacy(狎昵关系)
- 比尔盖茨的风流情史,妻子同意他与前女友同居,婚内出轨损失 80 亿
- centos php 开启libgdgd_linux gd
- 微信扫一扫 扫普通链接二维码打开微信小程序
- 最长对称子串 作者 陈越单位 浙江大学
- R语言:从 csv 文件中读取数据,然后将数据写入 csv 文件
- C语言之贪吃蛇游戏源码