当前位置: 首页 > article >正文

蓝桥杯——按键

一:按键得原理图

二:按键的代码配置

step1  按键原理图对应引脚配置为输入状态

step2  在GPIO中将对应引脚设置为上拉模式

step3  在fun.c中写按键扫描函数

写完后的扫描函数需放在主函数中不断扫描

扫描函数主要通过两个定义变量的值来判断,一个当前状态变量state读取对应按键引脚的gpio值,一个last_state 变量在判断条件结束后赋予当前state的值,state重新获取gpio值如此循环

三:长按键和短按键

1.基础依据

定时器开始时cnt就会从0开始一直加,直到cnt=arr+1时产生定时器中断,cnt=0又开始加一直反复

我们需要计算cnt每次加一所需要的时间t0是多少,t0根据公式推导,t0=(psc+1)/f(f为系统频率为8000),

此外还可以通过cnt来求cnt为某值(如cnt=10000)所需要的时间t,如此得到长按键的思路,按键按下时令cnt=0;用if语句判断cnt是否大于1000(即按键是否按下超过一秒钟),如果是长按键则在if语句中些需要进行的操作

2.长按键配置

step1.另外配置一个定时器(TIM3,钟源选内部时钟,配置psc值)

注意定时器中断不用打开,直接生成代码

step2.按照基础依据写代码,设置为1,因为初始化时默认为0,不设为1就会直接一开始时就认为按键B1按下松开count+=2;

注意:定时器配置时有中断要使能,没有中断也要使能,有IT说明与中断有关,即有中断的TIM用带IT的函数语句使能,没有中断的TIM用没有IT的使能

我们上述配置时为按键长按一秒的配置,如果想改长按时间不需重新配置,只要改代码的cnt比较值就好


http://www.kler.cn/a/557640.html

相关文章:

  • 从零搭建微服务项目Pro(第1-1章——Quartz实现定时任务模块)
  • 实现 INFINI Console 与 GitHub 的单点登录集成:一站式身份验证解决方案
  • 国产编辑器EverEdit - 洞察秋毫!内置文件比较功能!
  • 正确清理C盘空间
  • 【AI】常见的AI工具地址和学习资料链接
  • INDEMIND:AI视觉赋能服务机器人,“零”碰撞避障技术实现全天候安全
  • picgo-plugin-huawei插件发布
  • github配置sshkey
  • Apipost 与 Postman 工具实践指南:WebSocket调试与动态参数测试
  • springboot单机支持1w并发,需要做哪些优化
  • Mac m1 连接公司内网
  • 期权帮|股指期货中的套期保值如何操作?
  • 智慧校园导航系统路径规划实战(附Python源码):用A*算法实现教学楼最优路径搜索
  • 听懂 弦外之音
  • 模电之深度负反馈详解
  • JavaScript函数-函数的参数
  • 【AI】详解从数学到物理再到工程应用,人类研究新理论 新方法的研究范式 (deepseek chatgpt Gemini等)...
  • Android studio如何把新项目上传到svn仓库
  • 实现一个简单的拉取网络todo app
  • 使用Ubuntu搭建Java部署环境