上篇已经介绍了点灯的操作了,本篇主要介绍按键控制LED灯进行相关操作。
同样,我们需要对GPIO进行相关的初始化配置,这里我们将LED相关的代码全部放在LED.C和LED.H文件里面。
LED.C文件:
#include "stm32f10x.h" // Device header
void LED_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
void LED1_ON(void)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}
void LED1_OFF(void)
{
GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
void LED1_Turn(void)
{
if (GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_13) == 0)
{
GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
else
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}
}
LED.H文件:
#ifndef __LED_H
#define __LED_H
void LED_Init(void);
void LED1_ON(void);
void LED1_OFF(void);
void LED1_Turn(void);
void LED2_ON(void);
void LED2_OFF(void);
void LED2_Turn(void);
#endif
然后我们开始写KEY.C和KEY.H文件里面的相关代码:
首先我们需要知道按键的模式是上拉输入模式还是下拉输入模式,那么我们要判断到底是上拉输入还是下拉输入。
像下图这样的就需要进行上拉输入。
像下图这样的是下拉输入模式
那么按键的初始化代码就可以写了,如下图:
void Key_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
这里我配置了GPIOB_Pin_1和GPIOB_Pin_11配置了上拉输入模式,这样我们的按键初始化配置就已经完成了,下面我们就需要对按键的具体应用进行写代码了:
/*************************************************************************
功能:读取按键按下的数字
参数:无
返回值:返回按下的键码
作者:Mr.Bei
*************************************************************************/
uint8_t Key_GetNum(void)
{
uint8_t KeyNum = 0;
if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0)
{
Delay_ms(20);
while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0);
Delay_ms(20);
KeyNum = 1;
}
if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0)
{
Delay_ms(20);
while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
Delay_ms(20);
KeyNum = 2;
}
return KeyNum;
}
这里我们需要知道当按键按下的时候是有按键抖动的,如下图:
所以我们对于上述代码已经进行了软件的按键消抖了,其实也可以进行搭一个消抖电路进行消抖。文章来源:https://www.toymoban.com/news/detail-448088.html
下面就是main.c的代码:文章来源地址https://www.toymoban.com/news/detail-448088.html
/*************************************************************************
功能:按下按键灯进行一次翻转
作者:Mr.Bei
*************************************************************************/
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"
uint8_t KeyNum;
int main(void)
{
LED_Init();
Key_Init();
while (1)
{
KeyNum = Key_GetNum();
if (KeyNum == 1)
{
LED1_Turn();
}
}
}
到了这里,关于STM32F103系列之按键控制LED灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!