![]() |
發布時間: 2023-10-28 19:51
正文摘要:各位好 我是小白 現在情況是這樣的, 我有三個輸入IO口,檢測低電平 1.自動程序(電機自動正反轉) 2.電機正轉 3.電機飯莊 我在主函數while里邊用了三個 if 語句 如果1是低電平 執行循環程序 ... |
1、做個10ms中斷。 2、每次中斷讀入三個端口狀態存入NEW,與變量LAST(是上次讀入的數據,初化設置為全1)做比較。 2.1、NEW = LAST:什么也不做。 2.2、NEW <> LAST (有變化了),按照你的邏輯執行。(改變運行狀態,正、反、停。) 3、令 LAST = NEW,為下次比較輸入作依據。 更高級一點,加入按鍵防彈動:(這個不在此詳細說明) 加個計次,5次按鍵組合的數據相同,認為是真實按鍵狀態。低于5次不作數(彈動)。 |
大漠落日 發表于 2023-10-29 11:32 有解決方案嗎 可以給點建議嗎 |
wulin 發表于 2023-10-29 08:11 是的 是的 我現在想要停下就直接拔電源 您有辦法推薦嗎 |
這個不難,小問題, |
XLinliY.Zhang 發表于 2023-10-28 23:10 和時間沒有關系的,就是跳入不了循環程序 后邊我自己試著寫另一個方法 雖然實驗成功了 但是發現了另一個問題 頭大了 您可以幫忙看看我下邊回復了一個帖子 那是另一種問題 |
樓主如果用的是普通按鈕而不是自鎖按鈕,就需要用一個變量記憶當前按鈕操作狀態,用這個變量控制后續運行狀態。否則按鈕松手就只能運行一個循環。當再次判斷3個按鈕時就都是高電平,電機就不能持續既定工作狀態。另外還需要有退出機制,否則除了斷電停不下來。 |
unsigned char status; void main() { while(1) { if(P10 == 0) status =0; if(P11 == 0) status =1; if(P12 == 0) status =2; switch(status) { case 0: //xxxxxxxxxxxxxxxxxxxxx break; case 1: //xxxxxxxxxxxxxxxxxxxxx break; case 2: //xxxxxxxxxxxxxxxxxxxxx break; default: break; } } } |
if(按鈕x按下) 記錄狀態為x if(時間到了) switch(x) case 正轉 case 反轉 case if(不是反轉)反轉else正轉 時間可以用定時器定時,或者while里面添加一個固定時間的循環,然后記錄循環次數 |
對了是32單片機 |