OpenEdv-开源电子网

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

矩阵键盘扫描程序,函数库版本+中断,下载进去,键盘无反应

[复制链接]

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-11-9
在线时间
0 小时
发表于 2015-2-3 16:01:28 | 显示全部楼层 |阅读模式
5金钱
源代码是参考论坛里有贴子写的,函数库版本,包含中断。。然后我再加上跑马灯,因为还没有接触串口,就想以跑马灯的形式来显示二进制的0-15。。最终的结果是键盘没有作用,跑马灯可以确定是可以用的。。哪位大神可以帮看看是哪里的问题么

template2.rar

1.72 MB, 下载次数: 130

最佳答案

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

矩阵扫描的话,可以参考我的程序,http://www.openedv.com/posts/list/46189.htm 比较简洁。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2014-12-16
在线时间
10 小时
发表于 2015-2-3 16:01:29 | 显示全部楼层
矩阵扫描的话,可以参考我的程序,http://www.openedv.com/posts/list/46189.htm
比较简洁。
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-11-9
在线时间
0 小时
 楼主| 发表于 2015-2-3 17:23:04 | 显示全部楼层
回复【2楼】prettywolf:
---------------------------------
你的otherPin[4] 是做什么用的?
回复

使用道具 举报

14

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2014-12-16
在线时间
10 小时
发表于 2015-2-3 17:25:52 | 显示全部楼层
回复【3楼】kaviw:
---------------------------------
这一句的作用是代替你代码中的这一段:功能完全一样
switch(ReadValue)
{
case 0:
GPIO_SetBits(GPIOC,GPIO_Pin_6);
GPIO_SetBits(GPIOC,GPIO_Pin_7);
GPIO_SetBits(GPIOC,GPIO_Pin_8);
GPIO_SetBits(GPIOC,GPIO_Pin_9);
break;
case 1:
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
GPIO_SetBits(GPIOC,GPIO_Pin_7);
GPIO_SetBits(GPIOC,GPIO_Pin_8);
GPIO_SetBits(GPIOC,GPIO_Pin_9);
break;
case 2:
GPIO_SetBits(GPIOC,GPIO_Pin_6);
GPIO_ResetBits(GPIOC,GPIO_Pin_7);
GPIO_SetBits(GPIOC,GPIO_Pin_8);
GPIO_SetBits(GPIOC,GPIO_Pin_9);
break;
case 3:
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
GPIO_ResetBits(GPIOC,GPIO_Pin_7);
GPIO_SetBits(GPIOC,GPIO_Pin_8);
GPIO_SetBits(GPIOC,GPIO_Pin_9);
break;
case 4:
GPIO_SetBits(GPIOC,GPIO_Pin_6);
GPIO_SetBits(GPIOC,GPIO_Pin_7);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
GPIO_SetBits(GPIOC,GPIO_Pin_9);
break;
case 5:
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
GPIO_SetBits(GPIOC,GPIO_Pin_7);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
GPIO_SetBits(GPIOC,GPIO_Pin_9);
break;
case 6:
GPIO_SetBits(GPIOC,GPIO_Pin_6);
GPIO_ResetBits(GPIOC,GPIO_Pin_7);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
GPIO_SetBits(GPIOC,GPIO_Pin_9);
break;
case 7:
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
GPIO_ResetBits(GPIOC,GPIO_Pin_7);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
GPIO_SetBits(GPIOC,GPIO_Pin_9);
break;
case 8:
GPIO_SetBits(GPIOC,GPIO_Pin_6);
GPIO_SetBits(GPIOC,GPIO_Pin_7);
GPIO_SetBits(GPIOC,GPIO_Pin_8);
GPIO_ResetBits(GPIOC,GPIO_Pin_9);
break;
case 9:
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
GPIO_SetBits(GPIOC,GPIO_Pin_7);
GPIO_SetBits(GPIOC,GPIO_Pin_8);
GPIO_ResetBits(GPIOC,GPIO_Pin_9);
break;
case 10:
GPIO_SetBits(GPIOC,GPIO_Pin_6);
GPIO_ResetBits(GPIOC,GPIO_Pin_7);
GPIO_SetBits(GPIOC,GPIO_Pin_8);
GPIO_ResetBits(GPIOC,GPIO_Pin_9);
break;
case 11:
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
GPIO_ResetBits(GPIOC,GPIO_Pin_7);
GPIO_SetBits(GPIOC,GPIO_Pin_8);
GPIO_ResetBits(GPIOC,GPIO_Pin_9);
break;
case 12:
GPIO_SetBits(GPIOC,GPIO_Pin_6);
GPIO_SetBits(GPIOC,GPIO_Pin_7);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
GPIO_ResetBits(GPIOC,GPIO_Pin_9);
break;
case 13:
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
GPIO_SetBits(GPIOC,GPIO_Pin_7);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
GPIO_ResetBits(GPIOC,GPIO_Pin_9);
break;
case 14:
GPIO_SetBits(GPIOC,GPIO_Pin_6);
GPIO_ResetBits(GPIOC,GPIO_Pin_7);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
GPIO_ResetBits(GPIOC,GPIO_Pin_9);
break;
case 15:
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
GPIO_ResetBits(GPIOC,GPIO_Pin_7);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
GPIO_ResetBits(GPIOC,GPIO_Pin_9);
break;

}
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-11-9
在线时间
0 小时
 楼主| 发表于 2015-2-3 17:38:00 | 显示全部楼层
回复【4楼】prettywolf:
---------------------------------
那你能看看我的代码里是哪里出问题了么。。
回复

使用道具 举报

14

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2014-12-16
在线时间
10 小时
发表于 2015-2-3 17:45:24 | 显示全部楼层
回复【5楼】kaviw:
---------------------------------
代码太复杂了,看不出。
不过原理是这样:
先扫描列,检测某列到有键按下时,再扫描每行,具体为:
逐行GPIO_ResetBits(GPIOC,rowPin);//0-3行
其它的三行置GPIO_SetBits(GPIOC,otherPin); 这里的otherPin就是除了上一行中的PIN的另外三行所接的PIN
这时再检测上面检测到有键按下的列的数值,即可确定哪个键按下了
回复

使用道具 举报

14

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2014-12-16
在线时间
10 小时
发表于 2015-2-3 17:56:49 | 显示全部楼层
回复【5楼】kaviw:
---------------------------------
中断我没用过,不过你那扫描是很有问题。
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-11-9
在线时间
0 小时
 楼主| 发表于 2015-2-3 18:03:06 | 显示全部楼层
回复【7楼】prettywolf:
---------------------------------
额,我用你那种扫描方式试一下
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-11-9
在线时间
0 小时
 楼主| 发表于 2015-2-4 14:45:25 | 显示全部楼层
回复【7楼】prettywolf:
---------------------------------
你这种方法对我不太可行啊,我后面得做11*12的键盘,,如果用你那个otherPin[4],那不得排死
回复

使用道具 举报

14

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2014-12-16
在线时间
10 小时
发表于 2015-2-4 16:21:17 | 显示全部楼层
回复【9楼】kaviw:
---------------------------------
没事啊,只要定义otherPin[12]就行了,只有12个数的数组
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-11-9
在线时间
0 小时
 楼主| 发表于 2015-2-7 10:07:28 | 显示全部楼层
回复【10楼】prettywolf:
---------------------------------
在线的话留个QQ,有两问题想咨询一下,谢谢啊
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-11-9
在线时间
0 小时
 楼主| 发表于 2015-2-7 10:07:45 | 显示全部楼层
回复【11楼】kaviw:
---------------------------------
或者加我也行 499131808
回复

使用道具 举报

14

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2014-12-16
在线时间
10 小时
发表于 2015-2-7 12:52:59 | 显示全部楼层
回复【12楼】kaviw:
---------------------------------
59377629
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-7-5
在线时间
14 小时
发表于 2019-8-3 19:53:17 | 显示全部楼层
请问解决了吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-30 19:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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