熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2023-10-28 19:51
正文摘要:各位好 我是小白 現(xiàn)在情況是這樣的, 我有三個(gè)輸入IO口,檢測(cè)低電平 1.自動(dòng)程序(電機(jī)自動(dòng)正反轉(zhuǎn)) 2.電機(jī)正轉(zhuǎn) 3.電機(jī)飯莊 我在主函數(shù)while里邊用了三個(gè) if 語(yǔ)句 如果1是低電平 執(zhí)行循環(huán)程序 ... |
1、做個(gè)10ms中斷。 2、每次中斷讀入三個(gè)端口狀態(tài)存入NEW,與變量LAST(是上次讀入的數(shù)據(jù),初化設(shè)置為全1)做比較。 2.1、NEW = LAST:什么也不做。 2.2、NEW <> LAST (有變化了),按照你的邏輯執(zhí)行。(改變運(yùn)行狀態(tài),正、反、停。) 3、令 LAST = NEW,為下次比較輸入作依據(jù)。 更高級(jí)一點(diǎn),加入按鍵防彈動(dòng):(這個(gè)不在此詳細(xì)說(shuō)明) 加個(gè)計(jì)次,5次按鍵組合的數(shù)據(jù)相同,認(rèn)為是真實(shí)按鍵狀態(tài)。低于5次不作數(shù)(彈動(dòng))。 |
大漠落日 發(fā)表于 2023-10-29 11:32 有解決方案嗎 可以給點(diǎn)建議嗎 |
wulin 發(fā)表于 2023-10-29 08:11 是的 是的 我現(xiàn)在想要停下就直接拔電源 您有辦法推薦嗎 |
這個(gè)不難,小問(wèn)題, |
XLinliY.Zhang 發(fā)表于 2023-10-28 23:10 和時(shí)間沒(méi)有關(guān)系的,就是跳入不了循環(huán)程序 后邊我自己試著寫(xiě)另一個(gè)方法 雖然實(shí)驗(yàn)成功了 但是發(fā)現(xiàn)了另一個(gè)問(wèn)題 頭大了 您可以幫忙看看我下邊回復(fù)了一個(gè)帖子 那是另一種問(wèn)題 |
樓主如果用的是普通按鈕而不是自鎖按鈕,就需要用一個(gè)變量記憶當(dāng)前按鈕操作狀態(tài),用這個(gè)變量控制后續(xù)運(yùn)行狀態(tài)。否則按鈕松手就只能運(yùn)行一個(gè)循環(huán)。當(dāng)再次判斷3個(gè)按鈕時(shí)就都是高電平,電機(jī)就不能持續(xù)既定工作狀態(tài)。另外還需要有退出機(jī)制,否則除了斷電停不下來(lái)。 |
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按下) 記錄狀態(tài)為x if(時(shí)間到了) switch(x) case 正轉(zhuǎn) case 反轉(zhuǎn) case if(不是反轉(zhuǎn))反轉(zhuǎn)else正轉(zhuǎn) 時(shí)間可以用定時(shí)器定時(shí),或者while里面添加一個(gè)固定時(shí)間的循環(huán),然后記錄循環(huán)次數(shù) |
對(duì)了是32單片機(jī) |
Powered by 單片機(jī)教程網(wǎng)