早教吧作业答案频道 -->其他-->
求C51编程的键盘消抖代码优化:以下键盘扫描方式该如何消抖?--->Delay(ms)要放在哪里呢?谢过~~~!//===KEYSCANvoidkeyscan()//键盘扫描:将获取新的keynum值,用以判断执行动作{uchartemp;//临
题目详情
求C51编程的键盘消抖代码优化: 以下键盘扫描方式该如何消抖?---> Delay(ms)要放在哪里呢? 谢过~~~!
//=== KEY SCAN
void key_scan() //键盘扫描:将获取新的key_num值,用以判断执行动作
{
uchar temp; //临时键值
uchar key_en=1; //键盘监视:有按键动作时才执行Key_serve,否则仅仅作扫描
P3 = 0x0f; //低4位置1,放入4行.
// delay(1); //键按下后,P3的00001111变成0000xxxx,x中有1个为0,3个为1
// delay(10);
// delay(10); //10ms消抖
// if(P3!=0x0f) //如果确实有键按下了
// {
//
temp = P3^0x0f; //异或,把相异的一行变成1,其它全为0
switch(temp) //判断是哪行有键按下了(0-3行)
{ //就给相应键值的行提前量
case 1: key_num = 0; break;
case 2: key_num = 1; break;
case 4: key_num = 2; break;
case 8: key_num = 3; break;
default: { key_num= 16;
key_en=0;} break; //无按键
}
P3 = 0xf0; //高4位置1,放入4列.
// delay(10); //键按下后,11110000变成xxxx0000,x中有1个为0,3个为1
temp = (P3>>4)^0x0f; //将高位移到低位,为计算分支方便.用异或找出按下的列
switch(temp) //判断哪列按下了,就在先前的键值中加入列倍数可得键值key_num
{
case 1: key_num += 0; break;
case 2: key_num += 4; break;
case 4: key_num += 8; break;
case 8: key_num += 12;
}
if(key_en==1) //如果有键盘操作,才执行按键服务
key_serve();
display_mod(); //指示工作模式的LED灯变化
// }
// }
}
//=== KEY SCAN
void key_scan() //键盘扫描:将获取新的key_num值,用以判断执行动作
{
uchar temp; //临时键值
uchar key_en=1; //键盘监视:有按键动作时才执行Key_serve,否则仅仅作扫描
P3 = 0x0f; //低4位置1,放入4行.
// delay(1); //键按下后,P3的00001111变成0000xxxx,x中有1个为0,3个为1
// delay(10);
// delay(10); //10ms消抖
// if(P3!=0x0f) //如果确实有键按下了
// {
//
temp = P3^0x0f; //异或,把相异的一行变成1,其它全为0
switch(temp) //判断是哪行有键按下了(0-3行)
{ //就给相应键值的行提前量
case 1: key_num = 0; break;
case 2: key_num = 1; break;
case 4: key_num = 2; break;
case 8: key_num = 3; break;
default: { key_num= 16;
key_en=0;} break; //无按键
}
P3 = 0xf0; //高4位置1,放入4列.
// delay(10); //键按下后,11110000变成xxxx0000,x中有1个为0,3个为1
temp = (P3>>4)^0x0f; //将高位移到低位,为计算分支方便.用异或找出按下的列
switch(temp) //判断哪列按下了,就在先前的键值中加入列倍数可得键值key_num
{
case 1: key_num += 0; break;
case 2: key_num += 4; break;
case 4: key_num += 8; break;
case 8: key_num += 12;
}
if(key_en==1) //如果有键盘操作,才执行按键服务
key_serve();
display_mod(); //指示工作模式的LED灯变化
// }
// }
}
▼优质解答
答案和解析
if(P3!=0x0f) //如果有键按下了
{
delay(10); //10ms消抖
if(P3!=0x0f) //如果确实有键按下了
{
while(P3!=0x0f); //判断按键是否弹起来,弹起来了就继续执行下面的语句,否则则一直循环到弹起来
temp = P3^0x0f; //异或,把相异的一行变成1,其它全为0
switch(temp) //判断是哪行有键按下了(0-3行)
...
}
}
{
delay(10); //10ms消抖
if(P3!=0x0f) //如果确实有键按下了
{
while(P3!=0x0f); //判断按键是否弹起来,弹起来了就继续执行下面的语句,否则则一直循环到弹起来
temp = P3^0x0f; //异或,把相异的一行变成1,其它全为0
switch(temp) //判断是哪行有键按下了(0-3行)
...
}
}
看了 求C51编程的键盘消抖代码优...的网友还看了以下:
兔的自述作文要求写一个事突出兔子的优点用第一人称要用“我”来写 2020-04-06 …
自卑的人用放大镜看别人的优点用显微镜看自己的缺点?乐观的对待别人,看到别人的优点大过缺点,而发现自 2020-05-23 …
用放大镜看待别人的优点,用显微镜看待别人的缺点.这句话对吗? 2020-05-23 …
作者为什么把自己受到的优待用“大概是物以稀为贵吧”来解释藤野先生课文里面的 2020-06-06 …
我对你的好意表示诚挚的感谢,用英文怎么说? 2020-06-18 …
《藤野先生》为什么作者对在仙台所受到的优待用“物以稀为贵罢”来解释呢?最好十五分钟之后有答案,因为 2020-06-30 …
英语翻译让遍布世界各地的越来越多的客户知道我们的产品,知道我们的优势,用的放心,我们将更加的把关质 2020-07-21 …
形容某人或物没有很大的缺点也没有很突出优点的词语形容某人或物没有很大的缺点也没有突出的优点用什么词 2020-07-28 …
英语翻译“你在说什么呢?警官?犯人怎么会是我呢?”医院长一脸的无辜.“你在医院二楼的休息室里面制造出 2020-11-22 …
用于英文目录中最正式的致谢我的毕业设计中英文目录中的致谢用英语怎么说,不能是Thanks 2020-12-22 …