文章目录

  • 前言
  • KEY
    • 1.原理图以及配置元素
    • 2.CubeMx的配置步骤
    • 3.生成工程
    • 4.测试代码
    • 5.演示效果
  • 总结

前言

学完了LED和LCD后,我们开始学习按键。

KEY

1.原理图以及配置元素


分析:四个按键分别被PB0,PB1,PB2,PA0控制,这里四个IO口分别对应的按键命名为key0,key1,key2,key3

2.CubeMx的配置步骤


将上述四个IO口设置为GPIO_Input输入模式。

将四个IO口设置为上拉输入(这一步可以省略)

3.生成工程


点击完生成代码之后进入工程文件夹中的bsp文件夹

在bsp文件中新建interrupt.c和interrupt.h文件
打开工程将两个文件添加到工程中去

至此工程就建立完毕了

4.测试代码

interrupt.h:

#ifndef __INTERRUPT_H__
#define __INTERRUPT_H__#include "main.h"
#include "stdbool.h"struct keys
{unsigned char judge_sta;bool key_sta;bool single_flag;
};void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);#endif

interrupt.c:

#include "interrupt.h"struct keys key[4] = {0, 0, 0};void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM3){key[0].key_sta = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0);key[1].key_sta = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1);key[2].key_sta = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2);key[3].key_sta = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);for(unsigned char i = 0; i < 4; i++){switch(key[i].judge_sta){case 0:{if(key[i].key_sta == 0){key[i].judge_sta = 1;}}break;case 1:{if(key[i].key_sta == 0){key[i].judge_sta = 2;}else{key[i].judge_sta = 0;}}break;case 2:{if(key[i].key_sta == 1){key[i].judge_sta = 0;key[i].single_flag = 1;}}break;}}}
}

main.c的main函数部分:

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM3_Init();/* USER CODE BEGIN 2 */LCD_Init();LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);HAL_TIM_Base_Start_IT(&htim3);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */if(key[0].single_flag == 1){LCD_DisplayStringLine(Line5, "      Key0down      ");key[0].single_flag = 0;}if(key[1].single_flag == 1){LCD_DisplayStringLine(Line5, "      Key1down      ");key[1].single_flag = 0;}}/* USER CODE END 3 */
}

5.演示效果

总结

以上就是KEY的配置以及单击的测试代码。
参考的学习视频:【2023蓝桥杯 嵌入式组适用】CT117E-M4 新款开发板 3小时省赛模块 速成总结
之前的模块配置方法及测试:
【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→LED
【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→LCD

【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→KEY→单击相关推荐

  1. 【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→I2C→M24C02

    文章目录 前言 I2C 1.原理图以及配置元素 2.CubeMx的配置步骤 3.生成工程 4.测试代码 5.演示效果 总结 前言 G4板载了一块M24C02(eeprom)和一块MCP4017(可编程 ...

  2. 【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→TIM→PWM

    文章目录 前言 PWM 1.配置元素以及配置步骤 2.编写代码 3.演示效果 总结 前言 前面我们以及学完了按键的单,双,长击写法,这其实都是归功于定时器TIM的计时功能,这篇文章讲述的是TIM的输出 ...

  3. 【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→DAC

    文章目录 前言 1.CubeMx的配置步骤 2.生成工程 3.测试代码 4.演示效果 总结 前言 前面我们配置了ADC模块,本节我们学习配置DAC模块. 1.CubeMx的配置步骤 修改之前的ADC的 ...

  4. 【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→ADC

    文章目录 前言 ADC 1.原理图以及配置元素 2.CubeMx的配置步骤 3.生成工程 4.测试代码 5.演示效果 总结 前言 G4板载了四个电位器,其中左边两个是电压采集用的,本篇文章将讲述如何单 ...

  5. 【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→LCD

    文章目录 前言 LCD 1.原理图以及配置元素 2.CubeMx的配置步骤 3.移植LCD支持包 4.测试代码 5.效果显示 总结以及我的发现 1.总结 2.我的发现 前言 前面我们已经学完了LED的 ...

  6. 【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→LED

    文章目录 前言 一.软件准备 二.LED 1.G431RETx的原理图以及我们需要配置的元素 2.CubeMx的配置步骤 3.别忘了设置调试接口为SW 4.生成工程 5.测试代码 三.效果展示 总结 ...

  7. 【STM32G431RBTx】备战蓝桥杯嵌入式→扩展模块→DHT11

    文章目录 前言 一.软件准备 二.DHT11 1.扩展板上模块的原理图以及我们需要配置的元素 2.CubeMx的配置步骤 3.代码修改以及应用 方法1.以移植F103驱动包为方法 ①.在工程中添加大赛 ...

  8. 【STM32G431RBTx】备战蓝桥杯嵌入式→扩展模块→SEG

    文章目录 前言 一.软件准备 二.SEG 1.扩展板上模块的原理图以及我们需要配置的元素 2.CubeMx的配置步骤 三.测试代码 四.演示效果 五.工程链接 六.总结 前言 初赛结束之后就应该火速准 ...

  9. 蓝桥杯嵌入式基础板模块之LED模块不受控制的解决方法

    文章目录 方案一:引脚PD2锁存问题 方案二:直接对LCD部分函数进行修改 方案三:定时器方式下LED模块不受控制 关于蓝桥杯这个LED模块,如果想控制的效果如你所愿,其实并非常的简单.在这里我提供了 ...

最新文章

  1. 安装wdcp的方法和bug
  2. 007_CSS ID选择器
  3. TF.js 识别图片中的物件
  4. k8s拉取私有仓库镜像:通过config.json文件或命令行来创建secret(docker-registry)
  5. SVN中忘记上传自己写的工程,但是IP已经变了的解决方案
  6. java溢出怎么处理_java数据溢出怎么处理?
  7. Python处理各种压缩文件(bzip2,gzip,zip)
  8. Android 仿网易新闻底部Tab
  9. java 需要 不是语句,我应该避免使用Java标签语句吗?
  10. matlab取整函数与取余函数
  11. 南京大学计算机考研2022,2022考研策略解读:南京大学计算机专业考研建议与备考指导...
  12. [转]众多OCR软件
  13. 搜狗站长工具【post请求模拟登录】代码分享总结【批量提交搜狗收录网址】
  14. 爆爆爆!!Deep Mind与Google Brain合并,成立 Google DeepMind 新部门
  15. python皮卡丘字符打印代码,python画皮卡丘的代码
  16. 替代DRV8825的打印机/扫描仪驱动芯片TMI8420
  17. 三年一跳槽、拒绝“唯学历”,火速 Get 这份程序员求生指南!
  18. Ubuntu手机开发者创新大赛-西安站-6月3日 周三07:00-10:30 西安邮电大学长安校区东区fz118
  19. 每天15min-HTML5(1)-学习方法
  20. 2020上半年勒索病毒报告:勒索手段升级,不交赎金就公开数据

热门文章

  1. 通过Navicat向MySQL导入Excel文件格式数据的方法及遇到的问题
  2. Linux修改文件的时间戳
  3. Android root screencap 截图,时间优化,仅265ms
  4. 也谈ObjectARX多版本批量编译
  5. virsh命令 查看虚拟机镜像_virsh命令管理虚拟机
  6. 30个Python操作小技巧
  7. Shell编程之循环语句(详细讲解以及脚本案例)
  8. Latex 中双栏(跨栏)中插入跨双栏图片
  9. Docker如何开启远程访问,实现api远程管理?其实只需要改一个地方即可
  10. 华为服务器操作系统筹备开源社区,华为服务器操作系统开源,增强业务性能