8051鍵盤讀取程式

取自80518051單晶片實作-使用C語言】;林振漢老師著

 

#include<reg51.h>

#define KBINP P1 //巨集;P1名字做設定以便日後用不同的port時可以輕易更換

//聽說巨集有很多功能,有時間會熟悉一下整理一份文件來教自己~ XD

void delay1ms(int count){ //delay function

      int i,j;

      for(i=0;i<count;i++) for(j=0;j<122;j++);

}

 

int kbscan(){

      unsigned char scanln[]={0xfe,0xfd,0xfb,0xf7};

      unsigned char row,col,kbtemp,kbp;

      for(row=0;row<4;row++){

      KBINP=scanln[row]; //將低4bit依序拉low,來判斷是哪一個按鈕被按下

      kbtemp=KBINP&0xf0;

             if(kbtemp!=0xf0){

                   delay1ms(20); //防彈跳延遲;在判斷完按鈕狀態時給與一時間延遲避免誤動作

                   for(col=0;col<4;col++){

                          if(kbtemp==(scanln[col]&0x0f)*16){

                                kbp=row*4+col; //計算按鈕所對應的值

                                while((KBINP&0xf0)!=0xf0); //在按鈕放掉前使程式不跳離這個區塊,避免誤動作           

                       }        

                 } 

          }

      }

      return kbp;

}

 

void main(){

      while(1){

       P0=~kbscan(); 

      }

}

本文目的僅在於分享學習心得,若涉及著作權法請留言告知,在下看到後會馬上處理

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 kitconan 的頭像
    kitconan

    工作相關備忘

    kitconan 發表在 痞客邦 留言(0) 人氣()