Re: [问题] 8051 按钮控制问题

楼主: ksmrt0123 (ksmrt)   2013-08-24 02:00:40
※ 引述《victim0130 (Maxwell)》之铭言:
: 有两个按键,按键1按下去后,输出1会ON(停滞200ms),
: 然后这时候侦测按键二是否有按下去,
: 如果按键二也按下去,则输出1会一直ON的状态,
: 假设按键二没按下去,则输出1就会off。
: 上面的功能都算是有写出来,
: 不过,小弟还差一个功能没写出来,
: 如果在输出1一直ON的状态的时候,按键1又按下去,
: 则输出1会变成off的状态,若此时再按按键1,
: 又会回复到上面的状态,侦测按键二是否有按下去,
: 若有则呈现on的状态,若没有则off。
首先简化逻辑. 可用一个变量state来分辨两个状态
state 0: normal, 按key1 输出1(维持200ms), 测试key2以决定是否进入 state 1
state 1: 维持输出1, 测试key1以决定是否回复 state 0
这部份可以先画流程图或状态图.
再写出对应的程式码:
state = 0;
while(1) {
if(state==0) {
if(key1) {
output(1);
delay_ms(200);
if(key2) {
state = 1;
output(1); // dummy
} else {
state = 0; // dummy
output(0);
}
}
} else { // state==1
output(1); // dummy
if(key1) {
state = 0;
output(0);
}
}
}
debounce不见得需要, 因为最主要的输出是delay 200ms, 期间不做其他事
key release需不需要侦测也是看需求, 需要的话state会变多
几个dummy的叙述都是可省略的, 留下来是让状替与输出的关系更清楚
先酱吧~ 有不清楚或有错误的地方请再跟我说
作者: victim0130 (Maxwell)   2013-08-24 02:06:00
谢谢不吝解释...我会再想看看!! <(_ _)>
作者: WolfLord (呆呆小狼￾ ￾ N￾ ￾ )   2013-08-24 02:25:00
用IDEL LOOP的话应该先检查KEY2再决定是否DELAY200ms不然会变成先开200MS才决定变更状态喔

Links booklink

Contact Us: admin [ a t ] ucptt.com