欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 51單片機尋跡小車代碼資料 [打印本頁]

作者: 18223313969    時間: 2019-6-19 16:35
標題: 51單片機尋跡小車代碼資料
基于51單片機循跡小車的代碼,傳感器為7個光電對管,前輪采用舵機轉向,后輪為驅動輪,同時采用差速輔助前輪轉向

單片機源程序如下:
  1. #include<reg52.h>

  2. #define u8   unsigned char
  3. #define u16  unsigned int

  4. /*************電機速度設定***********/
  5. #define speed_Left3      0
  6. #define speed_Left2      20
  7. #define speed_Left1      20
  8. #define speed_Middle     20
  9. #define speed_Right1     20
  10. #define speed_Right2     20
  11. #define speed_Right3     0

  12. /*************舵機轉彎角度設定***********/
  13. #define Turn_Left3      13
  14. #define Turn_Left2      14
  15. #define Turn_Left1      17
  16. #define Middle          18
  17. #define Turn_Right1     19
  18. #define Turn_Right2     22
  19. #define Turn_Right3     23

  20. /***********電機引腳定義***************/
  21. sbit left_pwm=P1^2;                        //左電機pwm
  22. sbit left_motor0=P1^3;                   //左電機負極
  23. sbit left_motor1=P1^4;                   //左電機正極
  24. sbit right_pwm=P1^5;                //右電機pwm
  25. sbit right_motor1=P1^6;                   //右電機負極
  26. sbit right_motor0=P1^7;                   //右電機正極

  27. /***********舵機引腳定義***************/
  28. sbit servo=P0^7;          

  29. /***********光電對管引腳定義***************/
  30. sbit right_led3=P2^0;     //最右側光電對管
  31. sbit right_led2=P2^1;     //次右側光電對管
  32. sbit right_led1=P2^2;     //內右側光電對管
  33. sbit middle_led=P2^3;     //中間光電對管
  34. sbit left_led1 =P2^4;     //內左側光電對管
  35. sbit left_led2 =P2^5;     //次左側光電對管
  36. sbit left_led3 =P2^6;     //最左側光電對管

  37. sbit restart=P1^0;                  

  38. void motor_pwm(u8 left_compare,u8 right_compare);
  39. void servo_pwm(u8 sevor_compare);
  40. void T0_init();
  41. void led_scan();

  42. u16 flag_num=0;
  43. u8 servo_num=0;               
  44. u8 motor_num=0;                  //定時器計數
  45. u8 direction;
  46. u8 left_speed;
  47. u8 right_speed;

  48. /********************主函數***************************/
  49. void main()
  50. {
  51.   u8 n;

  52.   T0_init();
  53.   left_motor0=right_motor0=0;
  54.   left_motor1=right_motor1=1;        //電機正轉
  55.   restart=0;

  56.   while(1)
  57.   {
  58.     led_scan();
  59.          for(servo_num=0,motor_num=0,n=0;n<1;)
  60.          {
  61.           servo_pwm(direction);
  62.             motor_pwm(left_speed,right_speed);
  63.           if(servo_num>=200) n++;
  64.          }
  65.    
  66.   }
  67. }

  68. /*********************定時器0和1初始化函數*********************************/
  69. void T0_init()
  70. {
  71.   TMOD=0X11;                           //定時器0和1方式1:16位定時器/計數器
  72.   TH0=(65536-100)/256;           //設置計數器0的高8位
  73.   TL0=(65536-100)%256;           //設置計數器0的低8位
  74.   TH1=(65536-10000)/256;           //設置計數器1的高8位
  75.   TL1=(65536-10000)%256;           //設置計數器1的低8位
  76.   EA=1;                                           //全局中斷使能
  77.   ET0=1;                                   //定時器0中斷使能
  78.   ET1=1;                                   //定時器1中斷使能
  79.   TR0=1;                                   //定時器0使能
  80.   TR1=0;                                   //定時器1失能
  81. }
  82. /*********************定時器0中斷服務函數*******************************/
  83. void T0_time() interrupt 1  //每0.1ms加1
  84. {
  85.   TH0=(65536-100)/256;
  86.   TL0=(65536-100)%256;
  87.   servo_num++;
  88.   motor_num++;
  89. }

  90. /*********************定時器1中斷服務函數*******************************/
  91. void T1_time() interrupt 3  //每10ms加1
  92. {
  93.   TH1=(65536-10000)/256;
  94.   TL1=(65536-10000)%256;
  95.   flag_num++;
  96. }
  97. /*****************舵機PWM函數*************************/
  98. void servo_pwm(u8 compare1)
  99. {
  100.   if(servo_num<compare1)   servo=1;     //高電平持續時間t=compare1*0.1 ms
  101.   else if(servo_num<200)   servo=0;             
  102. }


  103. /*****************電機PWM函數*************************/
  104. void motor_pwm(u8 left_compare,u8 right_compare)
  105. {
  106.   if(motor_num<left_compare)    left_pwm=1;
  107.   else if(motor_num<100)        left_pwm=0;                //左電機占空比

  108.   if(motor_num<right_compare)   right_pwm=1;
  109.   else if(motor_num<100)        right_pwm=0;        //右電機占空比

  110.   if(motor_num>=100)   motor_num=0;             
  111. }


  112. /*************光電對管掃描函數***************************/
  113. void led_scan()
  114. {
  115.   u8 n=0;
  116.   static u8 white_num=0;
  117.   static u8 stop=0;

  118.   if(restart==1)  stop=0;
  119.   if(stop==0)
  120.   {
  121. /********************中間光電對管檢測到黑線則直行**********************/
  122.         if(middle_led==1)
  123.           { direction=Middle; left_speed=speed_Middle; right_speed=speed_Middle; n++;
  124.            left_motor0=right_motor0=0;
  125.        left_motor1=right_motor1=1;
  126.       }
  127.           
  128. /**************最右(左)邊光電對管檢測到黑線則大左轉*********************/            
  129.     else if(right_led3==1)
  130.           { direction=Turn_Right3; left_speed=speed_Middle; right_speed=speed_Right3; n++;
  131.             left_motor0=right_motor1=0;
  132.         left_motor1=right_motor0=1;
  133.            }  

  134.     else if(left_led3==1)  
  135.           { direction=Turn_Left3; left_speed=speed_Left3; right_speed=speed_Middle;   n++;
  136.           left_motor1=right_motor0=0;
  137.       left_motor0=right_motor1=1;
  138.           }  

  139. /**************次右(左)邊光電對管檢測到黑線則次左轉*********************/
  140.     else if(right_led2==1)
  141.           { direction=Turn_Right2; left_speed=speed_Middle; right_speed=speed_Right2; n++;
  142.           left_motor0=right_motor0=0;
  143.       left_motor1=right_motor1=1;
  144.      }
  145.             
  146.     else if(left_led2==1)  
  147.          { direction=Turn_Left2;  left_speed=speed_Left2; right_speed=speed_Middle;  n++;
  148.           left_motor0=right_motor0=0;
  149.       left_motor1=right_motor1=1;
  150.          }
  151.                    
  152. /**************內右(左)邊光電對管檢測到黑線則小左轉*********************/
  153.     else if(right_led1==1)
  154.           { direction=Turn_Right1; left_speed=speed_Middle; right_speed=speed_Right1; n++;
  155.                   left_motor0=right_motor0=0;
  156.         left_motor1=right_motor1=1;
  157.            }

  158.     else if(left_led1==1)  
  159.           { direction=Turn_Left1;  left_speed=speed_Left1; right_speed=speed_Middle;  n++;
  160.             left_motor0=right_motor0=0;
  161.         left_motor1=right_motor1=1;
  162.           }
  163.           


  164.           
  165.   }

  166. ///**************************檢測是否應該停車********************************/
  167. //  if(n>=4)                //如果3個以上的光電對管檢測到黑線
  168. //  {
  169. //        TR1=1;                                   //定時器1使能
  170. //            
  171. //  }
  172. //  if(flag_num>2&&flag_num<12)
  173. //  {
  174. //    if(n!=0)   white_num=0;
  175. //    if(n==0)   
  176. //    {         
  177. //      white_num++;         
  178. //          if(white_num>=3) { left_speed=left_speed=0;        stop=1;          }
  179. //    }   
  180. //  }
  181. //  else if(flag_num>=12)
  182. //  {
  183. //        TR1=0;                                   //定時器1失能   
  184. //        flag_num=0;
  185. //        white_num=0;
  186. //  }
  187. // /*************************************************/


  188. }
復制代碼

所有資料51hei提供下載:
尋跡小車代碼.zip (101.46 KB, 下載次數: 48)



作者: admin    時間: 2019-6-20 04:16
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者: tieq1952    時間: 2019-6-20 07:05
謝謝分享!!!
作者: 等溫好撒旦    時間: 2022-6-9 19:54
666正是我需要的





歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1