3236|12

74

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

求7*7键盘扫描程序 [复制链接]

各路大神,求指导,给个思路就好!

最新回复

楼主试下复合键,4*4应该已经够用了的  详情 回复 发表于 2014-4-26 11:33
点赞 关注
 

回复
举报

3471

帖子

11

TA的资源

五彩晶圆(高级)

沙发
 
行列扫描

点评

可以具体一下吗,我现在是按照以前写矩阵键盘的思路来写了的,就是使得7列先输出低电平,其他列输出高电平,然后就这样一行一行的检测扫描,然后再扫描其他列,一个一个地扫描,可以思路是这样,输出不对呢。  详情 回复 发表于 2014-4-18 21:14
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

可以具体一下吗,我现在是按照以前写矩阵键盘的思路来写了的,就是使得7列先输出低电平,其他列输出高电平,然后就这样一行一行的检测扫描,然后再扫描其他列,一个一个地扫描,可以思路是这样,输出不对呢。

点评

7*7,得用两个I/O吧,[attachimg]147911[/attachimg]LZ参考下这个  详情 回复 发表于 2014-4-18 22:17
 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

4
 
农逸 发表于 2014-4-18 21:14
可以具体一下吗,我现在是按照以前写矩阵键盘的思路来写了的,就是使得7列先输出低电平,其他列输出高电 ...

7*7,得用两个I/O吧, LZ参考下这个

点评

[attachimg]147915[/attachimg] 这样不对吗?可是检测不了呢  详情 回复 发表于 2014-4-19 10:35
这个是在跑系统的时候用的,裸奔的话记得加上延时  详情 回复 发表于 2014-4-18 22:19
 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

5
 
dj狂人 发表于 2014-4-18 22:17
7*7,得用两个I/O吧,LZ参考下这个

这个是在跑系统的时候用的,裸奔的话记得加上延时
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

6
 
转的,4x4,供参考
代码太多没必要,刚在另一帖子里回的,顺手复制过来吧, 假定4X4,使用P1口反转扫描法:

unsigned char keystatus;
//键扫描,大家真正关心的部分
keystatus = 0;
P1 = 0xF0; keystatus |= (P1&0x0F);
P1 = 0x0F; keystatus |= (P1&0xF0);
//以下是键处理,这部分与键扫描无关了.
switch(keystatus){
case 16种排列组合:~[1000,0100,0010,0001] * [1000,0100,0010,0001]  
}

就这么几行而已.

点评

请问下都是将其IO口置为输入状态吗?然后检测?  详情 回复 发表于 2014-4-19 10:29
 
 
 

回复

1185

帖子

1

TA的资源

纯净的硅(高级)

7
 
先行检测在列检测。和4*4的类似。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(中级)

8
 
谢谢大家伙的意见啊,对我帮助挺大的,懂得另外的按键扫描的思路,现在我在按照这些思路再试试吧
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(中级)

9
 
shower.xu 发表于 2014-4-18 22:27
转的,4x4,供参考
代码太多没必要,刚在另一帖子里回的,顺手复制过来吧, 假定4X4,使用P1口反转扫描法:

...

请问下都是将其IO口置为输入状态吗?然后检测?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(中级)

10
 
dj狂人 发表于 2014-4-18 22:17
7*7,得用两个I/O吧,LZ参考下这个



这样不对吗?可是检测不了呢

点评

你不是要做7*7de矩阵键盘吗,这样的话,用两个I/O就是先把一个I/O置底,记录另一个I/O的状态,然后另一个I/O电平置底,第一个电平置的I/O的状态, 然后两个相或; for(i=2;i>0;i--) { P0 = 0x00; t  详情 回复 发表于 2014-4-19 12:18
 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

11
 
农逸 发表于 2014-4-19 10:35
这样不对吗?可是检测不了呢

你不是要做7*7de矩阵键盘吗,这样的话,用两个I/O就是先把一个I/O置底,记录另一个I/O的状态,然后另一个I/O电平置底,第一个电平置的I/O的状态,
然后两个相或;
for(i=2;i>0;i--)
{
      P0 = 0x00;
      temp = P1;

      P1 = 0x00;
      temp = temp | P0;

      delay();//延时一会;消抖
}
 
 
 

回复

977

帖子

4

TA的资源

纯净的硅(中级)

12
 
unsigned char keyscan(void)
{
        unsigned char key_line[]={0xfe,0xfd,0xfb,0xf7};//定义
        unsigned char key_row[]={0Xe0,0Xd0,0Xb0,0X70};
        unsigned char line,row;
        for(line=0;line<4;line++)
        {
                keyboard_port=key_line[line];
                for(row=0;row<4;row++)
                {
                        if((keyboard_port&0xf0)==key_row[row])
                        {
                                delayms(10);
                                if((keyboard_port&0xf0)==key_row[row])
                                {
                                        while(((keyboard_port&0xf0)==key_row[row]));
                                        key_value=line*4+row;
                                        break;
                                }
                        }
                }
        }
        return(key_value);
}
这是4*4的,照着思路写应该差不多
 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

13
 
楼主试下复合键,4*4应该已经够用了的
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表