第15届蓝桥杯嵌入式省赛准备第二天总结笔记(使用STM32cubeMX创建hal库工程+按键输入)

一.查看电路图

按键是使用的PB0,PB1,PB2,PA0四个引脚,然后使用CubeMX配置引脚,4个脚都配置为输入模式和上拉。

程序生成之后把不用的删掉,需要的留下,这里我把函数名改了。

然后写按键扫描读取程序,这里参考的正点原子的按键输入程序(感谢原子哥感谢左神)。

这是点C程序:

#include "key.h"

void Key_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
	
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin : PA0 */
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /*Configure GPIO pins : PB0 PB1 PB2 */
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

/*输入:1|0 模式 1为连续按,0为不连续按*/

unsigned char Key_Scan(unsigned char mode)
{
	static unsigned int key_mode;
	if(mode == 1)key_mode = 1;
	if(key_mode == 1&&(KEY0 == 0||KEY1 == 0||KEY2 == 0||KEY3 == 0))
	{
		HAL_Delay(10);
		key_mode = 0;
		if(KEY0 == 0){return KEY0_FLG;}
		else if(KEY1 == 0){return KEY1_FLG;}
		else if(KEY2 == 0){return KEY2_FLG;}
		else if(KEY3 == 0){return KEY3_FLG;}
	}
	else if(KEY0 == 1||KEY1 == 1||KEY2 == 1||KEY3 == 1) key_mode = 1;
	return 0;
}

这是点H程序:

#ifndef __KEY_H
#define __KEY_H
#include "main.h"

#define KEY0 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)
#define KEY1 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)
#define KEY2 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)
#define KEY3 HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)

#define KEY0_FLG 1
#define KEY1_FLG 2
#define KEY2_FLG 3
#define KEY3_FLG 4

void Key_Init(void);
unsigned char Key_Scan(unsigned char mode);
#endif

这是主程序:滴答定时器10ms扫描一次,按键1按下的话LED显示0x55,按键2按下的话LED显示0xAA;Led_Disp程序是我自己写的,新手朋友注意

unsigned char key; 
int main(void)
{
  HAL_Init();
  SystemClock_Config();
	
  MX_GPIO_Init();
	LCD_Init();
	LED_Init();
	Key_Init();
  while (1)
  {
		if(uwTick % 10 == 0)
		{
			key=Key_Scan(0);
		}
		if(key == 1)
		{
      Led_Disp(0x55);
		}
		if(key == 2)
		{
     Led_Disp(0xaa);
		}
		  

  }

}

接下来看效果:

按键演示

最近更新

  1. TCP协议是安全的吗?

    2024-01-22 19:20:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-22 19:20:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-22 19:20:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-22 19:20:01       20 阅读

热门阅读

  1. linux上设置自启动jar程序

    2024-01-22 19:20:01       31 阅读
  2. 使用Element-Plus 加载style

    2024-01-22 19:20:01       34 阅读
  3. 编码风格之(5)GNU软件编码风格(3)

    2024-01-22 19:20:01       29 阅读
  4. React16源码: React中的IndeterminateComponent的源码实现

    2024-01-22 19:20:01       36 阅读
  5. 让页面里的字体变清晰,变细用CSS怎么做?

    2024-01-22 19:20:01       36 阅读
  6. Webpack5入门到原理18:Plugin 原理

    2024-01-22 19:20:01       27 阅读
  7. 盘点好用内容合规监测工具

    2024-01-22 19:20:01       72 阅读
  8. leetcode-二叉树的后序遍历

    2024-01-22 19:20:01       43 阅读
  9. 数据结构 | 数组

    2024-01-22 19:20:01       38 阅读