OpenEdv-开源电子网

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

51单片机矩阵多个按键同时按下如何写程序?

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-12-12
在线时间
1 小时
发表于 2017-12-12 21:26:06 | 显示全部楼层 |阅读模式
1金钱
矩阵扫描键盘已经写完了,单个按键按下没问题,如何写两个、多个按键同时按下的程序

最佳答案

查看完整内容[请看2#楼]

第一次回帖,不太懂规矩。 刚才写了一长篇,因为说是验证码错误(明明我输对了),给弄丢了。 那我长话短说。 逐行检测吧。分四次,把第一、二、三、四行分别检测,这样的话,就不会冲突了。 通常做法是两步操作,置位高四位,测低四位,确定X坐标,置位低四位,测高四位,确定Y坐标。这样,必然只能测一个按键,如果多键同时按下,如果程序编制不当,甚至会得到一个根本不存在的按键值,引起程序逻辑故障。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
904
金钱
904
注册时间
2017-12-15
在线时间
111 小时
发表于 2017-12-12 21:26:07 | 显示全部楼层
第一次回帖,不太懂规矩。
刚才写了一长篇,因为说是验证码错误(明明我输对了),给弄丢了。

那我长话短说。

逐行检测吧。分四次,把第一、二、三、四行分别检测,这样的话,就不会冲突了。
通常做法是两步操作,置位高四位,测低四位,确定X坐标,置位低四位,测高四位,确定Y坐标。这样,必然只能测一个按键,如果多键同时按下,如果程序编制不当,甚至会得到一个根本不存在的按键值,引起程序逻辑故障。
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-12-12 21:41:01 | 显示全部楼层
超过3个有点复杂..两个可以.比较简单
回复

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2015-3-27
在线时间
98 小时
发表于 2017-12-14 09:49:47 | 显示全部楼层
矩阵扫描应该不存在单个和多个按下之说吧...
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-12-12
在线时间
1 小时
 楼主| 发表于 2017-12-14 15:22:28 | 显示全部楼层
操作系统 发表于 2017-12-12 21:41
超过3个有点复杂..两个可以.比较简单

那两个怎么写,是扫第一行时候再从第一行开始扫一遍吗
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-12-12
在线时间
1 小时
 楼主| 发表于 2017-12-14 15:23:33 | 显示全部楼层
弦子的弦 发表于 2017-12-14 09:49
矩阵扫描应该不存在单个和多个按下之说吧...

就是按下一个按键返回一个值,同时按下两个或者多个返回其他值
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-12-14 16:41:52 | 显示全部楼层
准备一个数组..比方说KEY[8], 还有按键数量.
回复

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2015-3-27
在线时间
98 小时
发表于 2017-12-14 16:51:18 | 显示全部楼层
Lelouchvi 发表于 2017-12-14 15:23
就是按下一个按键返回一个值,同时按下两个或者多个返回其他值

一般的做法是建立一个数组,每按下一个按键就存放进去.然后单片机再一个一个处理.
回复

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2015-3-27
在线时间
98 小时
发表于 2017-12-14 16:51:29 | 显示全部楼层
Lelouchvi 发表于 2017-12-14 15:23
就是按下一个按键返回一个值,同时按下两个或者多个返回其他值

一般的做法是建立一个数组,每按下一个按键就存放进去.然后单片机再一个一个处理.
回复

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2015-3-27
在线时间
98 小时
发表于 2017-12-14 16:51:53 | 显示全部楼层
Lelouchvi 发表于 2017-12-14 15:23
就是按下一个按键返回一个值,同时按下两个或者多个返回其他值

一般的做法是建立一个数组,每按下一个按键就存放进去.然后单片机再一个一个处理.
回复

使用道具 举报

2

主题

255

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2013-6-5
在线时间
142 小时
发表于 2017-12-17 21:16:12 | 显示全部楼层
矩阵,没有办法检测多键同时按下。
回复

使用道具 举报

10

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1770
金钱
1770
注册时间
2014-6-27
在线时间
961 小时
发表于 2018-2-1 15:08:12 | 显示全部楼层
单个按键可以了,多个按键同时按下的,你判断多个按键按下时的物理状态,给个键值出来就行了,就算是所有按键同时按下,都可以得出键值。
回复

使用道具 举报

4

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2015-12-16
在线时间
34 小时
发表于 2018-2-1 16:33:33 | 显示全部楼层
那得看你是怎么扫描的按键,如果你扫描到一个按键按下就给按键状态标志字某一位置位,如果确定按键释放再清零相应位,那么检查这个标志字就可以知道所有按键的当前状态了!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-1 11:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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