要求:
当一个按健按下时,执行所要完成的动作,而当此动作完成后,按健还继续按着的话,不执行原重复的动作,也就是说按健按下执行一次动作,当按健一直按下时,不重复执行原动作,直到按健断开为止,
以下为此要求写的这段程序,程序中的bug很容易发现,不符合要求
main()
{
initialport();
while(1}
{
bit flag=1;
if(P1^0==0&&flag==1)
{
flag=0;
dosomething();
}
else flag=1;
anotherthing();
}
}
大家都发表一下自己的高见,互相学习参考一下,免的以后走弯路,
main()
{
initialport();
while(1)
{
if(P1^0==0)
dosomething();
while(!P1^0)
;
}
}
看看这个能否满足你的要求
不知道按键后会不会做不同的事,上面只说了你只要求MCU做一件事的情况。
或者将
while(!P1^0)
;
改一下
while(!P1^0)
anotherthing();
你可以判别按键抬起,此时才识别为一次按键
或者检测到按键时置一个标志,按键抬起时才清这个标志,再检测按键的时候判断这个标志,决定是否识别
1. first key pressed
2.check repeat time------------
来个比较复杂的,
检验下降沿
#define HI_LEVEL (0)
#define LO_LEVEL (1)
sbit P10=P1^0;
bit Falling_edge_G;
static bit Test4, Test3, Test2, Test1, Test0;
void PluseCheck() //call this function every 20ms
{
Test4 = Test3;
Test3 = Test2;
Test2 = Test1;
Test1 = Test0;
// Get latest test result
Test0 = P10;
// Required result:
// Test4 == HI_LEVEL
// Test3 == HI_LEVEL
// Test1 == LO_LEVEL
// Test0 == LO_LEVEL
if ((Test4 == HI_LEVEL) &&
(Test3 == HI_LEVEL) &&
(Test1 == LO_LEVEL) &&
(Test0 == LO_LEVEL))
{
// Falling edge detected
Falling_edge_G = 1;
}
else
{
// Default
Falling_edge_G = 0;
}
}
其实,可以用while跟踪到真的对按键释放。。。。
或是在定时扫键盘时,连续多次的按键都视为未释放
呵呵
这一版块,太没人气了,是不是大家都成大侠了
如果成大侠了,也常回家看看嘛,家里太冷清了
据说努力顶帖也是一种美德,但我只想大家常回家看看
毕竟每天都有新手需要帮忙,而我能帮的只能是把帖子顶起来