⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 键盘.txt

📁 又一个AT89c51等单片机可以使用的4*4 键盘程序
💻 TXT
字号:
/*;用p1口与4×4键盘相接,行的是p10、p11、p12、p13,列的扫描线是p14、p15、p16、p17    
;扫描结果是0,1,2,3,
;          4,5,6,7,
;          8,9,a,b,
;          c,d,e,f
;************************************/
#include<reg52.h>
#include<intrins.h>
#include<absacc.h>

#define	uchar unsigned char

uchar rr;
uchar k;
uchar keydata;

void key_scan(void);          //键盘函数定义段;
uchar key_tab(uchar k);
void delay(void);
void key_in(uchar k);

//---------------------------------------------------------------
void main(void)		   //主函数
{
     while(1)
 {
    key_scan();
 }
}//---------------------------------------------------------------------

void key_scan(void)	     //键盘扫描函数
{  uchar sccode,recode,i;
        P2=0xf0;
            if((P2&0xf0)!=0xf0)		//有按键按下
              {
                  delay();
                if((P2&0xf0)!=0xf0)
                 {
                        sccode=0xfe;
                    for(i=0;i<4;i++)
                   {
                        P2=sccode;
                     if((P2&0xf0) !=0xf0)
                        {
                              recode=(P2&0xf0)|0x0f;
                              k=(~recode)+(~sccode);
                              rr=P2;
							  key_in(k);
                              break;
                         }
                      else
                         sccode=(sccode<<1)|0x01;
                  }
             }

  }
  //do {ta=P2;}while(ta==rr);
}
void delay()        //延时函数 作用是:消除抖动
{int a=2500;
 while(--a);
}

void key_in(uchar k)
{   uchar ta;
    //uchar keydata;

    do {ta=P2;}while(ta==rr);
    keydata=key_tab(k);
}



//-------------------------------------------------------------
uchar key_tab(uchar k)
{ uchar kb;
    switch(k)
{   case 0x11:kb=0x00;break;
    case 0x21:kb=0x01;break;
    case 0x41:kb=0x02;break;
    case 0x81:kb=0x03;break;
    case 0x12:kb=0x04;break;
    case 0x22:kb=0x05;break;
    case 0x42:kb=0x06;break;
    case 0x82:kb=0x07;break;
    case 0x14:kb=0x08;break;
    case 0x24:kb=0x09;break;
    case 0x44:kb=0x0a;break;
    case 0x84:kb=0x0b;break;
    case 0x18:kb=0x0c;break;
    case 0x28:kb=0x0d;break;
    case 0x48:kb=0x0e;break;
    case 0x88:kb=0x0f;break;
    default  :kb=0x00;break;
}
   return kb;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -