![]() |
地雷里加判斷退出 |
用中斷或延時里面判斷 |
我覺得這個最好用中斷,如果硬件上不支持中斷,那就改用狀態(tài)機,通過不同的狀態(tài)切換實現(xiàn)延時,不需要delay函數(shù)而實現(xiàn)delay的效果。 |
return是退出子程序用的。退出循環(huán)用break; |
這個方法好,想了好久都沒寫成功,今天終于參考這個寫好了,謝謝 |
應(yīng)該有挺多方法方法實現(xiàn)的,但是要是不想做太大修改的話,可以修改下延時,像 bro0310 兄弟寫的,不過可能把附加判斷條件放在延時二級循環(huán)里實時性應(yīng)該會相對更高一點~ void Delay(uint del) { uint i, j; for(i=0; i<del; i++) for(j=0; (j<1827)&&KEY1&&KEY2; j++); } |
你像風(fēng)兒來了 發(fā)表于 2018-1-15 17:03 好想法!非常具有開創(chuàng)性 |
參與人數(shù) 2 | 黑幣 +18 | 收起 理由 |
---|---|---|
![]() | + 8 | 很給力! |
![]() | + 10 | 很給力! |
void Delay(uint cnt) { uint i=0,j=0; for(i=0; (i<cnt)&&KEY1&&KEY2; i++) for(j=0; j<1827; j++) ; } |
本帖最后由 bro0310 于 2018-1-16 20:15 編輯 void delay(uint cnt) { uint i=0,j=0; for (i=0; (i<cnt)&&KEY1&&KEY2; i++) for (j=0; j<1827; j++) ; } |
改寫延時函數(shù)吧!! |
你把按鍵檢測函數(shù)放到中斷函數(shù),,,進入中斷函數(shù)的時間比延時函數(shù)短,,,可以試一試 |
改成一個while語句試試,循環(huán)結(jié)束的條件改成while的 |
辦法多多,在延時程序中做文章。 |
每次延時500(或更少),延時完后檢測按鍵,如此循環(huán)12次(或不需12次) |
寫個專用延時函數(shù),在函數(shù)里進行IO判斷,如果狀態(tài)符合,立即退出 |
用單片機中斷試試 |
用單片機中斷試試 |
在Delay()這個函數(shù)最后加上按鍵檢測 |
直接在這個位置使用有條件的for循環(huán)延時,否則跳出循環(huán)。 |
這種延時是阻塞延時,當(dāng)執(zhí)行這個延時函數(shù)時,CPU一直在這執(zhí)行延時函數(shù)中自增語句,不會去執(zhí)行其他操作,所以即便在你兩個KEY的狀態(tài)發(fā)生改變時,CPU也不知道,因為它忙著執(zhí)行延時呢,所以這樣寫實現(xiàn)不了,可以嘗試將判斷KEY狀態(tài)的語句放到中斷函數(shù)中,不過這樣估計你硬件連接就要改改了,要將KEY連接到51單片機的中斷引腳上。 |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎勵! |
用外部中斷試試 |
Powered by 單片機教程網(wǎng)