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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1963|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)超聲波測距避障小車 進(jìn)入不了while循環(huán)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:308093 發(fā)表于 2018-4-27 21:04 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
代碼如上,我是小白~
請問下各位大佬 , 為什么進(jìn)入不了while循環(huán)呢 輪子一直轉(zhuǎn)但是超聲波模塊不能正常運(yùn)轉(zhuǎn) 幫忙改一下代碼并給我一下理由和建議 謝謝啦
  1. #include <AT89x51.H>
  2. #include <intrins.h>
  3. #define ECHO P2_4 //超聲波接口定義
  4. #define TRIG P2_5 //超聲波接口定義
  5. #define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左邊兩個電機(jī)向前走
  6. #define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左邊兩個電機(jī)后轉(zhuǎn)
  7. #define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左邊停止
  8. #define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右邊的兩個前進(jìn)
  9. #define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右邊的后轉(zhuǎn)
  10. #define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右邊停止
  11. typedef unsigned int u16;
  12. typedef unsigned char u8;
  13. unsigned long S=0;
  14. unsigned int time=0; //時間變量
  15. unsigned int timer=0; //延時基準(zhǔn)變量
  16. unsigned char timer1=0; //掃描時間變?
  17. bit           flag =0;
  18. /**********************測距**************************************************/
  19. void zd0() interrupt 1          //T0中斷
  20. {
  21.     flag=1;                     //中斷溢出標(biāo)志
  22. }
  23. void delay(unsigned int k) //延時函數(shù)
  24. {
  25. unsigned int x,y;
  26. for(x=0;x<k;x++)
  27. for(y=0;y<2000;y++);
  28. }
  29. /************************************************************************/
  30. //前進(jìn)
  31. void run(void)
  32. {
  33. Left_moto_go ; //左
  34. Right_moto_go ; //右
  35. }
  36. /************************************************************************/
  37. //后退
  38. void backrun(void)
  39. {
  40. Left_moto_back ; //左
  41. Right_moto_back ; //右
  42. }
  43. /************************************************************************/
  44. //左轉(zhuǎn)
  45. void leftrun(void)
  46. {
  47. Left_moto_back ;
  48. Right_moto_go ;
  49. }
  50. /************************************************************************/
  51. //右轉(zhuǎn)
  52. void rightrun(void)
  53. {
  54. Left_moto_go ;
  55. Right_moto_back ;
  56. }
  57. /************************************************************************/
  58. //停止
  59. void stoprun(void)
  60. {
  61. Left_moto_Stop ;
  62. Right_moto_Stop ;
  63. }
  64. /************************************************************************/
  65. void StartModule() //啟動模塊
  66. {
  67. TRIG=1;
  68. _nop_();
  69. _nop_();
  70. _nop_();
  71. _nop_();
  72. _nop_();
  73. _nop_();
  74. _nop_();
  75. _nop_();
  76. _nop_();
  77. _nop_();
  78. _nop_();
  79. _nop_();
  80. _nop_();
  81. _nop_();
  82. _nop_();
  83. _nop_();
  84. _nop_();
  85. _nop_();
  86. _nop_();
  87. _nop_();
  88. _nop_();
  89. TRIG=0;
  90. }
  91. /***************************************************/
  92. void Conut(void) //啟動測距
  93. {
  94. while(!ECHO);
  95. TR0=1;
  96. while(ECHO);
  97. TR0=0;
  98. time=TH0*256+TL0;
  99. TH0=0;
  100. TL0=0;
  101. S=(time*1.7)/100;
  102. }
  103. /************************************************************************/
  104. void time1()interrupt 3 using 2
  105. {
  106. TH1=(65536-100)/256; //100US??
  107. TL1=(65536-100)%256;
  108. timer++; //???100US???????????  
  109. }
  110. void main(void)
  111. {  TMOD=0x21;                  
  112.     SCON=0x50;
  113.     TH1=0xFD;
  114.     TL1=0xFD;
  115.     TH0=0;
  116.     TL0=0;
  117.     TR0=1;  
  118.     ET0=1;                     
  119.     TR1=1;                       
  120.     TI=1;
  121.    
  122.     EA=1;                       
  123.      
  124. run();   
  125.     while(1)
  126. {
  127.     if(timer>=1000) //100MS檢查一次
  128. {
  129. timer=0;
  130. StartModule(); //啟動檢測
  131. Conut(); //計算距離
  132. if(S<50)
  133. {
  134. stoprun(); //小車停止
  135. delay(500);
  136. backrun();
  137. delay(500);
  138. leftrun();
  139.     if(S<30)
  140.     {
  141.     stoprun();
  142.     delay(500);
  143.     rightrun();
  144.     delay(500);
  145.     run();
  146.     }
  147.     else
  148.     run();
  149. timer=0;
  150. StartModule(); //啟動測超聲模塊
  151. Conut();
  152.     //計算
  153. }
  154. else
  155. run();
  156. }
  157. }
  158. }
復(fù)制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:164602 發(fā)表于 2018-4-28 09:20 | 只看該作者
看了你的程序,我認(rèn)為,程序肯定是進(jìn)入了主循環(huán)的!
只是沒有反應(yīng),原因是你的所有if語句都沒起作用!!!

先搞清楚距離計算:聲波空氣中速度約340m/s,來回雙程,定時器計次數(shù)的時間單位是us,好了,正確的計算公式為:S=(t*0.17)mm,看清楚沒?算清楚沒?以毫米為單位的距離結(jié)果。

而你的計算為:S=(time*1.7)/100,結(jié)果是十分一毫米。
你的if判斷有這樣幾個:S<50,小于5毫米,S<30,小于3毫米,都是不會出現(xiàn)的條件,所以沒有反應(yīng)。

你改改看是不是我說的原因。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久99这里只有精品 | 国产精品69毛片高清亚洲 | 国产成人精品一区二区在线 | 欧美精品一区二区三区在线 | 色综合久久久久 | 精品欧美一区二区三区久久久 | 91网站在线观看视频 | 国产精品国产成人国产三级 | 99re6在线视频精品免费 | 久久久久久久一区二区三区 | 午夜精品一区 | 高清一区二区三区 | 午夜精品久久久 | 午夜爽爽爽男女免费观看 | 国产精品免费一区二区三区 | 国产二区视频 | 91精品国产综合久久久久久丝袜 | 狠狠av | 久久免费大片 | 日日骚网| 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 国产亚洲精品成人av久久ww | 羞视频在线观看 | 国产激情一区二区三区 | 久久久久免费精品国产 | 超碰在线97国产 | 国产男女视频网站 | 91高清在线 | 日韩在线一区二区三区 | 精品99爱视频在线观看 | 网络毛片| 91在线网 | 精品久久精品 | 精品91久久| 日韩精品一区二区三区在线播放 | 国产免费一区二区 | 国产精品日日做人人爱 | 伊色综合久久之综合久久 | 亚洲国产成人在线 | 久久精品国产久精国产 | 一区二区三区av |