1、硬件准备
我使用的是市面上常见的黑色开发板,烧入器使用的是正点原子的无线烧入器,普通的烧入器也行,这个无所谓。开发板的原理图我放在下面链接里,我们需要知道相应的KEY引脚。
2、预期功能
通过按键的输入模式控制LED灯的亮灭。
3、程序编写
3.1、CUBEMX部分
在配置之前我们需要知道板子上按键对应的引脚,查看原理图可知KEY0-PE4,KEY1-PE3。同时,我们知道当按键按下的时候引脚连接的为低电平,因此当按键没有被按下时应该为高电平,我们则要设置为上拉。
我们直接在上一节的部分修改添加代码,先复制整个项目工程,重命名之后打开相应的cubemx,添加如下配置。
完成配置之后我们生成代码。
3.2、keil部分
同样我们新建key.c与key.h,将其添加进我们的项目中。
key.c:
#include "key.h"
/* *****************KEY函数***************** */
// KEY1
uint8_t KEY1_Style(void)
{
uint8_t i;
// 如果按键被按下
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == GPIO_PIN_RESET)
{
// 按键消除抖动,延迟检测
HAL_Delay(10);
// 检测按键时候还是闭合状态
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == GPIO_PIN_RESET){
// 标志位置1
i = 1;
}
}
// 如果按键没有被按下
else{
// 标志位置0
i = 0;
}
return i;
}
// KEY0
uint8_t KEY0_Style(void)
{
uint8_t i;
// 如果按键被按下
if(HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) == GPIO_PIN_RESET)
{
// 按键消除抖动
HAL_Delay(10);
// 检测按键时候还是闭合状态
if(HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) == GPIO_PIN_RESET){
// 标志位置1
i = 1;
}
}
// 如果按键没有被按下
else{
// 标志位置0
i = 0;
}
return i;
}
key.h:
#ifndef __KEY_H__
#define __KEY_H__
#include "main.h"
uint8_t KEY1_Style(void);
uint8_t KEY0_Style(void);
#endif
main.c
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(KEY0_Style() == 1)
{
LED1_Style(1);
LED2_Style(1);
}
if(KEY0_Style() == 0)
{
LED1_Style(2);
LED2_Style(2);
}
}
/* USER CODE END 3 */
其他位置没有添加代码。
这个效果就是通过按键控制相应的LED灯。
4、源码链接
链接:https://pan.baidu.com/s/1jaz4ydbUhfRIXNyahHWHGA
提取码:1234