OpenEdv-开源电子网

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

这样一个6*6的矩阵键盘程序如何写啊?内有原理图

[复制链接]

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
发表于 2015-11-11 11:13:07 | 显示全部楼层 |阅读模式
5金钱


单片机型号为PICF16913

最佳答案

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

回复【11楼】无痕幽雨: --------------------------------- 原理没错,我估计是C口输入输出和复用设置错了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

255

帖子

0

精华

高级会员

Rank: 4

积分
821
金钱
821
注册时间
2013-6-5
在线时间
141 小时
发表于 2015-11-11 11:13:08 | 显示全部楼层
回复【11楼】无痕幽雨:
---------------------------------
原理没错,我估计是C口输入输出和复用设置错了。
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-11 11:26:08 | 显示全部楼层
[mw_shl_code=c,true] uchar key_tem; PORTA=0xdf;//1101 1111 PORTC=0xff; // RB2=1; //可以到这 key_num=PORTC; key_num=key_num&0xff; if(key_num!=0xff) { delay(10); key_num=PORTC; key_num=key_num&0xff; if(key_num!=0xff) //确实有键按下 { key_tem=key_num; while(key_tem!=0xff) //松手检测 { key_tem=PORTC; key_tem=key_tem&0xff; } // RB2=1; switch(key_num) { case 0xdf:key_num=0x11;RB1=1;break; case 0xef:key_num=0x12;break; case 0xf7:key_num=0x13;break; case 0xfb:key_num=0x14;break; case 0xfd:key_num=0x15;break; case 0xfe:key_num=0x16;break; default:break; } } }[/mw_shl_code]

回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-11 11:27:50 | 显示全部楼层
上面是我自己写的检测第一行的程序,我按下KEY11B键的时候RB1对应的LED应该亮才对 但是按下没反应
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-11 14:37:09 | 显示全部楼层
发现程序直接进了IF的循环,最后一直在while里循环,我把if里的条件由(key_num!=0xff)改成(key_num=0xff)也是一样的结果!什么情况啊?
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-11 14:42:15 | 显示全部楼层
回复【4楼】培风:
---------------------------------
后面那个少了个=号,现在的问题就是没有按键按下key_num也不等于0xff
回复

使用道具 举报

0

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2015-11-11
在线时间
30 小时
发表于 2015-11-11 14:55:44 | 显示全部楼层
你的电路图是不是有问题啊
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-11 15:06:09 | 显示全部楼层
回复【6楼】roc:
---------------------------------
怎么了?
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-11 15:12:21 | 显示全部楼层
回复【6楼】roc:
---------------------------------
17和18是RC6和RC7,图上没显示
回复

使用道具 举报

0

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2015-11-11
在线时间
30 小时
发表于 2015-11-11 15:13:14 | 显示全部楼层
看错了   
你的松手检测错了
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-11 15:19:06 | 显示全部楼层
回复【9楼】roc:
---------------------------------
哪错了?要是key_tem==0xff说明松手了,就跳出while循环啊.
现在关键是我没有按键按下,程序就直接进了IF里,一开始就判断key_num!=0xff
回复

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2015-11-12 11:07:28 | 显示全部楼层
一看原理图,就看出来了,楼主没有理解键盘矩阵的原理。http://wenku.baidu.com/link?url=a3d43Z1cVplXDpKr4fxO6TNVa8Fa7qQY8eVBiUTI8ytbVvpud5Au5CkNqIZV-9_bVZlU3t0G03A5sO97xRq0SOXLEObv_nYq42lZGKD6ac_
自己看吧,懒得打太多的字了!
30年众生牛马,60年诸佛龙象!
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-12 16:59:34 | 显示全部楼层
回复【11楼】无痕幽雨:
---------------------------------
问题查出来了,程序应该没问题,现在可以检测到一半的按键,另一半由于RC0 RC1 RC2莫名其妙被拉低导致另一半检测不到,感觉是硬件问题
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-12 17:01:24 | 显示全部楼层
回复【11楼】无痕幽雨:
---------------------------------
一样的设置,一样的电路,但RC0 RC1 RC2一开始就被拉低而RC3 RC4 RC5正常为高电平
回复

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2015-11-12 17:27:20 | 显示全部楼层
回复【13楼】培风:
---------------------------------
恕我愚钝,没有看出楼主的键盘矩阵怎么检测!
30年众生牛马,60年诸佛龙象!
回复

使用道具 举报

2

主题

255

帖子

0

精华

高级会员

Rank: 4

积分
821
金钱
821
注册时间
2013-6-5
在线时间
141 小时
发表于 2015-11-12 23:27:42 | 显示全部楼层
你这个是从51改过来的吧,你看看是不是C的输入输出和复用是不是设置错了。
回复

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2015-11-13 11:09:11 | 显示全部楼层
回复【16楼】zhxzhx:
---------------------------------
哦,上面还有网络标号啊?没看见
30年众生牛马,60年诸佛龙象!
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-16 15:27:07 | 显示全部楼层
回复【16楼】zhxzhx:
---------------------------------
问题解决了,是单片机在启动时RC0-2被复用成其他的功能了,设置成普通IO就行了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 12:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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