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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4211|回復: 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. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:242625 發表于 2017-10-24 22:52 | 只看該作者
樓主能分享一下電路圖嗎?
回復

使用道具 舉報

板凳
ID:250071 發表于 2017-11-16 15:42 | 只看該作者
樓主有電路圖嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产成人精品久久久国产成人一区 | 国偷自产av一区二区三区 | 国产成人免费视频网站高清观看视频 | 一区二区伦理电影 | 精品国产99 | 日韩在线 | 精品国产一区二区三区性色av | 日日骚av| 精品久久久久久久 | 在线a视频| 午夜免费观看体验区 | 91视频电影 | 国内精品伊人久久久久网站 | 成人av网站在线观看 | 91视频一88av| 亚洲成人国产 | 特级黄一级播放 | 美女爽到呻吟久久久久 | 国产丝袜一区二区三区免费视频 | 久久久久国产一区二区三区 | 国产日产欧产精品精品推荐蛮挑 | 久久免费国产 | 草在线| 亚洲国产高清高潮精品美女 | 秋霞电影一区二区三区 | 国产精品99久久久久久人 | 亚洲狠狠爱一区二区三区 | 亚洲欧美一区二区三区在线 | 国产婷婷色综合av蜜臀av | 精品国产乱码久久久久久影片 | 日韩精品久久久久 | 成人小视频在线观看 | 日韩三级在线观看 | 黄色一级免费 | 国产亚洲一区二区三区 | 国产精品不卡一区 | 成人在线精品视频 | 在线观看中文字幕一区二区 | 国产一级在线 | 99久久精品免费 | 中文字幕日韩欧美一区二区三区 |