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