首页 > 其他分享 >蓝桥杯嵌入式——KEY模块

蓝桥杯嵌入式——KEY模块

时间:2023-03-14 23:22:48浏览次数:47  
标签:HAL led KEY void 嵌入式 蓝桥 TIM key GPIO

配置

 

这个是引脚配置

 

 然后是时钟配置(分频和arr)

 

 别忘了这个

 

编程(初始化)

 这个真的很容易忘记

1     HAL_TIM_Base_Start_IT(&htim3);

编程(中断)

.h文件中需要记忆结构体的声明

 1 #ifndef _interrupt_H_
 2 #define _interrupt_H_
 3 
 4 #include "main.h"
 5 #include "stdbool.h"
 6 
 7 struct keys
 8 {
 9     bool key_now;
10     uint8_t key_flag;
11     bool key_single;
12 };
13 
14 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
15 
16 #endif

.c文件中编写中断回调函数(至少需要记忆函数名称)

 1 #include "interrupt.h"
 2 
 3 struct keys key[4]={0,0,0};
 4 
 5 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
 6 {
 7     if(htim->Instance==TIM3)
 8     {
 9         key[0].key_now = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);
10         key[1].key_now = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);
11         key[2].key_now = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);
12         key[3].key_now = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
13         
14         for(uint8_t i=0;i<4;i++)
15         {
16             switch(key[i].key_flag)
17             {
18                 case 0:
19                 {
20                     if(key[i].key_now==0)
21                     {
22                         key[i].key_flag = 1;
23                     }
24                 }
25                 break;
26                 case 1:
27                 {
28                     if(key[i].key_now==0)
29                     {
30                         key[i].key_flag = 2;
31                         key[i].key_single = 1;
32                     }
33                     else
34                     {
35                         key[i].key_flag = 0;
36                     }
37                 }
38                 break;
39                 case 2:
40                 {
41                     if(key[i].key_now==1)
42                     {
43                         key[i].key_flag = 0;
44                     }
45                 }
46                 break;
47             }
48         }
49     }
50 }

应用

变量声明

1 extern struct keys key[4];
2 bool led_sta = 1;
3 void led_prc(void);

变量中的函数书写(LED_Disp的书写可以看led部分),led_prc()这个函数可以让灯进行切换点亮

 1 void led_prc(void)
 2 {
 3     if(key[0].key_single==1)
 4     {
 5         if(led_sta)
 6         {
 7             LED_Disp(0x01);
 8         }
 9         else
10         {
11             LED_Disp(0x02);
12         }
13         led_sta = !led_sta;
14         key[0].key_single = 0;
15     }
16 }

 

标签:HAL,led,KEY,void,嵌入式,蓝桥,TIM,key,GPIO
From: https://www.cnblogs.com/Euphonium611/p/key_key611.html

相关文章

  • 蓝桥杯嵌入式——LED模块
     配置这一块的配置比较常规,没有什么特别要说的 编程 编程的话,主要是LED_DISP的编写,这个编写之后对小灯的控制会很方便主要要记得传入的参数类型为unsignedchar,......
  • Java蓝桥杯
    1、特殊回文数:123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。publicclassMa......
  • 使用自定义关键字实现上传文件功能(keyword)
    1.创建cn.groovy(右键New-package;右键new-keyword)-创建完成packagetestclassimportstaticcom.kms.katalon.core.checkpoint.CheckpointFactory.findCheckpointimp......
  • ThreadLocalMap.key到期之'探测是清理'+'启发式清理'流程
    1.ThreadLocalMap.key到期的两种清理方式上文中:ThreadLocal内存泄露问题-lihewei-博客园(cnblogs.com)我们提到ThreadLocalMap的key会因为GC导致过期,在ThreadLoca......
  • java.security.KeyStoreException: problem accessing trust store
    发送邮件,使用了ssl认证,配置了相关代如下: 相同的配置在本地能发送邮件,在测试环境发送出现了下面的异常: 网上找了一些解决办法,说是把\jre\lib\security下的两个jar包......
  • P8680 [蓝桥杯 2019 省 B] 特别数的和
    P8680[蓝桥杯2019省B]特别数的和[蓝桥杯2019省B]特别数的和题目描述小明对数位中含有2、0、1、9的数字很感兴趣(不包括前导0),在1到40中这样的数包括1、2......
  • el-radio 绑定键值对 keyvalue list
    data(){return{options:{'key1':'value1','key2':'value2','key3':'value3'},selected:'key1'}}<el-radio-group......
  • 键盘时间keyup / keydown / keypress为什么用传统注册方式可以执行,用addEventListener
    传统注册方式代码:document.onkeyup=function(){console.log('我弹起了');}document.onkeydown=function(){consol......
  • 使用脚本让一台电脑存在多个ssh-key
    这是一篇关于如何使用脚本来控制一台电脑上多个ssh-key。在一台电脑上,会同时用公司git,github,gitlab,gitee,但是每一个邮件和名字不一样,那么如何管理不同的ssh-key呢,采用的脚......
  • keydb redis 兼容协议服务
    keydb是完全兼容redis协议的服务,同时支持了不少其他特性,比如多主,多复制,对于我们的集群环境部署简化了不少而且还有一个不错的优势是性能(利用了多线程提供了不错的性能)官......