專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

查表法矩陣鍵盤

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年02月13日   【字體:
//p1口外接3*4矩陣鍵盤,其中p1^0不用置1,常用讀出鍵值方法有
//“查表法”和“反轉(zhuǎn)法”。查表法程序最為簡(jiǎn)短,但是稍多占用
//一點(diǎn)存儲(chǔ)空間;反轉(zhuǎn)法的程序執(zhí)行速度最快,只是要求接口是
//雙向的。
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
~0x3F,~0x06,~0x5B,~0x4F,~0x66,
~0x6D,~0x7D,~0x07,~0x7F,~0x6F,
~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};//共陽(yáng)極LED代碼與共陰極正好相反,所以陰極碼取反
uchar num;
uchar keyscan();
/*void delay(uint z)
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--); 
}*/
void main()
{ 
 P0=table[0];
 while(1)
 { 
    num=keyscan();
    if(num!=16)
    P0=table[num];
  
 
 } 
}
uchar keyscan()
{
 uchar code table1[3][4]=
  {//0xee,0xde,0xbe,0x7e,
   0xed,0xdd,0xbd,0x7d,
   0xeb,0xdb,0xbb,0x7b,
   0xe7,0xd7,0xb7,0x77};
  uchar temp1=0xfd,temp2,i,j; //如果是3*4則只需將初值temp1改變p1^0不用置1并改變表值
  for(i=0;i<4;i++)//掃描低四位//如果3*4鍵盤i<3也可
  {  P1=temp1;       //輸出一行0
   temp2=P1;       //馬上讀入P1口狀態(tài)
   if((temp2&0xf0)!=0xf0)//如果有鍵按下
   {
    for(j=0;j<4;j++)//就掃描高四位                 j=0 j=1  j=2  j=3  
   {
    if(temp2==table1[i][j])//查表              i=0  0   1    2  3
     return i*4+j;    //查到了就返回鍵的值        i=1  4   5    6  7
   }                  //             i=2  8   9    10  11
   }        //                        i=3  12   13   14 15
  else temp1=_crol_(temp1,1);        //
          //                             i*4+j
  }
  return 16;        //沒(méi)有查到,返回鍵松開的代碼
}   
關(guān)閉窗口

相關(guān)文章