?? keyboardscan.c
字號:
//----------------------------
//-----------------------------
//鍵盤掃描子程序
//-----------------------------
//使用說明:
//使用前請先定義keyscan為單片機的
//某個端口,如#define keyscan P1
//程序中掃描信號從keyscan高4位輸出,
//鍵值返回信號從keyscan低4位讀入,
//故使用時硬件電路需要與之相對,
//或者把軟件中相應地方修改即可
//-----------------------------
//-----------------------------
//鍵值定義,使用時需注意設置鍵值
//-----------------------------
#define keyscan P4
/*uchar code key_tab[]=
{
0x07,0x08,0x09,0x0a,
0x04,0x05,0x06,0x0b,
0x01,0x02,0x03,0x0c,
0x00,0x0f,0x0e,0x0d
};
*/
uchar code key_tab[]=
{
0x0a,0x0b,0x0c,0x0d,
0x03,0x06,0x09,0x0e,
0x02,0x05,0x08,0x00,
0x01,0x04,0x07,0x0f
};
//----------------------------
//----------------------------
//延時函數,一次大約延時10ms
//----------------------------
void mdelay(uchar j)
{
uchar i;
while(j--)
{
for(i=0;i<125;i++);
}
}
//-------------------------------
//檢測有無按鍵按下子程序
//如果無鍵按下,返回0,否則返回1
//-------------------------------
bit test_key(void)
{
uchar m;
keyscan=0x0f; //將掃描輸出線全部拉低,并將鍵盤輸入線全部置為輸入
m=keyscan; //讀鍵值
m=m|0xf0; //屏蔽掉掃描信號
if(m==0xff) return 0; //如果無鍵按下,返回0,否則返回1
else return 1;
}
//-----------------------------------
//-----------------------------------
//鍵值讀取子程序
//采用3中取2的原則來讀出鍵值
//若三個值均不相等的話,返回0xff
//----------------------------------
uchar get_key(void)
{
uchar val[3]={0xff,0xff,0xff};
uchar i,j,row,mu;
if(!test_key()) return(0xff); //沒有鍵按下就返回0xff
mdelay(3); //delay
for(j=0;j<3;j++) //連續取三次鍵值。
{
row=0x7f;
for(i=0;i<4;i++)
{
keyscan=row;
mu=keyscan;
mu=mu|0xf0;
mu=~mu;
if(mu!=0)
switch(mu)
{
case 0x01:val[j]=*(key_tab+i);break; //
case 0x02:val[j]=*(key_tab+i+4);break;
case 0x04:val[j]=*(key_tab+i+8);break;
case 0x08:val[j]=*(key_tab+i+12);break;
}
row>>=1;
row|=0x80;
}
mdelay(0); //delay
}
while(test_key());//等待按鍵釋放
mdelay(3); //delay
if((val[0]==0xff)&&(val[1]==0xff)&&(val[2]==0xff)) return(0xff); //若無鍵按下,返回0xff;
else if(val[0]==val[1]) return(val[0]); //采用3中取2的原則來讀出鍵值
else if(val[0]==val[2]) return(val[0]); //這樣讀出的鍵值更能準確
else if(val[1]==val[2]) return(val[1]);
else return(0xff); //如果3個均不相等,返回0xff
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -