欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索

單片機(jī)while循環(huán)程序問(wèn)題

查看數(shù): 3456 | 評(píng)論數(shù): 19 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁(yè)<-左 右->
    組圖打開中,請(qǐng)稍候......
發(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 ...

回復(fù)

ID:707815 發(fā)表于 2020-3-28 15:44
按你的邏輯,不是靠一個(gè)BREAK就能解決的,你上面的代碼只實(shí)現(xiàn)了,你的第一個(gè)功能,S1接通后LED燈只亮一次,后面的東西,你都用了多少個(gè)判斷語(yǔ)句,那么在編程邏輯上,肯定不是靠一句代碼就能實(shí)現(xiàn)的,你可以加編制為也行,或者就在后面寫一個(gè)循環(huán)也行,等S1打開后跳出,如:while(1){}
ID:707815 發(fā)表于 2020-3-28 15:25
if(s1==1)
ID:715816 發(fā)表于 2020-3-28 10:03
加一個(gè)標(biāo)志位即可
ID:468209 發(fā)表于 2020-3-27 22:51
如果你只想 按鍵開燈關(guān)燈的話  

if(S1==0)  //判斷按鍵是否按下
{
   delay(50);//按鍵消抖延時(shí)
   if(S1==0)//如果真的按下
   {
       led=~led; 按一下開 再按一下關(guān) 反復(fù)操作
   }
   while(!S1);//判斷按鍵是否松開
}

按鍵的倆個(gè)引腳 一頭接單片機(jī) 還有一頭接負(fù)GND 即可
ID:468209 發(fā)表于 2020-3-27 22:28
S1==1 寫不寫都沒(méi)意義 因?yàn)槌齈0外所以IO口默認(rèn)都是等于1的  應(yīng)該寫if(S1==0)
ID:87166 發(fā)表于 2020-3-27 21:59
chinarenxx 發(fā)表于 2020-3-27 21:53
我也有類似的問(wèn)題,比如用了while(1)給了一個(gè)LED燈做循環(huán),后就不能用while(1)給另一個(gè)LED燈做循環(huán)了。

while(1)程序就循環(huán)了,你還想干嘛
ID:214276 發(fā)表于 2020-3-27 21:53
我也有類似的問(wèn)題,比如用了while(1)給了一個(gè)LED燈做循環(huán),后就不能用while(1)給另一個(gè)LED燈做循環(huán)了。
ID:311419 發(fā)表于 2020-3-15 02:44
S1未置0狀態(tài),單片機(jī)上電或者復(fù)位應(yīng)該都是高電平狀態(tài)1,另外if()后需要加{}
ID:414469 發(fā)表于 2020-3-9 15:37
余生不負(fù) 發(fā)表于 2020-3-6 14:56
用標(biāo)志位就可以了,或者聲名一個(gè)寄存器比如

char  a; //全局的

這個(gè)方法 第一次見,學(xué)習(xí)了。 謝謝
ID:414469 發(fā)表于 2020-3-9 15:35
謝謝大家的指點(diǎn).有好多沒(méi)學(xué)過(guò)的方法.我會(huì)一一實(shí)驗(yàn)消化.  感激!!
ID:437615 發(fā)表于 2020-3-6 20:19
在最后的LED=0下面加一個(gè)松手檢測(cè)
ID:687694 發(fā)表于 2020-3-6 17:34
基于狀態(tài)控制的編程,添加標(biāo)志位這是走向高階的路,
也有簡(jiǎn)單的辦法
在led=0;}后面增加一句while(s==1);即可實(shí)現(xiàn)。但是這種辦法會(huì)阻塞CPU一只在這看你松手沒(méi)有。
ID:282850 發(fā)表于 2020-3-6 17:09
讓程序只運(yùn)行一次,就停下。最簡(jiǎn)單的是//while(1)。或者把while刪除就行了,只是程序沒(méi)有實(shí)用意義的。
另一方法:
delay(50);
LED=0;
delay(5000);     //加上一個(gè)鎖定時(shí)間
ID:170892 發(fā)表于 2020-3-6 16:14
只運(yùn)行一次停下的話,在主函數(shù)末尾加個(gè)while(1);,然后再
delay(50);led=0; (這里加個(gè)break;)。
ID:560467 發(fā)表于 2020-3-6 16:08
你可以采用中斷,s1接通一次led閃爍一次
ID:316880 發(fā)表于 2020-3-6 14:56
本帖最后由 余生不負(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ì)就滅
ID:316880 發(fā)表于 2020-3-6 14:39
用標(biāo)志位就可以了
ID:213173 發(fā)表于 2020-3-6 14:02
要增加松手識(shí)別才能做到只運(yùn)行一次就停下。
ID:487821 發(fā)表于 2020-3-6 13:53
if(!s1)
      {
      delay(5);
      if(s1==1)
      {
              led=1;
              delay(50)
              led=0;
      }
     }
//不知道你的電路是怎么樣的,點(diǎn)亮燈應(yīng)該是=0的,

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表