看板 ASM 關於我們 聯絡資訊
※ 引述《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的敘述都是可省略的, 留下來是讓狀替與輸出的關係更清楚 先醬吧~ 有不清楚或有錯誤的地方請再跟我說 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.84.232.180
victim0130:謝謝不吝解釋...我會再想看看!! <(_ _)> 08/24 02:06
WolfLord:用IDEL LOOP的話應該先檢查KEY2再決定是否DELAY200ms 08/24 02:25
WolfLord:不然會變成先開200MS才決定變更狀態喔 08/24 02:25