4*4矩陣鍵盤(pán)模塊程序的調(diào)用
/*
***************************************************************************************
摘 要: 4*4小鍵盤(pán)模塊程序,供以后其他程序調(diào)用.其中P2口高四位接鍵盤(pán)列,P2口低四位接鍵盤(pán)行,
版 本: V1.0
完成日期: 2008.4.28
作 者: ZHOUSFE
***************************************************************************************
修改日期: 2008.5.6
版 本: V1.2
****************************************************************************************
*/
#i nclude
#define uchar unsigned char
#define keyport P2
//uchar code seg[16]=
{0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E}; //0~f,
共陽(yáng)極
uchar code keycode[16]=
{0xEE,0XDE,0XBE,0X7E,0XED,0XDD,0XBD,0X7D,0XEB,0XDB,0XBB,0X7B,0XE7,0XD7,0XB7,0X77};//待查詢(xún)的
鍵碼值
/*
*******************************************************************************************
函數(shù)名稱(chēng):delay()
功能描述:延時(shí)ms個(gè)微妙
入口參數(shù):unsigned int ms
出口參數(shù):無(wú)
*******************************************************************************************
*/
void delay(unsigned int ms)
{
unsigned char a;
while(!ms--)
for(a=0;a<124;a++);
}
/*
*******************************************************************************************
函數(shù)名稱(chēng):keyscan()
功能描述:鍵盤(pán)掃描程序,利用行掃描方式,得到鍵值
入口參數(shù):無(wú)
出口參數(shù):掃描得到的鍵值~((~sm)+(~fh))
*******************************************************************************************
*/
uchar keyscan(void)
{
uchar sm; //存放行掃描代碼,該函數(shù)的返回值的低四位
uchar fh; //該函數(shù)的返回值的高四位
keyport=0xf0;
if((keyport&0xf0)!=0xf0) //判斷是否有按鍵按下
{
delay(2); //去抖動(dòng)延時(shí)(1~10ms)
if((keyport&0xf0)!=0xf0)
{
sm=0xfe; //行掃描初值
while((sm&0x10)!=0)
{
keyport=sm;
if((keyport&0xf0)!=0xf0) //若本行有鍵按下,則執(zhí)行讀取鍵值信息
{
fh=(keyport&0xf0)|0x0f;
return(~((~sm)+(~fh))); //返回掃描的鍵值
}
else sm=(sm<<1)|0x01; //若本行沒(méi)有鍵按下,則掃描下一行
}
}
}
return 0xff; //若沒(méi)有按鍵按下,則返回0xff
}
/*
*******************************************************************************************
函數(shù)名稱(chēng):getkey()
功能描述:將掃描得到的鍵值轉(zhuǎn)化為對(duì)應(yīng)的0~f
入口參數(shù):無(wú)
出口參數(shù):顯示的數(shù)字0~f
*******************************************************************************************
*/
uchar getkey()
{
uchar key;
uchar temp;
uchar j;
while(1)
{
key=keyscan();
delay(2);
for(j=0;j<16;j++)
{
if(key==keycode[j]) //通過(guò)查詢(xún)方式,得到按下的按鍵值
{
temp=j; //按鍵值先保存于temp中
if(key==0xff) //若沒(méi)有按下下一個(gè)鍵,則一直顯示上一個(gè)鍵值
{
return temp;
}
else
{
return j;
temp=j; //更新temp里的值
}
}
}
}
}
/*
*******************************************************************************************
測(cè)試用函數(shù)
*******************************************************************************************
*/
/*void main(void)
{
uchar ch;
P3&=0xfe;
while(1)
{
ch=getkey();
P0=~seg[ch]; //P0口接數(shù)碼管
}
}*/
評(píng)論