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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2108|回復: 1
收起左側

單片機紅外避障小車程序

[復制鏈接]
ID:497164 發表于 2020-5-25 11:51 | 顯示全部樓層 |閱讀模式
紅外避障小車

單片機源程序如下:
  1. /******************************************************************
  2. ***名稱:小車紅外避障參考程序(PWM)*******************************
  3. ***晶振:11.0592MHZ*************************************************
  4. ******************************************************************/

  5. /******************************************************************
  6. ************************* 頭文件 **********************************
  7. ******************************************************************/
  8. #include<AT89X52.H>          

  9. /******************************************************************
  10. ************************電機驅動定義*******************************
  11. ******************************************************************/
  12. #define LS     {P1_1=0,P1_2=0;}    //左電機停轉
  13. #define Lg     {P1_1=1,P1_2=0;}    //左電機正轉
  14. #define Lb     {P1_1=0,P1_2=1;}           //左電機反轉
  15. #define RS     {P1_4=0,P1_5=0;}          //右電機停轉                     
  16. #define Rg     {P1_4=1,P1_5=0;}          //右電機正轉
  17. #define Rb     {P1_4=0,P1_5=1;}          //右電機反轉


  18. #define Lp            P1_0          //PWM信號端
  19. #define Rp            P1_3          //PWM信號端
  20. #define Ll      P3_4          //左傳感器      
  21. #define Rl      P3_5          //右傳感器

  22. sbit BUZZ = P2^3;                 //蜂鳴器引腳

  23. /******************************************************************
  24. **********************PWM調速相關變量******************************
  25. ******************************************************************/
  26. unsigned char pwm_val_left  =0;              //變量定義
  27. unsigned char push_val_left =0;              //左電機占空比N/20
  28. unsigned char pwm_val_right =0;
  29. unsigned char push_val_right=0;              //右電機占空比N/20
  30. bit Rs=1;
  31. bit Ls =1;
  32. unsigned  int  time=0;

  33. /******************************************************************
  34. **********************延時函數*************************************
  35. ******************************************************************/       
  36. void delay(unsigned int k)
  37. {   
  38.      unsigned int x,y;
  39.          for(x=0;x<k;x++)
  40.            for(y=0;y<2000;y++);
  41. }

  42. /******************************************************************
  43. ******************************小車前進*****************************
  44. ******************************************************************/
  45. void  front_run(void)
  46. {
  47.          push_val_left=10;
  48.          push_val_right=10.1;
  49.          Lg;   
  50.          Rg;  
  51. }

  52. /******************************************************************
  53. ******************************小車后退*****************************
  54. ******************************************************************/
  55. void  back_run(void)
  56. {
  57.          push_val_left=10;
  58.          push_val_right=10.1;
  59.          Lb;   
  60.          Rb;  
  61. }


  62. /******************************************************************
  63. ******************************小車左轉*****************************
  64. ******************************************************************/
  65. void  left_run(void)
  66. {
  67.          push_val_left=12;
  68.          push_val_right=12;
  69.          Rg;   
  70.          Lb;  
  71. }

  72. /******************************************************************
  73. ******************************小車右轉******************************
  74. ******************************************************************/
  75. void  right_run(void)
  76. {
  77.          push_val_left=12;
  78.          push_val_right=12;
  79.          Lg;   
  80.          Rb;  
  81. }

  82. /******************************************************************
  83. ******************************小車停*******************************
  84. ******************************************************************/
  85. void  stop(void)
  86. {
  87.          push_val_left=15;
  88.          push_val_right=15;
  89.          LS;
  90.          RS;   
  91. }

  92. /******************************************************************
  93. ****************************左電機調速*****************************
  94. ******************************************************************/
  95. void pwm_out_left_moto(void)
  96. {  
  97.         if(Ls)
  98.         {
  99.             if(pwm_val_left<=push_val_left)
  100.                         {
  101.                                 Lp=1;
  102.        
  103.                         }
  104.                 else
  105.                     {
  106.                         Lp=0;
  107.        
  108.                         }
  109.                 if(pwm_val_left>=20)
  110.                     pwm_val_left=0;
  111.         }
  112.         else   
  113.         {
  114.                 Lp=0;
  115.         }
  116. }

  117. /******************************************************************
  118. ***************************右電機調速******************************
  119. ******************************************************************/
  120. void pwm_out_right_moto(void)
  121. {
  122.         if(Rs)
  123.     {
  124.             if(pwm_val_right<=push_val_right)
  125.             {
  126.                     Rp=1;
  127.                 }
  128.         else
  129.             {
  130.                         Rp=0;
  131.                 }
  132.         if(pwm_val_right>=20)
  133.                pwm_val_right=0;
  134.    }
  135.    else   
  136.    {
  137.        Rp=0;

  138.    }
  139. }

  140. /******************************************************************
  141. ************************定時器0初始化******************************
  142. ******************************************************************/
  143. void timer0_Init(void)
  144. {
  145.         TMOD=0X01;
  146.         TH0= 0XFc;                  //1ms定時
  147.         TL0= 0X18;
  148.         TR0= 1;
  149.         ET0= 1;
  150.         EA = 1;                           //開總中斷       
  151. }
  152.            
  153. /******************************************************************
  154. *******************定時器0中斷服務子程序***************************
  155. ******************************************************************/
  156. void timer0()interrupt 1   using 2
  157. {
  158.    TH0=0XFc;          
  159.          TL0=0X18;
  160.          time++;
  161.          pwm_val_left++;
  162.          pwm_val_right++;
  163.          pwm_out_left_moto();
  164.          pwm_out_right_moto();
  165. }       

  166. /******************************************************************
  167. **************************主函數***********************************
  168. ******************************************************************/
  169. void main(void)
  170. {
  171.         unsigned char i;
  172.         stop();                        //小車停轉            
  173.   timer0_Init();     
  174.         while(1)
  175.         {
  176.                 if(Ll==1&&Rl==1)                       //前方無障礙
  177.                    front_run();                        //前進
  178.                 else
  179.             {                          
  180.                         if(Ll==1&&Rl==0)                     //右前方右障礙
  181.                         {
  182.                                 left_run();                                     //左轉
  183.                                 delay(40);
  184.                         }  
  185.                         if(Rl==1&&Ll==0)                     //左前方右障礙
  186.                     {          
  187.                                 right_run();                                   //右轉
  188.         delay(40);
  189.                     }
  190.                         if(Rl==0&&Ll==0)                     //前方有障礙
  191.                     {          
  192.                                 back_run();                                     //后退
  193.         delay(40);
  194.                                 right_run();                                   //右轉
  195.         delay(90);
  196.                     }
  197.                 }         
  198.         }
  199. }
  200. /******************************************************************
  201. ******************************結束*********************************
  202. *******************************************************************/
復制代碼

所有資料51hei提供下載:
XC.zip (32.23 KB, 下載次數: 24)

回復

使用道具 舉報

ID:1 發表于 2020-5-29 01:02 | 顯示全部樓層
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品日本一区二区在线播放 | 国产午夜精品一区二区三区四区 | 久久久久国产一级毛片 | 国产精品麻 | av天天看| 欧美日韩在线精品 | 欧美精品综合在线 | 午夜视频一区 | 日本成人毛片 | 秋霞电影一区二区三区 | 日韩一区欧美一区 | 成人福利在线 | 精品av | 国产精品mv在线观看 | 精品国产一区二区三区av片 | 成人网址在线观看 | 欧美日韩精品国产 | 日韩欧美在线免费 | 国产精品久久久久久妇女6080 | 国产乱码久久久 | 国产精品久久久久久妇女 | 日韩综合一区 | 国产精品成人一区二区三区 | 视频一区在线观看 | 亚洲视频免费观看 | www中文字幕 | 精品国产一区二区三区免费 | 欧美性猛交一区二区三区精品 | 亚洲精品一区在线 | 在线看一区二区 | 国产精品视频免费播放 | 九九久久精品 | 国产区精品 | 五月激情综合 | www.操.com | 国产在线观看一区二区 | 欧美激情欧美激情在线五月 | 亚洲视频免费 | 超碰在线97国产 | 国产精品成人一区二区三区吃奶 | 成人片网址|