欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4394|回復: 10
收起左側

用掃描法取4×4鍵盤的鍵值,是否要考慮按鍵消抖問題?

[復制鏈接]
ID:260909 發表于 2017-12-27 23:25 | 顯示全部樓層 |閱讀模式
      現在本人從網上學到按鍵掃描法取鍵值,基本理解了。但是卻產生了個疑問:用掃描法判斷4×4鍵盤的鍵值,是否要考慮按鍵消抖問題?如果要考慮消抖,那是在按鍵掃描子程序Key_Get( )里加消抖呢?還是在主程序里加消抖?該如何加呢?望各位大神給支支招!本人沒想通就睡不著覺啊~~~

      4×4鍵盤掃描子程序如下:
...
...
unsigned char Key_Get( )
{
   unsigned char k=255;
   row0=row1=row2=row3=col0=col1=col2=col3=1;
   row0=0;
   if (col0==0)k=7;
   else if (col1==0)k=8;
   else if (col2==0)k=9;
   else if (col3==0)k=15;
   row0=1;
   row1=0;
   if (col0==0)k=4;
   else if (col1==0)k=5;
   else if (col2==0)k=6;
   else if (col3==0)k=14;
   row1=1;
   row2=0;
   if (col0==0)k=1;
   else if (col1==0)k=2;
   else if (col2==0)k=3;
   else if (col3==0)k=13;
   row2=1;
   row3=0;
   if (col0==0)k=0;
   else if (col1==0)k=10;
   else if (col2==0)k=11;
   else if (col3==0)k=12;
   row3=1;
   return k;
}
...
...
回復

使用道具 舉報

ID:164602 發表于 2017-12-28 08:20 | 顯示全部樓層
當然要消抖了!
不過我的程序或者我看到的程序,可不是你這樣的。你這樣的效率太低。給你一個高效率的行列掃描法的。
void KeyDown(void)
{
        unsigned char a=0;
        JP=0x0f;//測試列
        if(JP!=0x0f)
        {
                Delay10ms(1);//此處按鍵消抖
                if(JP!=0x0f)
                {
                        AJ=1;
                        switch(JP)
                        {
                                case(0X07):        JZ=0;break;
                                case(0X0b):        JZ=1;break;
                                case(0X0d):       JZ=2;break;
                                case(0X0e):        JZ=3;break;
                        }
                        JP=0Xf0;
                        switch(JP)
                        {
                                case(0X70):        JZ=JZ;break;
                                case(0Xb0):        JZ=JZ+4;break;
                                case(0Xd0):       JZ=JZ+8;break;
                                case(0Xe0):        JZ=JZ+12;break;
                        }
                        for (a=0;(a<50)&&(JP!=0xf0);a++)//松手消抖
                        {
                                Delay10ms(1);
                        }
                }
        }
}
我的板子的矩陣鍵盤電路是:
1.jpg

回復

使用道具 舉報

ID:258566 發表于 2017-12-28 09:48 | 顯示全部樓層
  1. //大小寫沒跟樓上的一樣
  2. //255是key_get()默認無按鍵返回值。
  3. if((keyval=key_get())!=255){delay10ms();
  4. if(key_get()==keyval)//確認按鍵}
復制代碼

在其他函數中加,還可以不用延時
回復

使用道具 舉報

ID:7485 發表于 2017-12-28 10:05 | 顯示全部樓層

回帖獎勵 +1

肯定需要消抖。
回復

使用道具 舉報

ID:268216 發表于 2017-12-28 10:51 | 顯示全部樓層
不消抖怎么知道摁了幾下
回復

使用道具 舉報

ID:268206 發表于 2017-12-28 10:58 | 顯示全部樓層
ahshmj 發表于 2017-12-28 10:05
肯定需要消抖。

消抖必須的啊
回復

使用道具 舉報

ID:123289 發表于 2017-12-28 22:30 | 顯示全部樓層
凡是用硬延時來消抖的都不高效,因為硬延時占用了CPU的時間。
如果怕寫消抖程序,就加電容消抖。
回復

使用道具 舉報

ID:268648 發表于 2017-12-28 22:38 | 顯示全部樓層
在main里利用調度間隔消抖好些
回復

使用道具 舉報

ID:268650 發表于 2017-12-28 22:45 | 顯示全部樓層
怎么消除震動
回復

使用道具 舉報

ID:260909 發表于 2017-12-29 00:02 | 顯示全部樓層
HC6800-ES-V2.0 發表于 2017-12-28 08:20
當然要消抖了!
不過我的程序或者我看到的程序,可不是你這樣的。你這樣的效率太低。給你一個高效率的行列 ...

謝謝大神!程序簡潔好多,不過我看不太懂那個“JZ”是什么?
回復

使用道具 舉報

ID:260909 發表于 2017-12-29 00:06 | 顯示全部樓層
lu'din 發表于 2017-12-28 22:38
在main里利用調度間隔消抖好些

能具體說明什么是“利用調度間隔”嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表