unsigned char keyscan()
{
unsigned char sccode,recode;
P0=0XF0; //发全0行扫描,列线输入
if((P0&0XF0)!=0) //若有键按下
{
delay(10); //延时去抖动
if((P0&0XF0)!=0)
{
sccode=0xfe;
while((sccode&0x10)!=0) //逐行扫描初值
{
P0=sccode; //输出行扫描码
if((P0&0xf0)!=0xf0) //本行有键按下
{
recode=(P0&0XF0)|0X0F;
return((~sccode)+(~recode) ); //返回特征字节码
}
else
sccode=(sccode<<1)|0x01; //行扫描码左移一位
}
}
} //无键按下,返回值为0
return(0);
}
这是在根据北航的教材上的一个改编的程序,但是感觉问题. 程序我烧到自己的单片机实验板上也没结果!就前两句而言就感觉不对:
P0=0XF0; //发全0行扫描,列线输入
if((P0&0XF0)!=0) //若有键按下
既然P0=0xF0;那么
第二句在执行的时if的判断条件总是不成立的。
请高手们指点一下哈
~~~~~~~~ |