找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2066|回复: 5
收起左侧

在线等请问独立键盘的扫描去抖怎么写

[复制链接]
ID:289777 发表于 2018-7-12 08:56 | 显示全部楼层 |阅读模式
50黑币
只知道延时去抖,还有一种方法叫扫描去抖
百度上没有合适的
谁知道这个
麻烦简单写一下可以吗,在线等

最佳答案

查看完整内容

void keyscan() //按键扫描程序 { static bit key_sign=0; //按键自锁标志 static unsigned char count=0; //计数变量 if(!key) //检测按键按下 { count++; //消抖计数 if((count>=250)&&(key_sign==0)) { key_sign=1; //按键自锁标志置1,防止不松手重复响应 //执行任务或赋值键值变量 } } else //按键抬 ...
回复

使用道具 举报

ID:213173 发表于 2018-7-12 08:56 | 显示全部楼层
void keyscan()                                        //按键扫描程序
{
        static bit key_sign=0;        //按键自锁标志
        static unsigned char count=0;                //计数变量                       
        if(!key)                                        //检测按键按下
        {
                count++;                                        //消抖计数
                if((count>=250)&&(key_sign==0))
                {                       
                        key_sign=1;                        //按键自锁标志置1,防止不松手重复响应                                       
                     //执行任务或赋值键值变量
                }
        }
        else                                                        //按键抬起
        {
                key_sign=0;                                //按键自锁标志清0
                count=0;                                        //消抖计数清0
        }
}

评分

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

查看全部评分

回复

使用道具 举报

ID:142045 发表于 2018-7-12 10:03 | 显示全部楼层
软件延时去抖和硬件去抖,硬件去抖就是加个电容,要么加触发器(成本高)。你说的扫描去抖一般应用在矩阵键盘上,其实也是延时来做的去抖。

评分

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

查看全部评分

回复

使用道具 举报

ID:289777 发表于 2018-7-12 10:49 | 显示全部楼层
在线等求助
回复

使用道具 举报

ID:364810 发表于 2018-7-12 13:11 | 显示全部楼层

/*------------------------------------------------
    按键扫描函数
------------------------------------------------*/
unsigned char KeyScan(void)
{
unsigned char Val;
KeyPort=0xf0;
if(KeyPort!=0xf0)
   {
    DelayMs(10);  
        if(KeyPort!=0xf0)
          {         
            KeyPort=0xfe;
                if(KeyPort!=0xfe)
                          {
                          Val=KeyPort&0xf0;
                        Val+=0x0e;
                            while(KeyPort!=0xfe);
                          DelayMs(10);
                          while(KeyPort!=0xfe);
                       return Val;
                }
        KeyPort=0xfd;
                if(KeyPort!=0xfd)
                          {
                          Val=KeyPort&0xf0;
                        Val+=0x0d;
                            while(KeyPort!=0xfd);
                          DelayMs(10);
                          while(KeyPort!=0xfd);
                       return Val;
                }
            KeyPort=0xfb;
                if(KeyPort!=0xfb)
                          {
                          Val=KeyPort&0xf0;
                        Val+=0x0b;
                            while(KeyPort!=0xfb);
                          DelayMs(10);
                          while(KeyPort!=0xfb);
                       return Val;
                }
            KeyPort=0xf7;
                if(KeyPort!=0xf7)
                          {
                          Val=KeyPort&0xf0;
                        Val+=0x07;
                            while(KeyPort!=0xf7);
                          DelayMs(10);
                          while(KeyPort!=0xf7);
                       return Val;
                }
     }
   }
  return 0xff;
}
/*------------------------------------------------
    按键值处理函数
------------------------------------------------*/
unsigned char KeyPro(void)
{
switch(KeyScan())
{
  case 0x7e:return 0;break;//0
  case 0x7d:return 1;break;//1
  case 0x7b:return 2;break;//2
  case 0x77:return 3;break;//3
  case 0xbe:return 4;break;//4
  case 0xbd:return 5;break;//5
  case 0xbb:return 6;break;//6
  case 0xb7:return 7;break;//7
  case 0xde:return 8;break;//8
  case 0xdd:return 9;break;//9
  case 0xdb:return 10;break;//a
  case 0xd7:return 11;break;//b
  case 0xee:return 12;break;//c
  case 0xed:return 13;break;//d
  case 0xeb:return 14;break;//e
  case 0xe7:return 15;break;//f
  default:return 0xff;break;
}
}

回复

使用道具 举报

ID:364810 发表于 2018-7-12 13:14 | 显示全部楼层
  switch(P3)                        
       {
              case 0xfe:P1=dofly_table[1];break;
                case 0xfd:P1=dofly_table[2];break;
                case 0xfb:P1=dofly_table[3];break;
                case 0xf7:P1=dofly_table[4];break;
                case 0xef:P1=dofly_table[5];break;
                case 0xdf:P1=dofly_table[6];break;
                case 0xbf:P1=dofly_table[7];break;
                case 0x7f:P1=dofly_table[8];break;
                default:break;   
           }

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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