按键扫描的一些疑惑,求指教!!!

2019-03-24 20:25发布

在项目中需要一个8*16的矩阵键盘,扫描得出键值之后通过串口发送,mcu用的是xMega,当然这个无关紧要,中间会有串口接收中断。

现在发现的现象是:按键迟滞,按键丢失

我想考虑的是:

1.按键扫描是用哪种方式好?
书本上用的 是   读取按键---延迟消抖---再次读取----得出键值
还有一种是   定时器中断(2ms)--读键值,计数---连续5次为同一键值 则认为有按键按下
还有一种反转法  这里按键太多 不太合适就不考虑了。

2.按键扫描定时器中断会不会与串口接收中断函数冲突?

如果串口连续接收,会导致按键丢失吗?

3.实验测试出现过一些奇怪现象,比如在输入  dianzi 时   会出现   diadnzi  类似这样的在后面出现前面键值重复,此现象还未考虑出原因  求教! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
hejunpeng
1楼-- · 2019-03-25 00:20
按键扫描最好就是用定时器,其实这个有点和操作系统接近了,因为操作系统都是没有延时的,都是用定时器实现的!
中断都是各有各的优先级,不会冲突!

damiaa
2楼-- · 2019-03-25 06:16
1.按键扫描是用哪种方式好?
  定时器中断(2ms)--读键值,计数---连续N次为同一键值 则认为有按键按下。不过还要考虑是上升还是下降缘,要处理。

2.按键扫描定时器中断会不会与串口接收中断函数冲突?

不会。

3.实验测试出现过一些奇怪现象,比如在输入  dianzi 时   会出现   diadnzi  类似这样的在后面出现前面键值重复,此现象还未考虑出原因  求教!
那要查查。
dj狂人
3楼-- · 2019-03-25 08:11
建议楼主先把模块分开来调试。比如调试矩阵键盘模块,看键值是否有误,无误之后再和串口一起调试。

楼主遇到的这个问题我估计是串口数据发送的速率快了(注意这里指的不是波特率。比如八位的单片机,发送完一个字节的数据后先延时一会再发送下一个字节的数据)
apitx
4楼-- · 2019-03-25 09:15
看应用,MCU繁忙就用定时器,不忙就延时。

一周热门 更多>