找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4369|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)程序,五路循跡+差速轉(zhuǎn)向

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:353347 發(fā)表于 2018-6-21 01:33 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
五路循跡+差速轉(zhuǎn)向

單片機(jī)源程序如下:

  1. #include <reg52.h>
  2. #include "intrins.h"
  3. #include "math.h"
  4. #include "car.h"
  5. /***********************延時(shí)函數(shù)**************************/
  6. void delay(unsigned int i)
  7. {
  8.         while(i--);
  9. }
  10. /***********************直走函數(shù)**************************/
  11. void run(unsigned int x)
  12. {
  13.           push_val_left=11+x;         //速度調(diào)節(jié)變量 0-30   0<=x<=25
  14.         push_val_right=9+x; //占空比  5+x/30

  15. }
  16. /***********************左拐1函數(shù)**************************/
  17. void leftrun1()       
  18. {         
  19.             push_val_left=15;                 
  20.          push_val_right=35;                //最大30,下同

  21. }
  22. /***********************左拐2函數(shù)**************************/
  23. void leftrun2()
  24. {         
  25.            push_val_left=20;                 
  26.                 push_val_right=45;               
  27. }
  28. ///***********************左拐3函數(shù)**************************/
  29. // void leftrun3()
  30. //{         
  31. //   push_val_left=6;                 
  32. //         push_val_right=17;               
  33. //}

  34. /***********************右拐1函數(shù)**************************/
  35. void  rightrun1()
  36. {
  37.          push_val_left=35;                  
  38.          push_val_right=15;                  
  39.                 
  40. }
  41. /***********************右拐2函數(shù)**************************/
  42. void  rightrun2()
  43. {                                                          
  44.          push_val_left=45;                  
  45.          push_val_right=20;                 
  46. }
  47. ///***********************右拐3函數(shù)**************************/
  48. //void  rightrun3()
  49. //{                                                          
  50. //         push_val_left=17;                  
  51. //         push_val_right=6;                 
  52. //}
  53. /***********************走函數(shù)**************************/
  54. void  go()                       
  55. {
  56.      left_right_go;
  57. }
  58. /***********************停函數(shù)**************************/
  59. void stop()
  60. {
  61.      left_right_stop;
  62. }
  63. /***************PWM調(diào)制電機(jī)轉(zhuǎn)速函數(shù)********************/
  64. //                左電機(jī)調(diào)速                                       
  65. void pwm_out_left_moto()
  66. {  
  67.      if(Left_PWM_ON)
  68.      {
  69.           if(pwm_val_left<=push_val_left)       
  70.               {
  71.                    EN1=1;                           
  72.               }
  73.               else
  74.               {
  75.                    EN1=0;
  76.           }
  77.           if(pwm_val_left>=100)           //30為占空比的分母   可以自己修改。(此處牽一發(fā)而動(dòng)全身)
  78.               pwm_val_left=0;
  79.      }
  80.         else   
  81.         {
  82.                   EN1=0;   //若未開啟PWM則EN1=0 左電機(jī) 停止
  83.         }
  84. }                       
  85. /***************PWM調(diào)制電機(jī)轉(zhuǎn)速函數(shù)********************/
  86. //                右電機(jī)調(diào)速                                       
  87.                
  88. void pwm_out_right_moto()
  89. {
  90.     if(Right_PWM_ON)
  91.     {
  92.         if(pwm_val_right<=push_val_right)        // pwm_val_right從零開始加push_val_right為占空比分子
  93.             {                                                                        //分子越大,高電平時(shí)間越長
  94.                 EN2=1;                                                        
  95.         }
  96.             else
  97.             {
  98.                 EN2=0;
  99.         }
  100.             if(pwm_val_right>=100)
  101.             pwm_val_right=0;                   //加到30清零
  102.     }
  103.     else   
  104.     {
  105.         EN2=0;          //若未開啟PWM則EN2=0 右電機(jī) 停止
  106.     }
  107. }
  108. /***************定時(shí)器、電機(jī)初始化********************/
  109. void tminite()
  110. {
  111.                 IN1=1;IN2=0;   
  112.     IN3=1;IN4=0;  
  113.                 TMOD=0x02;
  114.     TH0=0x9c;  //1ms定時(shí)
  115.     TL0=0x9c;
  116.     TR0=1;
  117.     ET0=1;
  118.                 EA=1;            //開總中斷       
  119. }
  120. /***************TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號********************/
  121. void timer0() interrupt 1
  122. {
  123.         pwm_val_left++;
  124.         pwm_val_right++;
  125.         pwm_out_left_moto();
  126.         pwm_out_right_moto();
  127. }
  128. void Xunji()
  129. {
  130.         switch(P1|0xe0)           //111 00000
  131.         {
  132.                 case 0xe0:                                                                                //111 00000
  133.                 case 0xe4:run(30);break;                        //111 00100
  134.                 case 0xe2:leftrun1();break;                //111 00010
  135.                 case 0xe1:leftrun2();break;                //111 00001
  136.                 case 0xe8:rightrun1();break;        //111 01000
  137.                 case 0xf0:rightrun2();break;        //111 10000
  138.                 case 0xff:stop();break;                                //111 11111
  139.                 default:go();break;
  140. //                delay(500);
  141.         }
  142. }
  143. void R_G_Kaiguan()
  144. {
  145.         if(kg)
  146.                 P0=table[temp1]; //如果開關(guān)未按下,顯示紅色的值
  147.         else
  148.                 P0=table[temp2];        //如果開關(guān)按下,顯示綠色的值

  149. }


  150. /***************主函數(shù)********************/
  151. void main(void)
  152. {
  153.         unsigned long i=0;
  154.         unsigned long j=0;
  155.         delay(6000);//初始化延時(shí)
  156.         temp1=0;//計(jì)數(shù)值初始化
  157.         temp2=0;
  158.         while(!guang);
  159.         tminite();//定時(shí)器、電機(jī)初始化
  160.         while(1)
  161.         {
  162.                 Xunji();
  163.                 R_G_Kaiguan();
  164.                 i++;
  165.                 j++;
  166.                 if(i>8000)
  167.                 {
  168.                         temp1++;
  169.                         i=0;
  170.                 }
  171.                 if(j>9000)
  172.                 {
  173.                         temp2++;
  174.                         j=0;
  175.                 }
  176.                 if(temp1>=7)
  177.                         temp1=7;       
  178.                 if(temp2>=5)
  179.                         temp2=5;       
  180.          }
  181. }
  182.                        

復(fù)制代碼

所有資料51hei提供下載:
car.rar (135.57 KB, 下載次數(shù): 24)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩1
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:385480 發(fā)表于 2018-8-17 13:09 | 只看該作者
大家不要下載了,里面就一個(gè)主函數(shù),其他函數(shù)都沒有,沒有任何參考價(jià)值
回復(fù)

使用道具 舉報(bào)

板凳
ID:498374 發(fā)表于 2019-3-26 00:21 | 只看該作者
故事不公開 發(fā)表于 2018-8-17 13:09
大家不要下載了,里面就一個(gè)主函數(shù),其他函數(shù)都沒有,沒有任何參考價(jià)值

就是說這里沒有其他的.h文件,就算下載了也不能用,是嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:828562 發(fā)表于 2020-10-12 00:47 | 只看該作者
故事不公開 發(fā)表于 2018-8-17 13:09
大家不要下載了,里面就一個(gè)主函數(shù),其他函數(shù)都沒有,沒有任何參考價(jià)值

什么主函數(shù),代碼中的car.h的函數(shù)是什么
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表