#include<reg51.h>
#define uchar uns igned char
#define uint unsigned int
void main(void)
{
uchar key;
while(1) //調(diào)用鍵盤掃描函數(shù),返回的鍵值送到變量key
{
key= keyscan( );
//延時
delay( );
}
void delay10ms (void) ;
//延時函數(shù)
{
uchar i;
for(i=0;i<200;i++){ }
}
//鍵盤掃描函數(shù)
uchar key scan (void)
{
//行掃描值
uchar code h;
//列掃描值
uchar code 1;
//P1.0~P1.3行線輸出都為0,準備讀列狀態(tài)
P1=0xf0;
if((P1&f0) !=0xf0)
{
//如果P1.4~P1.7 不全為1,可能有鍵按下
//延時去抖動,延時函數(shù)參見例5-11
delay10ms (void) ;
//重讀P1.4~P1.7,若還是不全為1,定有鍵按下
if( (P1&f0) !=0xf0)
// P1.0 行線置為0,開始行掃描
code h=0xfe;
while ((code_h&0x10) !=0xf0) ;//判斷是否掃描到最后一行,若不是,繼續(xù)掃描
{
//P1口輸出行掃描值
P1= code h;
if( (P1&f0) !=0xf0) ;
{
//如果P1.4~P1.7 不全為1,該行有鍵按下
code_l=(P1&0xf010x0f) ;//保留P1口高4 位,低4 位變?yōu)?,作為列值
return( (~code_h )+ (~code_l) ); //鍵值=行掃描值+列掃描值,鍵值返主程序
/ /若該行無鍵按下,往下執(zhí)行
}
else
code h= (code_h<<1) 10x01;
/行掃描值左移,準備掃描下一行
}}}
//無鍵按下,
return (0);}
返回0 |