找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5010|回复: 10
打印 上一主题 下一主题
收起左侧

我写了一段行列按键扫描程序松手检测加那里?求高手指点

[复制链接]
跳转到指定楼层
楼主
ID:166459 发表于 2017-3-11 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uchar keyscan()
{
uchar keyl,keyh;
uchar key;  
         {
         P1=0Xf0;
         keyl=P1;  
         keyl=keyl&0xf0;   
         if(keyl!=0xf0)     
                {
                 delay(5);
                   if(keyl!=0xf0)  
                      {
                           keyl=P1&0xf0; //1110 0000  
                           keyl=keyl|0x0f;//1110 1111
                           P1=keyl;                                          
                           keyh=P1;                                               
                           keyh=keyh&0x0f;//0000 1110       
                           keyl=keyl&0xf0;//1110 0000
                           key=keyl+keyh; //1110 1110         
                          }
                }
                switch(key)
                    {
                             case 0xee: num=4;
                             break;
                                 case 0xde: num=3;
                             break;
                                  case 0xbe: num=2;
                             break;
                        }       
                   }                                                                              
return num;          
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2017-3-11 19:48 | 只看该作者
检测到有键按下后(一般是某IO=0),延时后该IO=1即为该键已放开。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:155507 发表于 2017-3-12 10:30 | 只看该作者
  1. uchar keyscan()
  2. {
  3.         uchar keyl,keyh;
  4.         uchar key;  
  5.         {
  6.                 P1=0Xf0;
  7.                 keyl=P1;  
  8.                 keyl=keyl&0xf0;   
  9.                 if(keyl!=0xf0)     
  10.                 {
  11.                         delay(5);
  12.                         if(keyl!=0xf0)  
  13.                         {
  14.                                 keyl=P1&0xf0; //1110 0000  
  15.                                 keyl=keyl|0x0f;//1110 1111
  16.                                 P1=keyl;                                          
  17.                                 keyh=P1;                                                
  18.                                 keyh=keyh&0x0f;//0000 1110        
  19.                                 keyl=keyl&0xf0;//1110 0000
  20.                                 key=keyl+keyh; //1110 1110  
  21.                                 while((P1&0xf0)!=0xf0);//等待松开并输出      
  22.                         }
  23.                 }
  24.                 switch(key)
  25.                 {
  26.                 case 0xee: num=4;
  27.                         break;
  28.                 case 0xde: num=3;
  29.                         break;
  30.                 case 0xbe: num=2;
  31.                         break;
  32.                 }        
  33.         }                                                                              
  34.         return num;         
  35. }

复制代码

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:166459 发表于 2017-3-13 10:04 | 只看该作者
修改后,按键数字不变化,
回复

使用道具 举报

5#
ID:166459 发表于 2017-3-13 10:20 | 只看该作者
ahshmj 发表于 2017-3-11 19:48
检测到有键按下后(一般是某IO=0),延时后该IO=1即为该键已放开。

检测到有键按下后,延时,确认,松开,执行按下的内容该I,要这样的结果
回复

使用道具 举报

6#
ID:151348 发表于 2017-3-13 16:53 | 只看该作者
2楼的方法应该可行,关键就是while((P1&0xf0)!=0xf0);//等待松开并输出   

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:103117 发表于 2017-3-13 17:13 | 只看该作者
加在按键执行完后面key(!key)

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

8#
ID:167675 发表于 2017-3-13 18:17 | 只看该作者
不需要松手检测吧 画蛇添竹了吧 是微动开关吗 只要防抖动就行了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:111634 发表于 2017-3-13 21:44 | 只看该作者
有两种方式,一种是确认按键按下就动作,另一种是确认按键按下后等待按键释放后再动作。
回复

使用道具 举报

10#
ID:7485 发表于 2017-3-14 14:50 | 只看该作者
horishi 发表于 2017-3-13 10:20
检测到有键按下后,延时,确认,松开,执行按下的内容该I,要这样的结果

看不明白你说的是什么问题了。你说的“检测到有键按下后,延时,确认,松开,执行按下的内容该I,要这样的结果”,这是按键应有的功能。

你是不是要说“一直按住不放,执行一个功能,松开后执行另一个功能”?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

11#
ID:166459 发表于 2017-3-15 09:38 | 只看该作者
你是不是要说“一直按住不放,执行一个功能,松开后执行另一个功能”?
这个不对

我是说“一个功能 在按住时不执行,松开后才执按键应有的功能。即松手检测
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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