按键用法:

  • 短按
  • 长按
  • 双击/三击

按键电平变化:按下为0,弹起为1

  1. cubeMX中配置按键引脚并将其设置为上拉

  2. 设置定时器,时钟源,分频系数,重装载值

    时钟源:Internal Clock; Prescaler:79; Counter Period:9999 ;  这样的设置是10ms中断一次

  3. 使能中断

  4. interrupt.c && interrupt.h
    重写中断处理函数

  5. interrupt.h
    #ifndef _INTERRUPT_H
    #define _INTERRUPT_H
    #include "main.h"
    #include "stdbool.h"
    struct keys
    {
    uchar judge_sta;
    bool key_sta;
    bool single_flag;
    };
    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim); #endif
  6. 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(int 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;
    key[i].single_flag=1;
    }else{
    key[i].judge_sta=0;
    }
    }
    break;
    case 2:
    {
    if(key[i].key_sta==1)
    key[i].judge_sta=0;
    }
    break;
    }
    }
    }

      

  7. main.c
    用extern导入外部变量
    注意格式不是:struct keys key[4]={0,0,0};
    而是:struct keys key[4];

    开中断

  8. 注意LED对应的数据
    LED1 0X01
    LED2 0X02
    LED3 0X04
    LED4 0X08
    LED5 0X10
    LED6 0X20
    LED7 0X40
    LED8 0X80

STM32G431RBT6之按键模块04的更多相关文章

  1. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二:按键模块① - 消抖

    实验二:按键模块① - 消抖 按键消抖实验可谓是经典中的经典,按键消抖实验虽曾在<建模篇>出现过,而且还惹来一堆麻烦.事实上,笔者这是在刁难各位同学,好让对方的惯性思维短路一下,但是惨遭口 ...

  2. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验三:按键模块② — 点击与长点击

    实验三:按键模块② - 点击与长点击 实验二我们学过按键功能模块的基础内容,其中我们知道按键功能模块有如下操作: l 电平变化检测: l 过滤抖动: l 产生有效按键. 实验三我们也会z执行同样的事情 ...

  3. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验四:按键模块③ — 单击与双击

    实验四:按键模块③ - 单击与双击 实验三我们创建了"点击"还有"长点击"等有效按键的多功能按键模块.在此,实验四同样也是创建多功能按键模块,不过却有不同的有效 ...

  4. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验五:按键模块④ — 点击,长点击,双击

    实验五:按键模块④ - 点击,长点击,双击 实验二至实验四,我们一共完成如下有效按键: l 点击(按下有效) l 点击(释放有效) l 长击(长按下有效) l 双击(连续按下有效) 然而,不管哪个实验 ...

  5. Arduino系列之按键模块(二)

    上一节简单介绍啦一下按键模块怎么使用 但是在使用过程中会常常出现延时时间过长,有时候按键会失灵 所以,接下来,我将优化程序,使得按键按下时,就能使count加1 下面是程序思路:同样的定义按键脚: 定 ...

  6. Arduino系列之按键模块(一)

    今天我将简单介绍按键模块计数的原理: 我们常用的按键及按键模块有2脚和4脚的,其内部结构如图所示,当按下按键时就会接通按键两端,当放开时,两端自然断开.                         ...

  7. Python模块04/包/logging日志

    Python模块04/包/logging日志 目录 Python模块04/包/logging日志 内容大纲 1.包 2.logging日志 3.今日总结 内容大纲 1.包 2.logging日志 1. ...

  8. 优雅的按键模块-----Multi-button

    优雅的按键模块-----Multi-button ​ 在我们日常开发和使用的过程中常常使用了一些按键,利用按键实现不同的功能,比如长按,短按,双击等等.但是每次都是采用标志等等来实现信息的读取,是否有 ...

  9. zigbee学习之路(三):按键的控制

    一.前言 通过前一次的实验,相信大家都已经对cc2530程序的编写有了一定的认识,这次我们来操作和实验的是cc2530上的按键模块. 二.原理分析 我们先来看一下按键的原理图: 根据原理图我们可以得出 ...

  10. 外部按键 控制 LED 中断 (参考 http://www.oschina.net/question/565065_115196?sort=time )

    转帖: http://www.oschina.net/question/565065_115196?sort=time 实验目的: mini2440开发板上有6个按键,将其中的前4个按键设为外部中断方 ...

随机推荐

  1. Win11专业版电脑打印机如何共享的问题

    有电脑基地的用户,在办公的时候总会需要使用到打印机的功能,把打印机连接到电脑中就可以享受打印服务,您可以随时随地使用打印机打印东西,如果想让win11系统同一台打印机同时被两台电脑连接该怎么设置呢?这 ...

  2. Threejs轨道控制器(OrbitControls)对touchmove事件的拦截

    Threejs的轨道控制器(OrbitControls)对touchmove冒泡事件的拦截 作者:咕魂 时间:2021年7月18日 问题描述: 创建控制器的方法: new THREE.OrbitCon ...

  3. Oracle调优之no_unnest和unnest用法简介

    Oracle调优之no_unnest和unnest用法简介 本博客介绍Oracle SQL调优的一种常用也是很实用的方法,也即/*+no_unnest */和/*+ unnest*/ ,介绍Oracl ...

  4. 【攻防世界】reverseMe

    1. 首先下载附件,解压出来之后得到的是一个jpg图片,这不就是翻转的flag吗? 2. 感觉这题有点脑残,除了费事,这不有手就行吗?当然,我不会这么做,先将图片左右翻转,然后图片转文字. 3. 这时 ...

  5. 关于使用思源笔记实现Typecho博客手机、电脑更新

    关于使用思源笔记实现Typecho博客手机.电脑更新 最近把网站 "多星宇博客"(www.0731119.xyz)恢复以后,我是用Typora程序源码建设的.但Typora的后台我 ...

  6. Docker Desktop里搭建Mysql 9.4主从复制的保姆级教程

    最近想自己开发一个小系统,而我的电脑里还没有安装任何的开发相关的配套软件和环境,所以想着方便以后开发的原则,就想从头到尾搭建一个mysql主从复制的数据库环境.一开始觉得这个搭建应该不难,网上有很多现 ...

  7. MySQL slow_query_log慢查询日志配置详解

    slow_query_log是记录SQL执行超过一定时间的参数. slow query log相关变量 1.命令行参数: --log-slow-queries 指定日志文件存放位置,可以为空,系统会给 ...

  8. ASP.NET Core 警惕可空类型开启之后模型校验失败

    在开启 Nullable 可空类型之后,原本可以调用的 API 也许就会提示 400 BadRequest 因为传入参数不合法,模型校验失败,此时将不会进入预期的 API 函数,同时也不会在输出里面找 ...

  9. 用 ECT-OS-JiuHuaShan框架开发程序的优势

    ECT-OS-JiuHuaShan/ORCID:0009-0006-8591-1891 ▮ 因果算符初始化完成|公理开发环境就绪 基于 ECT-OS-JiuHuaShan 框架开发程序,本质是将宇宙规 ...

  10. 基于深度学习的石头剪刀布手势识别系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)

    ​ 视频演示 基于深度学习的石头剪刀布手势识别系统演示与介绍_哔哩哔哩_bilibili 1.前言 随着人机交互技术的快速发展和智能设备的广泛应用,自然.直观的手势交互已成为提升用户体验的重要方向.石 ...