![]() |
發(fā)布時間: 2020-3-6 10:11
正文摘要:想要的運行模式: S1接通LED 亮并延時一定時間后不管S1是否接通都熄滅.然后等S1打開后再合上,重復上一次的程序. 目 前是只要S1還是接通,LED就會自動循環(huán)閑爍. 如何讓程序只運行一次,停下? 我有在尾部加BREAK ... |
按你的邏輯,不是靠一個BREAK就能解決的,你上面的代碼只實現(xiàn)了,你的第一個功能,S1接通后LED燈只亮一次,后面的東西,你都用了多少個判斷語句,那么在編程邏輯上,肯定不是靠一句代碼就能實現(xiàn)的,你可以加編制為也行,或者就在后面寫一個循環(huán)也行,等S1打開后跳出,如:while(1){} |
if(s1==1) |
加一個標志位即可 |
如果你只想 按鍵開燈關(guān)燈的話 if(S1==0) //判斷按鍵是否按下 { delay(50);//按鍵消抖延時 if(S1==0)//如果真的按下 { led=~led; 按一下開 再按一下關(guān) 反復操作 } while(!S1);//判斷按鍵是否松開 } 按鍵的倆個引腳 一頭接單片機 還有一頭接負GND 即可 |
S1==1 寫不寫都沒意義 因為除P0外所以IO口默認都是等于1的 應該寫if(S1==0) |
chinarenxx 發(fā)表于 2020-3-27 21:53 while(1)程序就循環(huán)了,你還想干嘛 |
我也有類似的問題,比如用了while(1)給了一個LED燈做循環(huán),后就不能用while(1)給另一個LED燈做循環(huán)了。 |
S1未置0狀態(tài),單片機上電或者復位應該都是高電平狀態(tài)1,另外if()后需要加{} |
余生不負 發(fā)表于 2020-3-6 14:56 這個方法 第一次見,學習了。 謝謝 |
謝謝大家的指點.有好多沒學過的方法.我會一一實驗消化. 感激!! |
在最后的LED=0下面加一個松手檢測 |
基于狀態(tài)控制的編程,添加標志位這是走向高階的路, 也有簡單的辦法 在led=0;}后面增加一句while(s==1);即可實現(xiàn)。但是這種辦法會阻塞CPU一只在這看你松手沒有。 ![]() |
讓程序只運行一次,就停下。最簡單的是//while(1)。或者把while刪除就行了,只是程序沒有實用意義的。 另一方法: delay(50); LED=0; delay(5000); //加上一個鎖定時間 |
只運行一次停下的話,在主函數(shù)末尾加個while(1);,然后再 delay(50);led=0; (這里加個break;)。 |
你可以采用中斷,s1接通一次led閃爍一次 |
本帖最后由 余生不負 于 2020-3-6 18:25 編輯 用標志位就可以了,或者聲名一個寄存器比如 char a; //全局的 void main() { while(1) { if(s1==0) a = 1; else a = 0; if(a==1) { led點亮 delay(50); led息滅 a = 0; } } } 按一下放開也是是就亮一會就滅,一直按著也是亮一會就滅 |
用標志位就可以了 |
要增加松手識別才能做到只運行一次就停下。 |
if(!s1) { delay(5); if(s1==1) { led=1; delay(50) led=0; } } //不知道你的電路是怎么樣的,點亮燈應該是=0的, |
Powered by 單片機教程網(wǎng)