前言
STM32按键输入实验会把之前的LED灯和蜂鸣器的控制加入进来,通过按键来进行控制,是一个综合性比较高的实验。最后要实现的目的是:KEY_UP 控制蜂鸣器,按一次叫,再按一次停; KEY1 控制 DS1,按一次亮,再按一次灭; KEY0 则同时控制 DS0 和 DS1,按一次,他们的状态就翻转一次。除此之外还要弄清楚两种按键逻辑,一种是按了之后只触发一次,另一种是按下之后连续触发,在下面我会着重写一下这方面的内容。
硬件设计
我用的是正点原子的精英版,硬件设计如上图所示,如图可以看到WK_UP默认是低电平,按钮按下才是高电平。所以应该是下拉输入,反之KEY0和KEY1就应该是高电平,使用上拉输入。而KEY0,KEY1接入是PE3和PE4,WK_UP是PA0,等会也要对这几个端口时钟进行使能和初始化IO口,步骤同于之前的点亮LED灯。
两种按键模式程序设计
1.持续按下按钮持续响应
和电视机遥控板按钮一样,按下按钮之后它只一直响应(比如一直换台),直到你松开按钮之后它才停止响应,对于这种模式的程序,可以通过如下程序进行设计
u8 KEY_Scan(void) //定义一个扫描函数,检测按钮是否按下,只需每隔一段时间调用这个函数即可检测按钮状态
{
if(按钮按下) //检测按钮是否按下
{
delay_ms(10);//去除抖动
if按钮确实按下) //如果按钮确实按下
return KEY0_PRES; //返回按钮按下进行控制的有效值
}
return 0;// 无按键按下,返回一个无效值,即不进行操作