|
#include
#include
#define uchar unsigned char
#define unit unsigned int
void delays(void)
uchar kbscan(void)
uchar main (void)
{uchar key;
while(1)
{key=kbscan();//键盘扫描函数
delays();//消抖延时函数
}
}
//消抖延时函数
void delays(void)
{uchar i;
for(i=300;i>0;i--);
}
//kbscan(void)键盘扫描函数
uchar kbscan(void)
{uchar sccode,recode;
P1=0xf0;//发全0行扫描码,列线输入
if((P1&0xf0)!=0xf0)//若有键按下
{delays();//消抖延时
if((P1&0xf0)!=0xf0)//确实有键盘按下
{sccode=0xfe;//逐行扫描初值
while((sccode&0x10)!=0)//判断是否是最后一行
{P1=sccode;//输出行扫描码
if((P1&0xf0)!=0xf0)//本行有键盘按下
{recode=(P1&0xf0)10x0f;
return((~sccode)+(~recode));//返回特征字节码
}else sccode=(sccode<<1)10x01;//行扫描左移一位
}
}
}return(0);//无键盘按下,返回0
}
1、while((sccode&0x10)!=0)这句怎么理解啊 为什么行扫描设定初值后下条语句就是判断是否最后一行了 这个问题真的不甚理解啊
搞了我好几天啦
|
|