一、按键输入的原理
我们能使用按键能做很多事,比如说按键控制LED的亮灭,这是最简单的,但是我们可以写一个通用的工程,作为底层驱动。
-
按键的原理图
相对应的引脚
KEY0 ------------>PE4
KEY1 ------------>PE3
LED0 ------------>PB5 -
按键的原理
按键相对的引脚,在这儿我举个例子,就拿PE3引脚来说,按键另一端是地GND,所以我们设置引脚属性为上拉,让芯片快速读取,我们采用一个按键扫描函数,我们定时读取PE3引脚的电平,这样我们就得到了按键是否按下了。 -
按键的消抖
当按键按下的时候会受到抖动,我们可以采用短暂的延时程序进行消抖,约等10ms的时间,延时完就再做一次判断,看看按键是否真的按下。
二、按键的代码
1.代码工程整合
新建BSP文件夹,新建LED文件夹,BEEP文件夹,KEY文件夹
下面的是主函数的代码
代码如下(示例):
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "key.h"
int main(void)
{
u8 key;
LED_Init();
delay_init();
KEY_Init();
while(1)
{
key=Key_Scan();
if(key==1)
{
LED0_ON;
}
else if(key==2)
{
LED0_OFF;
}
}
}
LED的.c文件
代码如下:
#include "led.h"
//初始化PB5和PE5为输出口.并使能这两个口的时钟
//LED IO初始化
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能PE口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
}
key.c文件内容
#include "stm32f10x.h"
#include "key.h"
#include "delay.h"
//按键初始化函数
void KEY_Init(void) //IO初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//使能PORTA,PORTE时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_3;//KEY0-KEY1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE4,3
}
//按键扫描函数
//如果KEY0按下返回值是1
//KEY1按下返回值是2
u8 Key_Scan(void)
{
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0)
{
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0)
{
return 1;
}
}
/
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0)
{
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0)
{
return 2;
}
}
return 0;
}
总结
实验结果为
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/ebc4eeb3919e4150a74354222a243b07.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YeR5Y2O5Y2D6L-56JC956u5,size_19,color_FFFFFF,t_70,g_se,x_16#pic_center
相关的代码资料在 这儿:
链接:https://pan.baidu.com/s/1QoglZk_x7LWhG3tjULhMRg
提取码:y8by