当前位置:网站首页 > 编程语言 > 正文

单片机程序可以读出来吗知乎(单片机的程序能读出吗)



源于b站up主 竞赛窖头 使用的是 hal库 芯片:STM32F103VET6  野火指南者

对于平常读取按键的写法 大家可能就是按照 江科大 或者 其他商家给的模板来进行读取。

今天,我将使用寄存器的角度 来分析读取。 先给大家上代码

1.ws_driver_borad.c (我自己的文件 大家可以改)

 

 

 

1.对于这个读取, 我们给了一个 io作为传入参数 io 是 寄存器 与 我们想要读取的按键范围 进行逻辑或的结果。

2.0xff 作为没有按下按键的判断 因为 我们这里是上拉操作,GPIO口的读取是默认---高电平,那么没有进行按键按下操作时,我们读入的,不都是高电平。

3.countflag 是我们用来进行 按键消除抖动的 ,并且给了它一个静态处理,当每次进入该函数时,这个变量才会改变。  这里是利用单片机 中的while(1) 循环读取 按键。 所以countflag 一旦到2的时候,就进入 对按键的键值判断。

4.这里的判断是 以io的值进行判断 , 请看到我的注释处 罗列出来的二进制,可以看到 键值与0的位置相对应。 符合对应的条件 就返回 键值。

 

这个代码就是对应的读取方法。

用法:

1.GPIOx  是 你按键所在的GPIO, 我这里的按键1 是在 PA0 所以我给的是 GPIOA

2.GPIOX->IDR 这个请查你的数据手册了解具体作用,这个是通用的哈。 我们只能读取它的低16位数,所对应的就是它的引脚。每一位都有对应的引脚。

比如说 PA0  --- GPIOA->IDR的第0位, 那么如果我们只需读取第0位呢?  使用逻辑或的方式。想要读取的那一位,我们设置为0 .其他的都为1 , 这个寄存器是32位的,所以高16位,我们都给1。也就是0xff , 低16位,是我们要进行操作的。  比如说我要读取第0位 。 那么我就给

0xfffe. 我们现在只关注低16位 也就是 1111 1110  你看我这里的第0位 是不是0? 如果想多读连续几位, 比如说读5位,那么按键范围就是 sw1- sw5  ---- 0xffe0  低16位 也就是 这个---1110 0000 。

在这里,你看到我还有一个(uint8_t)的强制类型转换操作。 因为我只需读取低8位的话,我就直接限制读取范围了,这样就更加精确了。 记住了GPIOx->IDR 的高16位是不能进行操作的。 只有低16位才可以进行操作。 

以上就是我对这次学习的总结。如果有任何疑问,欢迎留言讨论。

到此这篇单片机程序可以读出来吗知乎(单片机的程序能读出吗)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • mhaal00多少钱(mhaal00参数)2025-05-17 08:09:08
  • linux修改文件权限755(linux修改文件权限不够)2025-05-17 08:09:08
  • 本机信息在什么地方找回呢(本机信息在什么地方找回呢怎么查)2025-05-17 08:09:08
  • 快对作业网页版入口(快对作业网页版入口不用下载)2025-05-17 08:09:08
  • 密码库(苹果怎么查看密码库)2025-05-17 08:09:08
  • unittest用例执行顺序(unittest设置用例运行顺序)2025-05-17 08:09:08
  • tp9950引脚功能(tlp559引脚功能图)2025-05-17 08:09:08
  • 幼儿游戏的分类(幼儿游戏的分类有几种)2025-05-17 08:09:08
  • 鼠标拆包特价是什么意思(买鼠标拆包是什么意思)2025-05-17 08:09:08
  • 安装统信操作系统(安装统信操作系统配置yum)2025-05-17 08:09:08
  • 全屏图片