STM32按键扫描代码示例与解析

本篇博客文章将介绍如何使用STM32F10x系列微控制器进行按键扫描,并提供一个简单易懂的代码示例。

代码示例

#include 'stm32f10x.h'
#include 'key.h'
#include 'sys.h' 
#include 'delay.h'


void KEY_Init(void) //IO初始化
{
 	GPIO_InitTypeDef GPIO_InitStructure;

 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
 	GPIO_Init(GPIOC, &GPIO_InitStructure);		 

}

uint8_t KEY_Scan(uint8_t mode) //按键扫描函数
{
	static uint8_t key_up=1;	//按键松开标志
	if(mode) key_up=1;  //支持连按
	
	if(key_up && (!KEY1 || !KEY2 || !KEY3))
	{
		delay_ms(10);	//消抖
		key_up=0;
		if(!KEY1) return KEY1_PRES;
		else if(!KEY2) return KEY2_PRES;
		else if(!KEY3) return KEY3_PRES;
	}
	else if(KEY1 && KEY2 && KEY3) key_up=1; 	  
	return 0;// 无按键按下
}

代码解析

  • KEY_Init()函数:

    • 该函数用于初始化按键连接的GPIO引脚。
    • 代码首先使能了GPIOC的时钟,然后将GPIO_Pin_13、GPIO_Pin_14和GPIO_Pin_15配置为输入模式,并开启了上拉电阻。
  • KEY_Scan()函数:

    • 该函数用于扫描按键的状态并返回按键值。
    • key_up变量用于记录按键是否松开,初始值为1,表示按键松开。
    • mode参数为1时,表示支持连按,将key_up设置为1。
    • 当检测到任意一个按键按下时,延时10ms进行软件消抖,然后判断哪个按键按下并返回相应的键值。
    • 如果没有按键按下,则将key_up设置为1,表示按键松开,并返回0。

使用方法

  1. 将代码添加到你的STM32工程中。
  2. 在主函数中调用KEY_Init()函数初始化按键。
  3. 在需要检测按键的地方调用KEY_Scan()函数获取按键状态。

注意

  • 该代码示例使用了软件消抖,如果你的应用场景对按键响应速度要求较高,建议使用硬件消抖。
  • 你需要根据实际电路连接修改GPIO引脚和按键定义。

希望这篇博客文章能够帮助你理解STM32按键扫描的基本原理和方法。

STM32按键扫描代码示例与解析

原文地址: http://www.cveoy.top/t/topic/judu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录