OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9134|回复: 9

这是一个4*4的代码,矩阵键盘

[复制链接]

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2021-4-17
在线时间
45 小时
发表于 2021-9-10 14:04:35 | 显示全部楼层 |阅读模式
大家有资源共享啊


51.rar

2.76 MB, 下载次数: 269

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

79

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1870
金钱
1870
注册时间
2018-10-11
在线时间
252 小时
发表于 2021-9-10 15:39:48 | 显示全部楼层
用delay来消抖的,现实生产是不能用的....
回复 支持 反对

使用道具 举报

3

主题

117

帖子

0

精华

高级会员

Rank: 4

积分
559
金钱
559
注册时间
2018-10-3
在线时间
107 小时
发表于 2021-9-10 16:37:31 | 显示全部楼层
spritels 发表于 2021-9-10 15:39
用delay来消抖的,现实生产是不能用的....

除了初始化。其他地方我永远都不会去用delay的死等延时。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2020-9-25
在线时间
16 小时
发表于 2022-5-12 16:47:17 | 显示全部楼层
wklhwkl 发表于 2021-9-10 16:37
除了初始化。其他地方我永远都不会去用delay的死等延时。

那你一般有什么方法实现延时呢,请赐教。
回复 支持 反对

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2022-5-7
在线时间
20 小时
发表于 2022-5-12 17:03:56 | 显示全部楼层
wklhwkl 发表于 2021-9-10 16:37
除了初始化。其他地方我永远都不会去用delay的死等延时。

对,我也是初学者,也很想知道实际生产中会用什么来替代delay_
有空的话可以讲一下
回复 支持 反对

使用道具 举报

8

主题

169

帖子

0

精华

高级会员

Rank: 4

积分
564
金钱
564
注册时间
2015-7-4
在线时间
105 小时
发表于 2022-5-13 11:05:48 | 显示全部楼层
971吖 发表于 2022-5-12 16:47
那你一般有什么方法实现延时呢,请赐教。

定时器写标志位,10ms采集一次按键,连续2次采集到按键按下,即可
回复 支持 反对

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4838
金钱
4838
注册时间
2017-7-6
在线时间
716 小时
发表于 2022-5-13 11:21:52 | 显示全部楼层
sinus 发表于 2022-5-12 17:03
对,我也是初学者,也很想知道实际生产中会用什么来替代delay_
有空的话可以讲一下

用定时器+队列(特别是按键多的话,像矩阵按键一样)
我是小白,很白很白的小白!!!
回复 支持 反对

使用道具 举报

9

主题

218

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1419
金钱
1419
注册时间
2020-5-12
在线时间
391 小时
发表于 2022-5-13 12:51:00 | 显示全部楼层
sinus 发表于 2022-5-12 17:03
对,我也是初学者,也很想知道实际生产中会用什么来替代delay_
有空的话可以讲一下

可以参考我发的按键demo
回复 支持 反对

使用道具 举报

3

主题

117

帖子

0

精华

高级会员

Rank: 4

积分
559
金钱
559
注册时间
2018-10-3
在线时间
107 小时
发表于 2022-5-18 17:00:55 | 显示全部楼层
sinus 发表于 2022-5-12 17:03
对,我也是初学者,也很想知道实际生产中会用什么来替代delay_
有空的话可以讲一下

很简单的一种,首先需要一个定时器必备的。
定义一个全局变量a;
定时器比如是1ms进一次中断。 中断里就a++;
其他地方就好写了。
比如要延时100ms的延时
delayCount = 100+a;
while(1)
{
      if(delayCount < a)
      {
             delayCount  =  100+a;
             //任务
      }
}
这样延时100ms也不会影响到其他任务。 当然这种是裸机的写法。
如果是cube工程  可以直接把a改为hal_gettick();
回复 支持 反对

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2022-5-7
在线时间
20 小时
发表于 2022-5-22 22:25:18 | 显示全部楼层
wklhwkl 发表于 2022-5-18 17:00
很简单的一种,首先需要一个定时器必备的。
定义一个全局变量a;
定时器比如是1ms进一次中断。 中断里 ...

1.这好处是不影响其他任务是吧
2.1ms进行一次中断,然后中断里a++,全局变量a,在if里(delayCount < a),额嗯,这个罗技下来是对的吗,,我有点不理解
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-27 15:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表