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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4184|回復: 2
收起左側

我的單片機pwm尋跡小車源程序

[復制鏈接]
ID:242216 發表于 2017-10-23 20:40 | 顯示全部樓層 |閱讀模式
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. sbit Z1=P2^0;  //左電機前進
  5. sbit Z2=P2^1;  //左電機后退
  6. sbit Y1=P2^2;  //右電機前進
  7. sbit Y2=P2^3;  //右電機后退
  8. sbit ENA=P0^0;
  9. sbit ENB=P0^1;
  10. sbit L1=P1^0;        //左1
  11. sbit L2=P1^1;        //左2
  12. sbit R1=P1^2;        //右1
  13. sbit R2=P1^3;        //右2
  14. double a=0;
  15. int aa=0,d=0,c=0;
  16. uchar b,bb;
  17. uchar pwm_val_left =0;

  18. double push_val_left =0; //左電機占空比N/10

  19. uchar pwm_val_right =0;

  20. double push_val_right=0; //右電機占空比N/10

  21. bit Right_moto_stp=1;

  22. bit Left_moto_stp =1;



  23. void run1(void) //前進函數

  24. {

  25. push_val_left =5.5; //PWM 調節參數1-20 1為最慢20是最快 改這個值可以改變其速度



  26. push_val_right =5.5; //PWM 調節參數1-20 1為最慢20是最快 改這個值可以改變其速度

  27. Z1=0;Z2=1;
  28. Y1=0;Y2=1;



  29. }
  30. void run(void) //前進函數
  31. {
  32. push_val_left =20; //PWM 調節參數1-20 1為最慢20是最快 改這個值可以改變其速度
  33. push_val_right =20; //PWM 調節參數1-20 1為最慢20是最快 改這個值可以改變其速度
  34. Z1=0;Z2=1;
  35. Y1=0;Y2=1;
  36. }
  37. void run2(void) //前進函數
  38. {
  39. push_val_left =9; //PWM 調節參數1-20 1為最慢20是最快 改這個值可以改變其速度
  40. push_val_right =9; //PWM 調節參數1-20 1為最慢20是最快 改這個值可以改變其速度
  41. Z1=0;Z2=1;
  42. Y1=0;Y2=1;
  43. }

  44. void left(void) //直角左轉函數

  45. {

  46. push_val_left =18;

  47. push_val_right =18;

  48.         Z1=1;Z2=0;
  49.         Y1=0;Y2=1;

  50. }
  51. void left1(void) //左轉函數

  52. {

  53. push_val_left =16;
  54.                                  
  55. push_val_right =16;

  56.         Z1=1;Z2=0;
  57.         Y1=0;Y2=1;

  58. }
  59. void left2(void) //小左轉函數

  60. {

  61. push_val_left =19;
  62.                                  
  63. push_val_right =19;

  64.         Z1=1;Z2=1;
  65.         Y1=0;Y2=1;

  66. }
  67. void right(void) //直角右轉函數

  68. {

  69. push_val_left =18;

  70. push_val_right =18;

  71. Z1=0;Z2=1;

  72. Y1=1;Y2=0;

  73. }
  74. void right1(void) //右轉函數

  75. {

  76. push_val_left =16;

  77. push_val_right =16;

  78. Z1=0;Z2=1;

  79. Y1=1;Y2=0;
  80. }
  81. void right2(void) //小右轉函數

  82. {

  83. push_val_left =19;

  84. push_val_right =19;

  85. Z1=0;Z2=1;

  86. Y1=1;Y2=1;
  87. }
  88. void stop(void)

  89. {
  90. Z1=1;Z2=1;

  91. Y1=1;Y2=1;


  92. }




  93. void pwm_out_left_moto(void) //左電機調速,調節push_val_left的值改變電機轉速,占空比

  94. {

  95. if(Left_moto_stp)

  96. {                                                                           
  97. {if(pwm_val_left<=push_val_left)

  98. { ENB=1;}

  99. else

  100.   {ENB=0;}
  101.   }
  102. {if(pwm_val_left>=20)

  103.   {pwm_val_left=0;}
  104.   }
  105. }

  106. else

  107. {ENB=0;}

  108. }



  109. void pwm_out_right_moto(void) //右電機調速,調節push_val_left的值改變電機轉速,占空比

  110. {

  111. if(Right_moto_stp)

  112. {

  113. if(pwm_val_right<=push_val_right)

  114. {ENA=1;}

  115. else

  116. {ENA=0;}

  117. if(pwm_val_right>=20)

  118. {pwm_val_right=0;}

  119. }

  120. else

  121. {ENA=0;}

  122. }



  123. void xunji()
  124. {
  125.                  if(L1==1&&L2==1&&R1==1&&R2==1)
  126.                 a++;

  127.                 if(L1==0&&L2==0&&R1==0&&R2==0)                 
  128.                 {run();aa++;}
  129.                 if((L1==1&&L2==0&&R1==0&&R2==0)||(L1==1&&L2==1&&R1==1&&R2==0)||(L1==1&&L2==1&&R1==0&&R2==0))
  130.                 left1();
  131.                 if((L1==0&&L2==0&&R1==0&&R2==1)||(L1==0&&L2==1&&R1==1&&R2==1)||(L1==0&&L2==0&&R1==1&&R2==1))
  132.                 right1();
  133.                 if(L1==0&&L2==1&&R1==0&&R2==0)          left2();
  134.                 if(L1==0&&L2==0&&R1==1&&R2==0)          right2();
  135.                 if((L1==1&&L2==1&&R1==1&&R2==1)&&a>=100)
  136.                 {
  137.                         stop();          a=0;
  138.                 }
  139.                 if(aa>=13000)         { bb=1; aa=0;         }
  140.                 while(bb==1)
  141.                 {
  142.                
  143.                 if(L1==0&&L2==0&&R1==0&&R2==0)                 run2();
  144.                 if((L1==1&&L2==0&&R1==0&&R2==0)||(L1==1&&L2==1&&R1==1&&R2==0)||(L1==1&&L2==1&&R1==0&&R2==0))
  145.                 left1();
  146.                 if((L1==0&&L2==0&&R1==0&&R2==1)||(L1==0&&L2==1&&R1==1&&R2==1)||(L1==0&&L2==0&&R1==1&&R2==1))
  147.                 right1();
  148.                 if(L1==0&&L2==1&&R1==0&&R2==0)          {left2();aa++;}
  149.                 if(L1==0&&L2==0&&R1==1&&R2==0)          {right2();aa++;}
  150.                 while(aa>=700)
  151.                 {
  152.                 if(L1==0&&L2==0&&R1==0&&R2==0)                 
  153.                 run();
  154.                 if((L1==1&&L2==0&&R1==0&&R2==0)||(L1==1&&L2==1&&R1==1&&R2==0)||(L1==1&&L2==1&&R1==0&&R2==0))
  155.                 left1();
  156.                 if((L1==0&&L2==0&&R1==0&&R2==1)||(L1==0&&L2==1&&R1==1&&R2==1)||(L1==0&&L2==0&&R1==1&&R2==1))
  157.                 right1();
  158.                 if(L1==0&&L2==1&&R1==0&&R2==0)          {left2();}
  159.                 if(L1==0&&L2==0&&R1==1&&R2==0)          right2();
  160.                 if(L1==1&&L2==1&&R1==1&&R2==1)    a++;
  161.                                 if((a>=60))
  162.                 {
  163.                         b=1;
  164.                 }
  165.                 while(b==1)
  166.                 {
  167.                         if(L1==0&&L2==0&&R1==0&&R2==0)                 
  168.                         run1();
  169.                         if((L1==1&&L2==0&&R1==0&&R2==0)||(L1==1&&L2==1&&R1==1&&R2==0)||(L1==1&&L2==1&&R1==0&&R2==0))
  170.                         left();
  171.                         if((L1==0&&L2==0&&R1==0&&R2==1)||(L1==0&&L2==1&&R1==1&&R2==1)||(L1==0&&L2==0&&R1==1&&R2==1))
  172.                         right();
  173.                         if(L1==0&&L2==1&&R1==0&&R2==0)          {left2();        c++;}
  174.                     if(L1==0&&L2==0&&R1==1&&R2==0)          {right2();d++;}

  175.                         while(c+d>=15000)
  176.                         {
  177.                                 if(L1==0&&L2==0&&R1==0&&R2==0)         run();
  178.                                 if((L1==1&&L2==0&&R1==0&&R2==0)||(L1==1&&L2==1&&R1==1&&R2==0)||(L1==1&&L2==1&&R1==0&&R2==0))
  179.                                 left1();
  180.                                 if((L1==0&&L2==0&&R1==0&&R2==1)||(L1==0&&L2==1&&R1==1&&R2==1)||(L1==0&&L2==0&&R1==1&&R2==1))
  181.                                 right1();
  182.                                 if(L1==0&&L2==1&&R1==0&&R2==0)          left2();
  183.                                 if(L1==0&&L2==0&&R1==1&&R2==0)          right2();
  184.                                 if(L1==1&&L2==1&&R1==1&&R2==1)          stop();
  185.                         }

  186.                         if((L1==1&&L2==1&&R1==1&&R2==1))
  187.                 {
  188.                         stop();          a=0;
  189.                 }

  190.                 }
  191.                
  192.                 }

  193.                 }










  194. //                if((a>=60))
  195. //                {
  196. //                        b=1;
  197. //                }
  198. //                while(b==1)
  199. //                {
  200. //                        if(L1==0&&L2==0&&R1==0&&R2==0)                 
  201. //                        run1();
  202. //                        if((L1==1&&L2==0&&R1==0&&R2==0)||(L1==1&&L2==1&&R1==1&&R2==0)||(L1==1&&L2==1&&R1==0&&R2==0))
  203. //                        left();
  204. //                        if((L1==0&&L2==0&&R1==0&&R2==1)||(L1==0&&L2==1&&R1==1&&R2==1)||(L1==0&&L2==0&&R1==1&&R2==1))
  205. //                        right();
  206. //                        if(L1==0&&L2==1&&R1==0&&R2==0)          {left2();        c++;}
  207. //                    if(L1==0&&L2==0&&R1==1&&R2==0)          {right2();d++;}
  208. //
  209. //                        while(c+d>=15000)
  210. //                        {
  211. //                                if(L1==0&&L2==0&&R1==0&&R2==0)         run();
  212. //                                if((L1==1&&L2==0&&R1==0&&R2==0)||(L1==1&&L2==1&&R1==1&&R2==0)||(L1==1&&L2==1&&R1==0&&R2==0))
  213. //                                left1();
  214. //                                if((L1==0&&L2==0&&R1==0&&R2==1)||(L1==0&&L2==1&&R1==1&&R2==1)||(L1==0&&L2==0&&R1==1&&R2==1))
  215. //                                right1();
  216. //                                if(L1==0&&L2==1&&R1==0&&R2==0)          left2();
  217. //                                if(L1==0&&L2==0&&R1==1&&R2==0)          right2();
  218. //                                if(L1==1&&L2==1&&R1==1&&R2==1)          stop();
  219. //                        }
  220. //
  221. //                        if((L1==1&&L2==1&&R1==1&&R2==1))
  222. //                {
  223. //                        stop();          a=0;
  224. //                }
  225. //
  226. //                }
  227.                         
  228.         
  229.                         
  230. }
  231. /***********TIMER0中斷服務子函數產生PWM信號**********/

  232. void timer0()interrupt 1 using 2

  233. {

  234. TH0=0XFC; //2Ms定時

  235. TL0=0X30;

  236. pwm_val_left++;

  237. pwm_val_right++;

  238. pwm_out_left_moto();

  239. pwm_out_right_moto();

  240. }

  241. /***************************************************/

  242. void main(void)

  243. {

  244. TMOD=0X01;

  245. TH0= 0XFC; //2ms定時

  246. TL0= 0X30;                                                                 

  247. TR0= 1;

  248. ET0= 1;

  249. EA = 1;

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

  251. {

  252. xunji();
  253. }

  254. }
復制代碼
回復

使用道具 舉報

ID:242625 發表于 2017-10-24 22:52 | 顯示全部樓層
樓主能分享一下電路圖嗎?
回復

使用道具 舉報

ID:250071 發表于 2017-11-16 15:42 | 顯示全部樓層
樓主有電路圖嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区在线免费观看 | www.亚洲免费 | 日韩三级一区 | 国产三区视频在线观看 | 人操人人| 亚洲精品亚洲人成人网 | 国产视频在线观看一区二区三区 | 欧美精品在线视频 | 亚洲一区二区久久 | 久久精品色欧美aⅴ一区二区 | 亚洲欧美激情精品一区二区 | 国产精品成人av | 精品国产一区二区三区av片 | 免费看大片bbbb欧美 | 999久久久 | 欧美一级在线观看 | 色黄视频在线 | 欧美一级高清片 | 999www视频免费观看 | 久久久久久久久久久久久久av | 欧美一区二区免费视频 | 综合久久一区 | 午夜在线电影网 | 亚洲成人网在线 | 午夜视频在线播放 | 精品久久久一区 | 一区二区三区在线观看视频 | 青久草视频 | 免费艹逼视频 | 日本黄视频在线观看 | 中文字幕二区 | 波多野结衣精品 | 亚洲欧洲精品在线 | 亚洲中午字幕 | 亚洲精品9999 | 欧美日韩中文字幕在线 | 日本一区二区三区精品视频 | 99re在线观看 | 国产免费福利小视频 | 天堂综合网 | 国产99视频精品免视看9 |