51程序问题·····
时间:10-02
整理:3721RD
点击:
51程序问题····· 先说问题吧····
就是矩阵反转扫描函数中的问题···
源函数如下·····
unsigned char KeyScan(void) //键盘扫描函数,使用行列反转扫描法
{
unsigned char cord_h,cord_l;//行列值中间变量
KeyPort=0x0f; //行线输出全为0
cord_h=KeyPort&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
DelayMs(10); //去抖
if((KeyPort&0x0f)!=0x0f)····这里也有疑问····也是吧keyport&0x0f换成cord_h可以不可以·
{
cord_h=KeyPort&0x0f; //读入列线值
KeyPort=cord_h|0xf0; //输出当前列线值
cord_l=KeyPort&0xf0; //读入行线值
while((KeyPort&0xf0)!=0xf0);//等待松开并输出//······问题处在这里··我把while里面的keyport&0xf0换成cord_l为什么就不能工作了···他们不是等价的吗?
return(cord_h+cord_l);//键盘最后组合码值
}
}return(0xff); //返回该值
}
就是矩阵反转扫描函数中的问题···
源函数如下·····
unsigned char KeyScan(void) //键盘扫描函数,使用行列反转扫描法
{
unsigned char cord_h,cord_l;//行列值中间变量
KeyPort=0x0f; //行线输出全为0
cord_h=KeyPort&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
DelayMs(10); //去抖
if((KeyPort&0x0f)!=0x0f)····这里也有疑问····也是吧keyport&0x0f换成cord_h可以不可以·
{
cord_h=KeyPort&0x0f; //读入列线值
KeyPort=cord_h|0xf0; //输出当前列线值
cord_l=KeyPort&0xf0; //读入行线值
while((KeyPort&0xf0)!=0xf0);//等待松开并输出//······问题处在这里··我把while里面的keyport&0xf0换成cord_l为什么就不能工作了···他们不是等价的吗?
return(cord_h+cord_l);//键盘最后组合码值
}
}return(0xff); //返回该值
}
路过看看
小弟也刚学完这方面,其实程序还没看透。建议你找个正确的代码好好看看,或视频看几次,这个真的不难。要是没有解决,我给你几个代码,并有详细解释。本人无任何企图。
while((KeyPort&0xf0)!=0xf0);中换成cord_l后就死循环了。