久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7813|回復: 0
打印 上一主題 下一主題
收起左側

5x4鍵盤掃描程序和鍵盤編碼的問題,謝謝!

[復制鏈接]
跳轉到指定樓層
樓主
ID:7338 發表于 2008-11-29 10:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

這里有兩段程序有關鍵盤掃描的,其中一段是正確的:針對4x4鍵盤的,其中P1口的P1.0-P1.3做行線,P1.4-P1.7做列線,16個按鍵輸出0
-F。另一段就是我修改后出問題的程序,修改的目的是將該4x4鍵盤拓展為5x4鍵盤,增加P3.0口為行線的第一行,P1.0-P1.3為第二至第五行,
P1.4-P1.7做列線,前16個按鍵輸出0-F,最后一行做其他功能鍵(在其他程序段中定義功能)。
鍵盤本來應是按相應的按鍵在數碼管上顯示相應的字型:
                                                0 1 2 3
                                                4 5 6 7
                                                8 9 A B
                                                C D E F
                                                G H I J
   結果現在的現象是:現在只有第一列按鍵按下數碼管顯示,但顯示的是最后一列的數,即第一列本應顯示0 4 8 C G但卻顯示3 7 B F J,而
其余三列按下無反應,不顯示。
另外,程序中按鍵編碼是這樣編出的:4x4鍵盤中,若“0”鍵按下,則P1.7-P1.0依次為1110 1110,所以“0”鍵編碼為EE;5x4鍵盤中,“0”
我相應的編碼成P1.7-P3.0依次為1110 11110,即“0”鍵編碼為1DE,不知道這樣的編碼是不是也有問題。
另外,我使用的是MC14489顯示驅動電路,所以不用進行字型(0-F)的編碼。
不知道原因在哪里,麻煩各位了!謝謝

正確的4*4鍵盤掃描程序
code uchar keytab[16] = {0xEE,0xDE,0xBE,0x7E,0xED,0xDD,0xBD,
                         0x7D,0xEB,0xDB,0xBB,0x7B,0xE7,0xD7,          0xB7,0x77};            //鍵編碼,0-F

uchar kbscan(void);

uchar kbscan(void) {
    uchar sccode,recode;
 P1 = 0xf0;              //P1.0-P1.3發全0,P1.4-P1.7輸入
 if((P1&0xf0)!= 0xf0) {    //如P1口高4位不全為1,有鍵按下
     delay(20000);                    //延時去抖動
      if((P1&0xf0)!=0xf0) {             //重讀輸入值
                 sccode = 0xfe;               //最低位置0
         while((sccode&0x10)!=0) {    //不到最后一行循環
                 P1 = sccode;                //P1口輸出掃描碼 
          if((P1&0xf0)!= 0xf0) {    //如P1.4-P1.7不全為1,該行有鍵按下
     recode = P1&0xf0;
     sccode = sccode & 0x0f;    //保留P1口高4位輸入值,低4位變為全1,作為列值
    return(sccode+recode);    //行碼+列碼=鍵編碼,返回主程序
   } else {
       sccode = (sccode<<1)|0x01;  //如該行無鍵按下,查下一行,行掃描值左移一位
      delay(100);
   }
        }
     }
 }
 return(0);                //無鍵按下,返回值為0

修改后出錯的5*4鍵盤掃描程序
code uint keytab[20] = {0x1DE,0x1BE,0x17E,0x0FE,0x1DD,0x1BD,0x17D,                       0x0FD,0x1DB,0x1BB,0x17B,0x0FB,0x1D7,0x1B7,
 0x177,0x0F7,0x1CF,0x1AF,0x16F,0x0EF};

uint kbscan(void);
uint kbscan(void) {
    uint sccode,recode;
 P1 = 0xf0;
 P3_0 = 0;
 if((P1&0xf0)!= 0xf0) {
     delay(20000);
  if((P1&0xf0)!=0xf0) {
      sccode = 0x1fe;
   while((sccode&0x020)!=0) {
       P1 = sccode/2;
    if((P1&0xf0)!= 0xf0) {
        recode = P1&0xf0;
        sccode = sccode & 0x01f;
        return(sccode+recode);
    } else {
       sccode = (sccode<<1)|0x01;
     delay(100);
    }
   }
  }
 }
 return(0);

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美在线一区二区三区 | 国产精品久久一区二区三区 | 国产一区三区视频 | 精品国产伦一区二区三区观看说明 | www.成人.com | 精品欧美一区二区中文字幕视频 | 超碰在线免费 | 免费午夜视频 | 国产精品久久久久久久久久免费看 | 亚洲精品中文字幕中文字幕 | 福利视频1000 | 久久久久九九九女人毛片 | 国产精品久久av | 亚洲精品一区二区二区 | 亚洲h视频 | 国产美女一区二区 | 欧美自拍一区 | 亚洲三区在线播放 | 国产精品久久精品 | 欧美激情一区 | 欧美国产一区二区 | 在线一区 | 欧美久久久久久久久 | 97伊人| 日韩一区二区视频 | 亚洲乱码一区二区三区在线观看 | 在线欧美视频 | 免费的av | 色就是色欧美 | 欧美国产精品一区二区三区 | 亚洲精品中文在线观看 | 紧缚调教一区二区三区视频 | 性一交一乱一伦视频免费观看 | 久久国产一区 | 欧美精品 在线观看 | av免费成人| 国产精品一区二区av | 午夜小视频在线播放 | 网站国产 | 九九热这里只有精品在线观看 | 久久国产精品偷 |