您的位置 首页 汽车

根据stm32的独立按键扫描方法

这两天完成了一个stm32的工程,在解决按键时写出了一个独立按键的扫描函数,应该有前辈已经出来了,的其实质就是普通的扫描方式修改的,优…

这两天完成了一个stm32的工程,在处理按键时写出了一个独立按键的扫描函数,应该有长辈现已出来了,的其实质便是一般的扫描办法修正的,长处是将按键相关参数封装为一个结构体,每加一个按键都不需要在函数中添加查办,废话少说,先看扫描函数

//*
// Function: 扫描按键
// Returns: u8 :按键id值
//*
u8 KeyScan()
{
static u8 keyUp=1;//按键按松开标志
u8 i,count,upCount=0;
count=sizeof(buttons)/sizeof(Button);
for (i=0;i{
if (keyUp && (GPIO_ReadInputDataBit(buttons[i].ButtonPort,buttons[i].ButtonPin)==0))
{
keyUp = 0;
delay_ms(10);
if (GPIO_ReadInputDataBit(buttons[i].ButtonPort,buttons[i].ButtonPin)==0)
{
return buttons[i].ButtonId;
}
}
else if ((GPIO_ReadInputDataBit(buttons[i].ButtonPort,buttons[i].ButtonPin)==1))
{
upCount++; //记载有多少个按键松开了
}
}
if (upCount == count)//按键松开数等于总按键数
{
keyUp = 1;
}
return ButtonNone;// 无按键按下
}

通俗易懂吧。接下来看结构体原型

typedef struct
{
GPIO_TypeDef* ButtonPort;//按键端口
uint16_t ButtonPin;//按键引脚
u8ButtonId;//按键ID
}Button;

使用办法

Button buttons[]={{GPIOB,GPIO_Pin_5,ButtonFunction},
{GPIOB,GPIO_Pin_6,ButtonUp},
{GPIOB,GPIO_Pin_1,ButtonDown},
{GPIOB,GPIO_Pin_0,4}};

一般的结构体初始化办法,前两个参数我们都懂,最终一个能够界说一个枚举,当然也能够自己赋值,留意别重复和界说为0了,由于0一般用来当作没有按键的返回值。现在要加减按键就只需在上面的数组中处理。当然别忘了端口的初始化,这个就不说了。

剖析一下优缺陷,

长处:便于扩展,每加减一个按键都不必修正首要的按键扫描函数,假如端口初始化函数写得好的话连端口初始化函数都能够不必管。

缺陷:假如按键过多,会丢失不少时刻,首要原因是循环结构

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/265369.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部