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

標題: 智能四路循跡小車過直角的單片機源程序 [打印本頁]

作者: 稻草君    時間: 2017-10-25 22:23
標題: 智能四路循跡小車過直角的單片機源程序
單片機源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. #define Right_moto_pwm P3^0; //ENA
  5. #define Left_moto_pwm P3^1; //ENB
  6. ///////////////////////////
  7. sbit P22=P2^2; // 左前車輪
  8. sbit P23=P2^3; // 左后車輪
  9. sbit P24=P2^4; //右前車輪
  10. sbit P25=P2^5; //右后車輪
  11. ////////////////////////////////
  12. sbit P10=P1^0;//  紅1外
  13. sbit P11=P1^1; //紅2外
  14. sbit P12=P1^2; // 紅3外
  15. sbit P13=P1^3;//紅4外
  16. /////////////////////////////////
  17. sbit P20=P3^0;
  18. sbit P21=P3^1;

  19. uchar pwm_val_left =0;
  20. double push_val_left =0; //左電機占空比N/10
  21. double pwm_val_right =0;
  22. uchar push_val_right=0; //右電機占空比N/10

  23. bit Right_moto_stp=1;
  24. bit Left_moto_stp =1;
  25. double time=0;
  26. int flag=0;
  27. void stop(void)
  28. {        
  29.         P22=1;
  30.         P23=1;
  31.         P24=1;
  32.         P25=1;
  33. }
  34. void run(void)
  35. {

  36.         push_val_left =16;//PWM 調節參數1-20 1為最慢20是最快 改這個值可以改變其速度
  37.     push_val_right =16;//} //PWM 調節參數1-20 1為最慢20是最快 改這個值可以改變其速度
  38.                 P22=0;
  39.                 P23=1;
  40.                 P24=0;
  41.                 P25=1;
  42. }
  43.          
  44. void run1(void)
  45. {
  46.         push_val_left =7;
  47.         push_val_right =7;        
  48.                 P22=0;
  49.                 P23=1;
  50.                 P24=0;
  51.                 P25=1;        
  52.                         
  53. }
  54. void left(void)         //左轉
  55. {         
  56.         push_val_left =20;
  57.         push_val_right =20;
  58.                 P22=1;
  59.                 P23=1;
  60.                 P24=0;
  61.                 P25=1;
  62. }
  63. void left1(void)         //左轉
  64. {         
  65.         push_val_left =20;
  66.         push_val_right =19;
  67.                 P22=1;
  68.                 P23=0;
  69.                 P24=0;
  70.                 P25=1;
  71. }         
  72.         
  73. void right(void)  //右轉
  74. {         
  75.         push_val_left =18;
  76.         push_val_right =18;
  77.          
  78.                 P22=0;
  79.                 P23=1;
  80.                 P24=1;
  81.                 P25=1;
  82. }
  83. void right1(void)  //右轉
  84. {         
  85.         push_val_left =20;
  86.         push_val_right =19;
  87.          
  88.                 P22=0;
  89.                 P23=1;
  90.                 P24=1;
  91.                 P25=0;
  92. }
  93.          


  94. void pwm_out_left_moto(void) //左電機調速,調節push_val_left的值改變電機轉速,占空比
  95. {                                                                           //右轉
  96.         if(Left_moto_stp)
  97.          {
  98.          {if(pwm_val_left<=push_val_left)
  99.                  {
  100.                         P21=1;        //ENB
  101.                 }
  102.         else
  103.                   {P21=0;}
  104.          }
  105. {if(pwm_val_left>=20)

  106.   {pwm_val_left=0;}
  107.   }
  108. }

  109. else
  110. {P21=0;}
  111. }
  112. /////////////////////////////////////////////////
  113. void pwm_out_right_moto(void) //右電機調速,調節push_val_left的值改變電機轉速,占空比
  114. {                                                           //左轉
  115.         if(Right_moto_stp)
  116. {
  117.         if(pwm_val_right<=push_val_right)
  118. {P20=1;}
  119. else
  120. {P20=0;}

  121. if(pwm_val_right>=20)

  122. {pwm_val_right=0;}
  123. }                                                                                                                                          
  124. else
  125. {P20=0;}
  126. }

  127. void xunji()
  128. {         
  129.          
  130.         

  131.                 if(P10==0&&P11==0&&P12==0&&P13==0)
  132.                 {
  133.                    if(flag==1)
  134.                    run1();
  135.                    else
  136.                    run();
  137.                 }
  138.                 else
  139.                 if((P10==1&&P11==1&&P12==0&&P13==0)||(P10==1&&P11==1&&P12==1&&P13==0)||(P10==1&&P11==0&&P12==0&&P13==0)||(P10==0&&P11==1&&P12==0&&P13==0)) //zuozhuan
  140.                 {         if(flag==1)
  141.                         left1();                //zuozhuan
  142.                         else
  143.                         left();
  144.                 }
  145.                 else
  146.                 if((P10==0&&P11==0&&P12==0&&P13==1)||(P10==0&&P11==0&&P12==1&&P13==0)||(P10==0&&P11==0&&P12==1&&P13==1)||(P10==0&&P11==1&&P12==1&&P13==1))

  147.                 {        if(flag==1)                //youzhuan
  148.                         right1();        
  149.                         else
  150.                         right();
  151.                  }
  152.                   else
  153.                 if((P10==1&&P11==0&&P12==1&&P13==0)||(P10==0&&P11==1&&P12==0&&P13==1)||(P10==0&&P11==1&&P12==1&&P13==0)||(P10==1&&P11==0&&P12==0&&P13==1)||(P10==1&&P11==1&&P12==0&&P13==1)||(P10==1&&P11==0&&P12==1&&P13==1))
  154.                     {
  155.                            run1();
  156.                    }
  157.                    else
  158.                  if(P10==1&&P11==1&&P12==1&&P13==1)
  159.                   {
  160.                           if(flag==1)
  161.                         run1();
  162.                         else
  163.                         stop();
  164.                  }
  165. }




  166. void timer0()interrupt 1 using 2

  167. {
  168. TR1=0;
  169. TH0=0xFC; //2Ms定時


  170. TL0=0x30;



  171. pwm_val_left++;

  172. pwm_val_right++;

  173. pwm_out_left_moto();

  174. pwm_out_right_moto();
  175.   //xunji();

  176.                 if(P10==0&&P11==0&&P12==0&&P13==0)
  177.                 {
  178.                    if(flag==1)
  179.                      run1();
  180.                    else
  181.                    run();
  182.                 }
  183.                 else
  184.                 if((P10==1&&P11==1&&P12==0&&P13==0)||(P10==1&&P11==1&&P12==1&&P13==0)||(P10==1&&P11==0&&P12==0&&P13==0)||(P10==0&&P11==1&&P12==0&&P13==0)) //zuozhuan
  185.                 {         if(flag==1)
  186.                         left1();                //zuozhuan
  187.                         else
  188.                         left();
  189.                 }
  190.                 else
  191.                 if((P10==0&&P11==0&&P12==0&&P13==1)||(P10==0&&P11==0&&P12==1&&P13==0)||(P10==0&&P11==0&&P12==1&&P13==1)||(P10==0&&P11==1&&P12==1&&P13==1))

  192.                 {        if(flag==1)                //youzhuan
  193.                         right1();        
  194.                         else
  195.                         right();
  196.                  }
  197.                   else
  198.                 if((P10==1&&P11==0&&P12==1&&P13==0)||(P10==0&&P11==1&&P12==0&&P13==1)||(P10==0&&P11==1&&P12==1&&P13==0)||(P10==1&&P11==0&&P12==0&&P13==1)||(P10==1&&P11==1&&P12==0&&P13==1)||(P10==1&&P11==0&&P12==1&&P13==1))
  199.                     {
  200.                            run1();
  201.                    }
  202.                    else
  203.                  if(P10==1&&P11==1&&P12==1&&P13==1)
  204.                   {
  205.                           if(flag==1)
  206.                         run1();
  207.                         else
  208.                         stop();
  209.                  }
  210. TR1=1;



  211. }
  212. void timer1() interrupt 3
  213. {
  214.     TR1=1 ;
  215.         TH1=0xFC; //2Ms定時
  216.     TL1=0x30;

  217.     time++;
  218.    if(time<23000)
  219.    {   
  220.    flag=0;
  221.    }
  222. if(time>23000&&time<53000)
  223.    {   
  224.    flag=1;
  225.    }
  226.   if(time>53000)
  227.                 flag=0;
  228.         

  229. }  

  230. /***************************************************/

  231. void main(void)

  232. {

  233. TMOD=0X21;

  234. TH0= 0xFC; //2ms定時
  235. TL0= 0x30;
  236. TH1= 0xFC; //2ms定時
  237. TL1= 0x30;

  238. TR0= 1;
  239. ET0= 1;
  240. ET1= 1;
  241. EA = 1;

  242. while(1) /*無限循環*/

  243.         {

  244. //        xunji();
  245.                         
  246.                 if(P10==1&&P11==1&&P12==1&&P13==1&&flag==0)//全滅
  247.                 {                        
  248.                         stop();                                          
  249.                  }

  250.         }

  251. }


復制代碼







作者: 逗比不逗_    時間: 2018-4-25 20:15
本帖最后由 逗比不逗_ 于 2018-4-29 14:46 編輯

不錯哦
作者: haide1998    時間: 2024-5-5 09:30
路過學習,謝謝分享!




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品国产三级国产aⅴ无密码 | 天天看天天操 | 亚洲天堂一区 | 91高清视频在线 | 国内自拍视频在线观看 | 一区二区亚洲 | 久草99| 精品一区二区三区四区在线 | 亚洲乱码一区二区三区在线观看 | 69堂永久69tangcom | 欧美精选一区二区 | 久久99精品久久久久久国产越南 | 国产精品乱码一区二区三区 | 视频在线观看亚洲 | 一区二区三区四区免费在线观看 | 精品自拍视频在线观看 | 国产高清在线精品一区二区三区 | 欧美一区二区三区在线免费观看 | 久久久女 | 三级在线视频 | 国产高清精品一区二区三区 | av在线免费播放 | 拍拍无遮挡人做人爱视频免费观看 | 久久躁日日躁aaaaxxxx | 超碰激情| 91精品国产色综合久久不卡98口 | 91亚洲视频在线 | 在线观看免费观看在线91 | 99伊人 | 一区二区三区精品 | 亚洲另类视频 | 欧洲一级黄 | 玖玖国产 | 久草视频观看 | 亚洲精品成人av久久 | 国产精品成人一区二区三区 | 欧美性a视频 | 草久网| 国产区免费视频 | 91久久久久久久久久久久久 | 欧美久久久久 |