|
下面的按键检测程序有问题吗?还可不可以优化???
unsigned char Key_Value=0xFF,tmp;
Key_Value=KEY_PIN & ((1<<S1)|(1<<S2)|(1<<S3)|(1<<S4));//取得当前按键值,0,1,4,5位的值
if( Key_Value != ((1<<S1)|(1<<S2)|(1<<S3)|(1<<S4)) )//若是某一位为0,则表示有键按下
{
delay_nms(2);//先延时两ms,
if( (KEY_PIN & ((1<<S1)|(1<<S2)|(1<<S3)|(1<<S4))) == Key_Value )//再次检测,如果还是为0,表示键确实已经按下,而不是抖动
{
Key_Value=KEY_PIN & ((1<<S1)|(1<<S2)|(1<<S3)|(1<<S4));//获取按键值
//NOP();
while(( KEY_PIN & ((1<<S1)|(1<<S2)|(1<<S3)|(1<<S4)) )!= ((1<<S1)|(1<<S2)|(1<<S3)|(1<<S4)));//等待按键松开
delay_nms(1);
while(( KEY_PIN & ((1<<S1)|(1<<S2)|(1<<S3)|(1<<S4)) )!= ((1<<S1)|(1<<S2)|(1<<S3)|(1<<S4)));//等待按键松开
}
}
return Key_Value;
红色部分,为什么等待按键放开,还要判断两次,难道也类似于消除抖动?
蓝色部分,延时2ms够不够?
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|