独闷闷网

 找回密码
 立即注册
搜索

矩阵按键的翻转法识别原理是什么样的?鸿哥除了惊叹它的巧妙外还有什么担忧?已解答。

查看数: 4037 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-2-1 21:27

正文摘要:

本帖最后由 jianhong_wu 于 2016-7-17 14:30 编辑 MCU编程-华力: 这是我从别处看到的一种新型的矩阵按键翻转识别法: 鸿哥-深圳: 我刚刚仔细看了你上面矩阵按键翻转法的检测思路,确实非常巧妙,识别 ...

回复

f晨星 发表于 2015-2-2 01:06:13
本帖最后由 f晨星 于 2015-2-2 01:10 编辑

我给第一段代码加上注释  有不对的请指出

//其中的DATA是一组IO口
u8 keyscan()
{
        u8 tm , tm2;
        DATA = 0XOF;       //   输出值为  0000 1111
        tm   = DATA;       //   读回DATA的实际值保持(我觉得这一句可以省去)
        if(DATA != 0X0F)   //发现有按键按下时,这时DATA 不在是0000 1111 而是0000 xxxx\\\解释看下面
        {
                dalay_ms(5);
                tm = DATA;        //读回DATA的实际值保存  现在的DATA值,,可能是0000 xxxx
                                              // 其中值可能是 0000 0111\\0000 1011\\\0000 1101\\\0000 1110
                if(DATA != 0X0F)  // 再次判读是否真的按下
                {
                        tm2 = tm & 0x0f; // 去除高4位中的变化值   tm2= 0000 xxxx
                                         //为什么不吧tm直接赋值给tm2呢..是防止高四位中出现1的状况,屏蔽掉高4位可能出现的1
                        DATA = 0xf0;      //DATA输出  1111 0000 因为被按下 DATA读回来实际值是  xxxx 0000  \\x中其中一个是0 同上的解释
                        tm   = DATA;      //读回DATA的实际值保存 因为被按下   DATA读回来的实际实际值是  xxxx 0000  \\x中其中一个是0 同上的解释
                        tm2  |=  tm;          //  xxxx  0000  或 0000 xxxx  取出其中按下的
                }
        }        
        return tm2 ;
}
f晨星 发表于 2015-2-1 22:00:25
沙发

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-5-4 03:10 , Processed in 0.419258 second(s), 31 queries .

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