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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

簡單紅外避障小車單片機程序

  [復制鏈接]
跳轉到指定樓層
樓主
這次的紅外避障實驗小車程序適合于初學者。

注意:每個小車轉速等特性都會不同,具體的轉向避障程序塊兒可以自己試著調試
要有耐心。


單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define   Left_moto2_pwm           qy_enb
  6. #define   Right_moto2_pwm         qz_ena
  7. #define   Left_moto_pwm          hy_enb
  8. #define  Right_moto_pwm                 hz_ena
  9. void delay(uint i)
  10. {
  11.         uint j,k;
  12.         for(j=i;j>0;j--)
  13.         for(k=114;k>0;k--);
  14. }
  15. sbit out_left=P2^0;
  16. sbit out_right=P2^1;
  17. //定義電機IO口
  18. sbit qz_ena=P1^0;
  19. sbit qz_in1=P1^1;
  20. sbit qz_in2=P1^2;

  21. sbit qy_enb=P1^3;
  22. sbit qy_in3=P1^4;
  23. sbit qy_in4=P1^5;

  24. sbit hz_ena=P1^6;
  25. sbit hz_in1=P1^7;
  26. sbit hz_in2=P2^2;

  27. sbit hy_enb=P2^6;
  28. sbit hy_in3=P2^4;
  29. sbit hy_in4=P2^5;
  30. //定義數據部分
  31. bit Right_moto_stop=1;          
  32. bit Left_moto_stop =1;               
  33. unsigned  int  time=0;               
  34. int pwm=3;
  35. unsigned char pwm_val_left  =0;//變量定義
  36. unsigned char push_val_left =0;// 左電機占空比N/10
  37. unsigned char pwm_val_right =0;
  38. unsigned char push_val_right=0;// 右電機占空比N/10
  39. /************************************************************************/
  40.      void  run(void)        //pwm調速函數
  41. {
  42.      push_val_left  =pwm;  //PWM 調節參數1-10   1為最慢,10是最快  改這個值可以改變其速度
  43.          push_val_right =pwm;         //PWM 調節參數1-10   1為最慢,10是最快         改這個值可以改變其速度
  44.                  if(pwm==10) pwm=0;
  45.                 if(pwm==0&&pwm<0) pwm=0;

  46. }
  47. /************************************************************************/
  48. /*                    PWM調制電機轉速                                   */
  49. /************************************************************************/


  50. /*                    左側電機調速                                        */
  51. /*調節push_val_left的值改變電機轉速,占空比            */
  52. void pwm_out_left_moto(void)
  53. {  
  54.    if(Left_moto_stop)
  55.    {
  56.     if(pwm_val_left<=push_val_left)
  57.              {  Left_moto_pwm=1;
  58.                     Left_moto2_pwm=1;  }
  59.         else
  60.               { Left_moto_pwm=0;Left_moto2_pwm=0;                 }

  61.         if(pwm_val_left>=10)
  62.         pwm_val_left=0;
  63.    }
  64.    else { Left_moto_pwm=0;Left_moto2_pwm=0;          }
  65. }
  66. /******************************************************************/
  67. /*                    右側電機調速                                  */  
  68.    void pwm_out_right_moto(void)
  69. {
  70.   if(Right_moto_stop)
  71.    {
  72.     if(pwm_val_right<=push_val_right)
  73.              {  Right_moto_pwm=1;
  74.                    Right_moto2_pwm=1;           }
  75.         else
  76.                {Right_moto_pwm=0;
  77.                     Right_moto2_pwm=0;}
  78.         if(pwm_val_right>=10)
  79.             pwm_val_right=0;
  80.    }
  81.    else    {Right_moto_pwm=0;Right_moto2_pwm=0;        }
  82. }
  83. /***************************************************************************/
  84. void Forward(void)//前進
  85. {
  86.         ET0=1;
  87.         run();
  88.         qz_in1=0;//右后輪
  89.         qz_in2=1;
  90.         qy_in3=1;//后坐
  91.         qy_in4=0;
  92.         hz_in1=1;  //前右
  93.         hz_in2=0;
  94.         hy_in3=1;        //前左
  95.         hy_in4=0;
  96. }

  97. void Stop(void)        //停車
  98. {

  99.         qz_in1=0;
  100.         qz_in2=0;
  101.         qy_in3=0;
  102.         qy_in4=0;
  103.         hz_in1=0;
  104.         hz_in2=0;
  105.         hy_in3=0;
  106.         hy_in4=0;
  107. }

  108. void back(void)        //后退
  109. {
  110.         ET0=1;
  111.         run();
  112.         qz_in1=1;
  113.         qz_in2=0;
  114.         qy_in3=0;
  115.         qy_in4=1;
  116.         hz_in1=0;
  117.         hz_in2=1;
  118.         hy_in3=0;
  119.         hy_in4=1;       
  120. }   
  121. void Turn_Right(void)         //向右旋轉
  122. {
  123.         ET0=1;
  124.         run();
  125.            qz_in1=0;
  126.         qz_in2=0;
  127.         qy_in3=1;
  128.         qy_in4=0;
  129.         hz_in1=1;
  130.         hz_in2=0;
  131.         hy_in3=0;
  132.         hy_in4=0;
  133. }
  134. void Turn_Left()
  135. {
  136.         ET0=1;
  137.         run();
  138.         qz_in1=0;
  139.         qz_in2=1;
  140.         qy_in3=0;
  141.         qy_in4=0;
  142.         hz_in1=0;
  143.         hz_in2=0;
  144.         hy_in3=1;
  145.         hy_in4=0;
  146. }
  147. void main()
  148. {       
  149.         //用于初始化pwm調速
  150.         TMOD=0X01;
  151.         TH0= 0XF8;                  //1ms定時
  152.         TL0= 0X30;
  153.         TR0= 1;
  154.         ET0= 1;
  155.         EA = 1;
  156.         while(1)
  157.         {
  158.                        //有信號為0  沒有信號為1
  159.         if(out_left==1&&out_right==1)
  160.                 {
  161.                 pwm=3;
  162.             Forward();   //調用前進函數       
  163.                 }          
  164.                 if(out_left==1&&out_right==0)            //右邊檢測到障礙物
  165.                 {
  166.                        
  167.                         pwm=5;
  168.                         back();
  169.                         delay(300);
  170.                         Turn_Left;                       //調用小車左轉函數
  171.                         delay(500);
  172.                
  173.                 }                          
  174.                 if(out_left==0&&out_right==1 )                //左邊檢測到障礙物
  175.                 {          
  176.                        
  177.                         pwm=5;
  178.                         back();
  179.                         delay(300);
  180.                         Turn_Right();                   //調用小車右轉函數
  181.                         delay(500);
  182.                        
  183.                 }
  184.                         if(out_left==0&&out_right==0 )                //左邊檢測到障礙物
  185.                 {          
  186.                         pwm=3;
  187.                         back();                   //調用小車右轉函數
  188.                 }

  189.         }

  190. }
  191. ///*TIMER0中斷服務子函數產生PWM信號*/
  192.         void timer0()interrupt 1   using 2
  193. {
  194.      TH0=0XF8;          //1Ms定時
  195.          TL0=0X30;
  196.          time++;
  197.          pwm_val_left++;
  198.          pwm_val_right++;
  199.          pwm_out_left_moto();
  200.          pwm_out_right_moto();
  201. }
  202. /*         if(out==0)         //距離在范圍內0  快要撞了
  203.         {
  204.                 Stop();
  205.                 back();
  206.                 delay(1000);
  207.         }
  208.         else            //距離超出定值1  離墻還遠         
  209.         {
  210.                 Stop();
  211.                 Forward();
  212.         }*/
復制代碼

所有資料51hei提供下載:
紅外避障.zip (22.3 KB, 下載次數: 140)



評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:783876 發表于 2020-6-19 10:13 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

板凳
ID:931523 發表于 2021-6-4 22:51 | 只看該作者
代碼很好,很適合初學者
回復

使用道具 舉報

地板
ID:922888 發表于 2021-7-7 15:41 | 只看該作者
代碼不錯,值得學習
謝謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九九亚洲| 天堂av在线影院 | 日韩欧美在线视频播放 | 成人精品一区二区 | 免费成人高清在线视频 | 99精品视频免费观看 | 免费不卡视频 | 精品久久久久久亚洲精品 | 日韩超碰在线 | 亚洲精品成人免费 | 爱爱免费视频网站 | 中文字幕91 | 午夜电影网站 | cao在线| 中文字幕一区在线 | 久热爱 | 超碰在线免费公开 | 久久高潮| 国产乱码久久久久久 | 成人精品一区二区三区中文字幕 | 欧美一二精品 | 精品视频在线观看 | 日本免费黄色 | 欧美精品一区二区三区蜜桃视频 | 国产精品免费一区二区三区四区 | 天堂中文资源在线 | 久久精品一区二区三区四区 | 亚洲三级av | 人人干人人干人人 | 亚洲网站在线播放 | 国产91久久久久蜜臀青青天草二 | 日韩在线h | 一级黄色生活视频 | 亚洲精品国产精品国自产在线 | 国产日韩一区二区三免费高清 | 亚洲欧美日韩一区 | 女朋友的闺蜜3韩国三级 | 中国大陆高清aⅴ毛片 | 午夜精品久久久久99蜜 | 日韩在线 | 亚洲日本一区二区三区四区 |