嵌入式单片机基础篇(四)之stm32以及51单片机按键输入详解

嵌入式单片机基础篇(四)

stm32以及51单片机按键输入详解

第一部分 stm32 按键输入

1、问题:简述按键输入的基本原理?
回答:按键输入就是将GPIO口配置成输入模式,当芯片检测到IO口的电平状态改变了就执行一些其他功能,比如让led灯发光或者蜂鸣器发声等
2、按键开关的硬件电路图分析
嵌入式单片机基础篇(四)之stm32以及51单片机按键输入详解_第1张图片
如上图所示可以分析出当按键按下时,该引脚的电平变为低电平,也就是低电平有效
3、实现程序分析
(1)首先要配置按键的IO口状态

void KEY_Init(void) //IO 初始化
{
    
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE); //使能 PORTA,PORTE 时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4;//GPIOE.3~4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化 GPIOE3,4
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //初始化 WK_UP-->GPIOA.0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 设置成输入,下拉 
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA.0
}

注意:既然是按键输入,那么IO口的状态要配置成输入模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
(2)IO口的状态配置好了之后,如果电平已经改变了,那么芯片如何接收该引脚的电平状态呢?
回答:调用下面的函数
GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) //读取PE4的引脚电平状态
(3)芯片收到了引脚的电平状态后执行其他函数功能,比如使LED发光,那么需要配置led函数,led函数如下:

void LED_Init(void)
{
   
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|
RCC_APB2Periph_GPIOE, ENABLE); //使能 PB,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;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5 推挽输出
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_SetBits(GPIOE,GPIO_Pin_5); /PE.5 输出高
}

4、问题:至此按键输入的总体思路就讲完了,那么具体如何实现按键输入呢?
回答:消抖以及程序优化
(1)消抖:(以下部分内容来源网络)
机械弹性开关:

当机械触点断

你可能感兴趣的:(嵌入式,单片机,单片机,嵌入式)