蓝桥杯 stm32 按键点灯 CubeMX
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
注我们使用的是
HAL
库
文章目录
前言
一、按键 原理图
从图中我们可以看到有 4个按键B1 , B2 , B3 , B4。
对应的 GPIO 端口是 PB0 , PB1, PB2 PA0。
当按键按下IO 口读到低电平按键弹起IO 口读到高电平。
LED 的原理图CubeMX 配置以及代码讲解都在我的上篇文章 里详细讲解了这 篇文章主要为大家讲解 按键 的使用。
蓝桥杯嵌入式之 LED 闪烁
二、按键CubeMX配置:
1设置 IO 端口是 PB0 , PB1, PB2 PA0为 输入模式。
2设置 RCC
3设置时钟选用内部时钟80 MHZ.
4设置工程模式和版本。
5选取加入.c /.h文件便于编写代码
(6) 创建工程
三、代码讲解
1. 读按键 三行代码
Trg
代表 单次触发。
Cont
表示 长按。
KB1 ~ KB4
分别对应 按键 B1 ~ B4
#define KB1 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) //B1
#define KB2 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1) //B2
#define KB3 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2) //B3
#define KB4 HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) //B4
#define KEYPORT KB1 | (KB2<<1) |(KB3<<2) |(KB4<<3) | 0xf0
u8 Trg; //全局变量单次触发
u8 Cont; //全局变量长按
/* 三行代码读按键值 */
void Key_Read(void)
{
u8 ReadData = (KEYPORT)^0xff;
Trg = ReadData & (ReadData ^ Cont);
Cont = ReadData;
}
2.按键消抖
通常我们使用的都是机械弹性开关当机械触点断开闭合时由于机械点的弹性作用一个按键在按下松开时不会马上接通断开。
为了确保按键的一次闭合一次断开只响应一次需要进行消抖处理。
按键的抖动是由按键的机械特性决定的一般都会在 10 ms
以内。
按下按键10 ms 后读取按键值。
__IO uint32_t keyTick = 0;
while(1)
{
if(uwTick - keyTick < 10) //10ms 的机械消抖
return ;
keyTick = uwTick; //便于下一次按下按键读取数值
Key_Read(); //读取按键值
}
uwTick 是延迟函数 HAL_Delay 里面的一个计时变量。 默认是 1ms
增加一次。
按下按键后uwTick 开始计数10 ms 后读取按键值。
将 keyTick = uwTick
便于下一次按下读取数值。
__IO uint32_t uwTick;
3按键点灯
可以通过 Trg & 0x01 按位进行判断是哪个按键按下。
例如
if(Trg & 0x01) //按下B1
{
LED_Control(0x10); //点亮 LED5
}
if(Trg & 0x02) //B2
{
LED_Control(0x20); //点亮 LED6
}
LED_Control ( 0x10 ) ; 该函数为点亮 LED 灯的函数前面提到了在我的上篇文章的 例程代码 中已详细讲解
。蓝桥杯嵌入式之 LED 闪烁
总结
实验效果
实验效果录制在 B 占在下面网址
https://www.bilibili.com/video/BV1s24y1Y7uZ/?vd_source=986c364d205fa1124b337bc665f57c4f