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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

有關單片機c語言一直弄不懂的三個問題,望賜教

  [復制鏈接]
跳轉到指定樓層
樓主
ID:86913 發表于 2017-9-1 16:50 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請教3個問題:(請看以下程序)

1、在主函數中,加while(1){ }和不加while(1){ }的問題,經實踐試過,結果是一
樣的,都是無限循環。那么可以不加while(1){ }嗎?
2、如果不要循環,只要運行一次后停機,主函數該怎么寫?
3、如果只要運行一次后停機,并且某個線圈繼續通電,但電機不轉(即把電機軸用電鎖住不動)
,主函數又該怎么寫?

*****
  1. #include <reg51.h>  //步進電機正反轉運行程序
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. uchar code up_data[8]={0xE,0xC,0xD,0x9,0xB,0x3,0x7,0x6}; //1相勵磁正轉表
  5. uchar code down_data[8]={0X6,0X7,0X3,0XB,0X9,0XD,0XC,0XE};//1相勵磁反轉表
  6.             
  7. /********以下是延時函數********/
  8. void Delay_ms(uint xms)                                
  9. {
  10.         uint i,j;
  11.         for(i=xms;i>0;i--)                          //i=xms即延時約xms毫秒
  12.                 for(j=110;j>0;j--);表   
  13. }
  14. /********以下是步進電機1相勵磁法正轉函數********/
  15. void  motor_up(uint n)
  16. {
  17.    uchar i;
  18.    uint  j;
  19.    for (j=0; j<509*n; j++)            //正轉1圈
  20.     {
  21.      for (i=0; i<8; i++)     
  22.        {
  23.                P1 = up_data[i];         
  24.         Delay_ms(4);        
  25.        }
  26.     }
  27. }
  28. /********步進電機1相勵磁法反轉函數********/
  29. void  motor_down(uint n)
  30. {
  31.     uchar i;
  32.     uint  j;
  33.     for (j=0; j<509*n; j++)    //反轉1圈               
  34.      {
  35.       for (i=0; i<8; i++)            
  36.        {
  37.                P1 = down_data[i];   
  38.         Delay_ms(4);            
  39.        }
  40.      }
  41. }
  42. /********以下是主函數********/
  43. void main()
  44. {     
  45.    while(1)           //此語句有或無效果都一樣!
  46.      {
  47.        motor_up(1);                  //電機正轉1圈
  48.        P1=0xff;                        //電機停轉
  49.        Delay_ms(4000);          //換向延時為4s
  50.        motor_down(1);           //電機反轉1圈
  51.        P1=0x00;                        //電機停轉
  52.        Delay_ms(4000);          //換向延時為4s
  53.        P1=0xff;                        //電機停轉        
  54.        Delay_ms(10000);         //換向延時為10s
  55.      }
  56. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

來自 2#
ID:230544 發表于 2017-9-3 15:18 | 只看該作者
第一個,加不加的確它都會循環,這個實驗我也做過,其實加while循環是為了減小單片機出錯的概率,貌似書本上都是這么說
第二, 有兩種方法可以搞定你說的,軟件實現,在單片機完成既定任務,可以讓他一直while循環,死在循環里就好了。硬件實現,用個繼電器,繼電器線圈倆開關,一個是按下彈起開關,另一個用單片機引腳接通當開關,兩者并聯,繼電器常閉又控制單片機電源,單片機完成任務后,當做開關的引腳置零,繼電器不吸合就停止工作了

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:81352 發表于 2017-9-3 12:07 | 只看該作者
void main()
回復

使用道具 舉報

地板
ID:81352 發表于 2017-9-3 12:11 | 只看該作者
將while(1)放在Delay_ms(10000),后面可以嗎?是否開通看門狗功能呢?

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:230743 發表于 2017-9-3 21:18 | 只看該作者
只需設置一個標志位就可以了,執行一次就置1或置0,看自己習慣來
,并將一個線圈得電并維持。
回復

使用道具 舉報

6#
ID:97438 發表于 2017-9-5 17:02 | 只看該作者
我說說第一個吧,不加while(1),不做其他死循環的話,看起來也會循環,但是這屬于未定義操作,屬于不按要求來,出了問題不能怪人。
回復

使用道具 舉報

7#
ID:86913 發表于 2017-9-11 20:20 | 只看該作者
黑暗人才 發表于 2017-9-3 15:18
第一個,加不加的確它都會循環,這個實驗我也做過,其實加while循環是為了減小單片機出錯的概率,貌似書本 ...

感謝“黑暗人才”,為我提供了思路,照您的辦法做,對的。只要在后面加上       
while(1)
     {
      P1=0xff;               
     }       
就可以了。謝謝!
回復

使用道具 舉報

8#
ID:86913 發表于 2017-9-11 20:22 | 只看該作者
zhangda1230 發表于 2017-9-3 21:18
只需設置一個標志位就可以了,執行一次就置1或置0,看自己習慣來
,并將一個線圈得電并維持。

謝謝您的指導!
回復

使用道具 舉報

9#
ID:233455 發表于 2017-9-16 11:17 | 只看該作者
首先定義一個靜態變量默認賦值為0,執行一次就把這個變量置1,下次判斷這個變量為1跳過就可以了
回復

使用道具 舉報

10#
ID:203840 發表于 2017-9-16 16:21 | 只看該作者
主程序不加while(1) 當程序執行完成以后,會自動跳轉到最初的位置開始再執行  類似于復位
回復

使用道具 舉報

11#
ID:187532 發表于 2017-9-16 17:53 | 只看該作者
第一,加上while(1)可以防止程序跑飛,造成單片機錯誤。做流水燈實驗時必須有while(1)不然如何循環。
第二,只循環一次的話在程序末尾加上while(1);
回復

使用道具 舉報

12#
ID:233530 發表于 2017-9-16 19:47 | 只看該作者
break可以跳出終止循環
回復

使用道具 舉報

13#
ID:233571 發表于 2017-9-16 22:27 | 只看該作者
我是來學習的。
回復

使用道具 舉報

14#
ID:86913 發表于 2018-2-25 11:53 | 只看該作者
多謝樓上各位熱心的朋友,通過您們的幫助,我又增長了相關知識。
回復

使用道具 舉報

15#
ID:285408 發表于 2018-2-25 15:43 | 只看該作者
1、有的跟編譯軟件有關系,如果你沒加上,他會幫你加上
回復

使用道具 舉報

16#
ID:285412 發表于 2018-2-25 16:53 | 只看該作者
我也是來學習的~
回復

使用道具 舉報

17#
ID:285545 發表于 2018-3-1 11:41 | 只看該作者
1,不用 while() 的話,總感覺很容易跑偏,。畢竟默認都加的。
2,只運行一次比較好辦,一般都是用標志位,但是停機。停機是斷電?休眠?還是死循環?
{斷電,這可能要借助外部電控裝置進行,軟件好像不能直接關機。
休眠,很多單片機是可以的。
死循環,就更簡單了。
}
3,要用到一定的自鎖設計。比如,自鎖開關,將單片機的電源串入常閉,線圈串入常開,單片機動作,激活自鎖開關,這樣單片機斷電了,線圈通電了。最好單片機并接個大電容,延遲下斷電。
回復

使用道具 舉報

18#
ID:279601 發表于 2018-3-2 13:09 | 只看該作者
1,看你用的哪款單片機把,STC單片機本身是自帶循環的,你不加While(1),他也會循環,單循環是主函數整個循環;2如果只要循環一次,方法比較多,例如在函數最后一句加上一句while(1);語句,讓他執行一次后陷入while(1)死循環,也可設置個腳,例如sbit tingzhi=P1^1;默認設置為低狀態,最后一句加上while(tingzhi==0);這樣也會停在這,而且你拉高該引腳時,會跳出循環重新開始;3想讓點擊不轉,停止給脈沖就行了
回復

使用道具 舉報

19#
ID:260290 發表于 2018-3-2 15:29 | 只看該作者
多謝樓上各位熱心的朋友,通過您們的幫助,我又增長了相關知識。
回復

使用道具 舉報

20#
ID:284007 發表于 2018-3-4 12:48 | 只看該作者
因為你想啊你本來可以容納100行程序可實際的只要50行那么當運行完50行后地51行就不是自己想要運行的了,而是不確定的未知內容,一旦執行下去程序就會出錯,從而導致單片機自動復位,所以通常在程序中加入一個死循環,讓程序不要亂運行
回復

使用道具 舉報

21#
ID:287444 發表于 2018-3-4 15:05 | 只看該作者

只需設置一個標志位就可以了,執行一次就置1或置0,看自己習慣來
,并將一個線圈得電并維持。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩成人精品在线观看 | 精一区二区 | 久久6视频 | 国际精品久久 | 亚洲 中文 欧美 日韩 在线观看 | 国产精品乱码一二三区的特点 | 欧美日韩网站 | 国产精品 欧美精品 | 国产精品自产拍在线观看蜜 | 91色啪| 日本午夜视频 | 韩日av片| 欧美一级在线 | 日韩免费看视频 | 亚洲精品电影网在线观看 | 国产精品免费av | 黄色片视频网站 | 日韩高清国产一区在线 | 91精品国产综合久久久久蜜臀 | 能免费看的av | 日韩视频一区二区在线 | 亚洲一区二区在线 | 亚洲精品久久久久久一区二区 | 欧美日韩国产精品一区 | 91久久国产精品 | 国产一区二区在线免费观看 | 天天综合网天天综合色 | 欧美精品成人 | 日本在线网站 | 亚洲区一区二 | 在线欧美一区 | 国产精品成人久久久久 | 国产情侣激情 | 欧美日韩亚洲一区 | 成人在线视频免费看 | 一级黄色影片在线观看 | 欧美日韩国产高清 | 91在线免费观看网站 | 中文字幕一区二区三区在线视频 | 超碰成人免费 | 日韩免费高清视频 |