久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3175|回復: 19
打印 上一主題 下一主題
收起左側

單片機while循環程序問題

  [復制鏈接]
跳轉到指定樓層
樓主

想要的運行模式: S1接通LED 亮并延時一定時間后不管S1是否接通都熄滅.然后等S1打開后再合上,重復上一次的程序.
目 前是只要S1還是接通,LED就會自動循環閑爍. 如何讓程序只運行一次,停下? 我有在尾部加BREAK也不行.改while 的位置也不行.
求指點. 拜謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:487821 發表于 2020-3-6 13:53 | 只看該作者
if(!s1)
      {
      delay(5);
      if(s1==1)
      {
              led=1;
              delay(50)
              led=0;
      }
     }
//不知道你的電路是怎么樣的,點亮燈應該是=0的,
回復

使用道具 舉報

板凳
ID:213173 發表于 2020-3-6 14:02 | 只看該作者
要增加松手識別才能做到只運行一次就停下。
回復

使用道具 舉報

地板
ID:316880 發表于 2020-3-6 14:39 | 只看該作者
用標志位就可以了
回復

使用道具 舉報

5#
ID:316880 發表于 2020-3-6 14:56 | 只看該作者
本帖最后由 余生不負 于 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;
         }

   }
}

按一下放開也是是就亮一會就滅,一直按著也是亮一會就滅
回復

使用道具 舉報

6#
ID:560467 發表于 2020-3-6 16:08 | 只看該作者
你可以采用中斷,s1接通一次led閃爍一次
回復

使用道具 舉報

7#
ID:170892 發表于 2020-3-6 16:14 | 只看該作者
只運行一次停下的話,在主函數末尾加個while(1);,然后再
delay(50);led=0; (這里加個break;)。
回復

使用道具 舉報

8#
ID:282850 發表于 2020-3-6 17:09 | 只看該作者
讓程序只運行一次,就停下。最簡單的是//while(1)。或者把while刪除就行了,只是程序沒有實用意義的。
另一方法:
delay(50);
LED=0;
delay(5000);     //加上一個鎖定時間
回復

使用道具 舉報

9#
ID:687694 發表于 2020-3-6 17:34 | 只看該作者
基于狀態控制的編程,添加標志位這是走向高階的路,
也有簡單的辦法
在led=0;}后面增加一句while(s==1);即可實現。但是這種辦法會阻塞CPU一只在這看你松手沒有。
回復

使用道具 舉報

10#
ID:437615 發表于 2020-3-6 20:19 來自觸屏版 | 只看該作者
在最后的LED=0下面加一個松手檢測
回復

使用道具 舉報

11#
ID:414469 發表于 2020-3-9 15:35 | 只看該作者
謝謝大家的指點.有好多沒學過的方法.我會一一實驗消化.  感激!!
回復

使用道具 舉報

12#
ID:414469 發表于 2020-3-9 15:37 | 只看該作者
余生不負 發表于 2020-3-6 14:56
用標志位就可以了,或者聲名一個寄存器比如

char  a; //全局的

這個方法 第一次見,學習了。 謝謝
回復

使用道具 舉報

13#
ID:311419 發表于 2020-3-15 02:44 | 只看該作者
S1未置0狀態,單片機上電或者復位應該都是高電平狀態1,另外if()后需要加{}
回復

使用道具 舉報

14#
ID:214276 發表于 2020-3-27 21:53 | 只看該作者
我也有類似的問題,比如用了while(1)給了一個LED燈做循環,后就不能用while(1)給另一個LED燈做循環了。
回復

使用道具 舉報

15#
ID:87166 發表于 2020-3-27 21:59 | 只看該作者
chinarenxx 發表于 2020-3-27 21:53
我也有類似的問題,比如用了while(1)給了一個LED燈做循環,后就不能用while(1)給另一個LED燈做循環了。

while(1)程序就循環了,你還想干嘛
回復

使用道具 舉報

16#
ID:468209 發表于 2020-3-27 22:28 來自觸屏版 | 只看該作者
S1==1 寫不寫都沒意義 因為除P0外所以IO口默認都是等于1的  應該寫if(S1==0)
回復

使用道具 舉報

17#
ID:468209 發表于 2020-3-27 22:51 | 只看該作者
如果你只想 按鍵開燈關燈的話  

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

按鍵的倆個引腳 一頭接單片機 還有一頭接負GND 即可
回復

使用道具 舉報

18#
ID:715816 發表于 2020-3-28 10:03 | 只看該作者
加一個標志位即可
回復

使用道具 舉報

19#
ID:707815 發表于 2020-3-28 15:25 | 只看該作者
if(s1==1)
回復

使用道具 舉報

20#
ID:707815 發表于 2020-3-28 15:44 | 只看該作者
按你的邏輯,不是靠一個BREAK就能解決的,你上面的代碼只實現了,你的第一個功能,S1接通后LED燈只亮一次,后面的東西,你都用了多少個判斷語句,那么在編程邏輯上,肯定不是靠一句代碼就能實現的,你可以加編制為也行,或者就在后面寫一個循環也行,等S1打開后跳出,如:while(1){}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久.com | 国产精品无码永久免费888 | 亚洲国产精品一区二区久久 | 国内精品免费久久久久软件老师 | 99re66在线观看精品热 | 精品成人佐山爱一区二区 | wwwsihu| 日韩精品一区二区在线 | 中文字幕av一区 | 天堂久久天堂综合色 | 福利片在线看 | 综合五月 | 欧美亚洲一级 | 日韩在线播放网址 | 精品久久久久久久久久久久久 | 国产一级片一区二区 | 亚洲精品1区 | 国产精品7777777 | 国产精品免费视频一区 | 毛片免费看 | 在线观看亚洲专区 | 99国产精品久久久久久久 | 国产视频一区二区 | 久久久日韩精品一区二区三区 | 欧美五月婷婷 | 日韩视频在线免费观看 | 精品免费国产视频 | 精品视频久久久久久 | 成人久久18免费网站图片 | 91视频一88av| www.日韩| 国产视频福利一区 | 毛片a级 | 日韩欧美精品在线 | 综合九九| 91精品国产91久久久久游泳池 | 亚洲综合色视频在线观看 | 日本精品久久 | 日韩免费1区二区电影 | 成人福利网 | 欧美一区二区免费 |