找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 6193|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)超聲波搖頭避障小車源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:139175 發(fā)表于 2016-12-10 20:12 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
最初是在arduino的論壇看到的,覺得很好玩,就有了用51做的想法。從硬件搭建到程序編寫都是我一個(gè)人完成的(當(dāng)時(shí)單片機(jī)啥都不懂
用了一兩個(gè)月,現(xiàn)在終于做好了�,F(xiàn)在拿出來給大家參考,希望對大家能有所幫助。如果大家有什么好的意見和想法,歡迎在下面留言


全部源碼下載:
超聲波搖頭避障小車.zip (48.74 KB, 下載次數(shù): 87)



部分單片機(jī)源程序:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include"duoji.h"
  4. #include"ultrasonic.h"
  5. #include"serial_port.h"

  6. uint flag_front,flag_left,flag_right,left_distance,right_distance;

  7. /******定義電機(jī)控制接口********/
  8. sbit in1=P1^4;
  9. sbit in2=P1^5;
  10. sbit in3=P1^6;
  11. sbit in4=P1^7;
  12. sbit ENA=P1^0;
  13. sbit ENB=P1^1;

  14. /**************小車運(yùn)動控制****************/
  15. void forward(void)
  16. {
  17.    in1=0;
  18.    in2=1;
  19.    in3=0;
  20.    in4=1;
  21. }

  22. void backward(void)
  23. {
  24.    in1=1;
  25.    in2=0;
  26.    in3=1;
  27.    in4=0;
  28. }


  29. void turn_left(void)
  30. {                        
  31.    in1=1;
  32.    in2=1;
  33.    in3=0;
  34.    in4=1;
  35. }


  36. void turn_right(void)
  37. {
  38.    in1=0;
  39.    in2=1;
  40.    in3=1;
  41.    in4=1;
  42. }


  43. void stop(void)
  44. {
  45.    in1=1;
  46.    in2=1;
  47.    in3=1;
  48.    in4=1;
  49. }


  50. /*******************延時(shí)(單位1ms)*******************/
  51. void dianji_delayms(unsigned int ms)
  52. {
  53.         unsigned int a,b;
  54.     for(b=ms;b>0;b--)
  55.     for(a=110;a>0;a--);
  56. }





  57. /**************云臺控制****************/                                                  
  58. void yuntai_control()
  59. {                                                                                                                                 
  60. /************舵機(jī)擺正后測距************/                                                   
  61.   get_wave();
  62.   if(get_distance()<=16)
  63.    {
  64.             stop();
  65.             dianji_delayms(400);           
  66.                 get_wave();
  67.                 if(get_distance()<=16)
  68.                 {
  69.                      flag_front=1;
  70.                      if(get_distance()<=4)
  71.                       {
  72.                                   backward();
  73.                                   dianji_delayms(300);
  74.                                   stop();
  75.                           }
  76.                               dianji_delayms(1000);
  77.                       duoji_positive_90degree();                 //測得前方有障礙,舵機(jī)向左旋轉(zhuǎn)90°
  78.                       dianji_delayms(100);
  79.                 }                                                                                                                                         
  80. /************舵機(jī)左轉(zhuǎn)90°后測距************/
  81.         get_wave();
  82.                 left_distance=get_distance();                                                                                          
  83.         if(left_distance<=8)
  84.           {
  85.             flag_left=1;
  86.           }
  87.             duoji_negative_90degree();                 //舵機(jī)向右旋轉(zhuǎn)180°
  88.                 dianji_delayms(100);

  89. /************舵機(jī)右轉(zhuǎn)180°后測距************/
  90.               get_wave();
  91.                           right_distance=get_distance();
  92.               if(right_distance<=8)
  93.                 {
  94.                   flag_right=1;
  95.                 }
  96.                   duoji_zero_degree();                 //舵機(jī)擺正                          
  97.                                   dianji_delayms(100);
  98.    }
  99. }





  100. /**************電機(jī)控制****************/                                                                  
  101. void car_operational_control()
  102. {
  103.   yuntai_control();
  104.   if(1==flag_front)
  105.    {                                 
  106.      if(1==flag_front&&1==flag_left&&0==flag_right)                  
  107.         {
  108.                  flag_front=0;
  109.                  flag_left=0;
  110.                  flag_right=0;
  111.          turn_right();
  112.              dianji_delayms(500);
  113.                  stop();
  114.         }
  115.          else if(1==flag_front&&0==flag_left&&1==flag_right)
  116.                {
  117.                             flag_front=0;
  118.                         flag_left=0;
  119.                         flag_right=0;
  120.                 turn_left();
  121.                     dianji_delayms(500);
  122.                                 stop();
  123.                }
  124.                                   else if(1==flag_front&&0==flag_left&&0==flag_right)
  125.                                           {
  126.                                               flag_front=0;
  127.                                   flag_left=0;
  128.                                   flag_right=0;
  129.                                                   turn_right();
  130.                                                   dianji_delayms(500);
  131.                                                   stop();
  132.                                           }                          
  133.                                else if(1==flag_front&&1==flag_left&&1==flag_right)
  134.                                {
  135.                                                        flag_front=0;
  136.                                            flag_left=0;
  137.                                            flag_right=0;
  138.                                                        if(left_distance<=right_distance)
  139.                                                              {
  140.                                                               turn_right();
  141.                                                               dianji_delayms(250);
  142.                                                              }
  143.                                                                 else
  144.                                                                           {
  145.                                                                                  turn_left();
  146.                                                                                      dianji_delayms(250);
  147.                                                                               }
  148.                                }               
  149.    }
  150.      else
  151.               {
  152.                      forward();
  153.                   }
  154. }
復(fù)制代碼

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2017-1-7 15:27 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:149774 發(fā)表于 2017-2-14 15:42 | 只看該作者
小車速度太快了,有PWM更好
回復(fù)

使用道具 舉報(bào)

地板
ID:262587 發(fā)表于 2017-12-20 11:14 | 只看該作者
學(xué)習(xí)參考下~~
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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