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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4243|回復: 9
打印 上一主題 下一主題
收起左側(cè)

STC單片機關(guān)于舵機pwm控制源程序(單個與多個速度控制都有)

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:670074 發(fā)表于 2019-12-21 20:28 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
具體內(nèi)容見附件


單片機源程序如下:
  1. /*****************************************************************************
  2. ** 文件                        : main.c
  3. ** 作者                        : Zheng23
  4. ** 日期                        :                        
  5. ** 功能                        :   產(chǎn)生8路PWM輸出控制8路舵機,方法:將20毫秒分成8個2500微秒,
  6.                                                 即8個單元,先計算出第一個單元的舵機PWM控制線的脈沖寬度,因
  7.                                                 為控制舵機的脈沖寬度最大為2500微秒,剩余的(20000 - 2500)
  8.                                                 毫秒就是剩下的7個單元時間,第一個單元的舵機PWM控制線全部為
  9.                                                 低電平了,這時就可以安心的處理剩下的7個單元的事情了,同理
  10.                                                 第二個單元也是一樣,這樣循環(huán)下去就可以控制8路PWM輸出了。

  11. /*****************************************************************************/
  12. //#include <STC15.h>
  13. //#include"STC89C5xRC.H"


  14. //一定要用12M的晶振
  15. //一定要用12M的晶振
  16. //一定要用12M的晶振
  17. //一定要用12M的晶振
  18. //一定要用12M的晶振
  19. //一定要用12M的晶振


  20. #include "reg51.h"

  21. #define bool        bit
  22. #define uint8        unsigned char   
  23. #define uint16        unsigned short int
  24. #define uint32        unsigned long

  25. sbit SERVO0=P0^0;                        //控制舵機的PWM輸出口
  26. sbit SERVO1=P0^1;                       
  27. sbit SERVO2=P0^2;               
  28. sbit SERVO3=P0^3;
  29. sbit SERVO4=P0^4;               
  30. sbit SERVO5=P0^5;               
  31. sbit SERVO6=P0^6;                       
  32. sbit SERVO7=P0^7;

  33. sbit LED=P2^7;                //調(diào)試用

  34. uint16 ServoPwmDuty[8] = {1500,1500,1500,1500,1500,1500,1500,1500};        //PWM脈沖寬度
  35. uint16 ServoPwmDutySet[8] = {1500,1500,1500,1500,1500,1500,1500,1500};        //PWM脈沖寬度
  36. double ServoPwmDutyInc[8];                //為了速度控制,當PWM脈寬發(fā)生變化時,每2.5ms或20ms遞增的PWM脈寬

  37. bool Flag_20ms = 0;                //20毫秒標識位,在定時中斷里面置位
  38. bool Flag_2_5ms = 0;        //2.5毫秒標識位,在定時中斷里面置位
  39. bool ServoPwmDutyHaveChange = 0;        //脈寬有變化標志位
  40. uint16 ServoTime = 2000;                        //舵機從當前角度運動到指定角度的時間,也就是控制速度
  41. /***********************************************************
  42. * 名    稱: DelayMs(uint16 ms)
  43. * 功    能: 延時ms毫秒
  44. * 入口參數(shù): ms        毫秒
  45. * 出口參數(shù): 無
  46. * 說    明:                                          
  47. /**********************************************************/
  48. void DelayMs(uint16 ms)
  49. {
  50.         uint16 i,j;
  51.         for(i=0;i<800;i++)                //89單片機用85,12系列單片機用800
  52.                 for(j=0;j<ms;j++);
  53. }

  54. /***********************************************************
  55. * 名    稱:InitTimer0()
  56. * 功    能:時鐘0初始化
  57. * 入口參數(shù):無
  58. * 出口參數(shù):無
  59. * 說    明:12M晶振,12分頻,所以計數(shù)器每遞增一個數(shù)就是1微秒,完全滿足舵機控制的精度要求
  60.                         因為定時器是TH0,TL0都要全部計數(shù)到0xFF后在計1個數(shù)就會產(chǎn)生中斷,所以要想產(chǎn)生
  61.                         x毫秒的中斷,那么TH0,TL0就應該賦值(0xFFFF-x)        從這個值開始計數(shù)產(chǎn)生定時中斷                                         
  62. /**********************************************************/
  63. void InitTimer0(void)
  64. {
  65. //        AUXR &= 0x7F;                //定時器時鐘12T模式
  66. //        AUXR |= 0x00;                //T0,T1工作在12T
  67.         TMOD &= 0xF0;                //設置定時器模式
  68.         TMOD |= 0x01;                //設置定時器模式
  69.         TL0 = 0x00;                        //設置定時初值
  70.         TH0 = 0x00;                        //設置定時初值
  71.         TF0 = 0;                        //清除TF0標志
  72.         TR0 = 1;                        //定時器0開始計時
  73.         ET0 = 1;                        //開定時器0中斷
  74. }

  75. /***********************************************************
  76. * 名    稱:Timer0Value(uint16 pwm)  
  77. * 功    能:給定時器0計數(shù)器賦值產(chǎn)生定時中斷
  78. * 入口參數(shù):pwm                控制舵機的PWM脈沖寬度值(范圍:500~2500)
  79. * 出口參數(shù):無
  80. * 說    明:12M晶振,12分頻,所以計數(shù)器每遞增一個數(shù)就是1微秒,完全滿足舵機控制的精度要求
  81.                         因為定時器是TH0,TL0都要全部計數(shù)到0xFF后在計1個數(shù)就會產(chǎn)生中斷,所以要想產(chǎn)生
  82.                         pwm毫秒的中斷,那么TH0,TL0就應該賦值(0xFFFF-pwm)        從這個值開始計數(shù)產(chǎn)生定時中斷                                          
  83. /**********************************************************/
  84. void Timer0Value(uint16 pwm)
  85. {
  86.         uint16 value;
  87.         value=0xffff-pwm;               
  88.         TR0 = 0;
  89.         TL0=value;                        //16位數(shù)據(jù)給8位數(shù)據(jù)賦值默認將16位數(shù)據(jù)的低八位直接賦給八位數(shù)據(jù)
  90.     TH0=value>>8;                //將16位數(shù)據(jù)右移8位,也就是將高8位移到低八位,再賦值給8位數(shù)據(jù)       
  91.         TR0 = 1;
  92. }

  93. /***********************************************************
  94. * 名    稱: ServoPwmDutyCompare()
  95. * 功    能: 脈寬變化比較及速度控制
  96. * 入口參數(shù): 無
  97. * 出口參數(shù): 無
  98. * 說    明:                                          
  99. /**********************************************************/
  100. void ServoPwmDutyCompare()
  101. {
  102.         uint8 i;
  103.        
  104.         static uint16 ServoPwmDutyIncTimes;        //需要遞增的次數(shù)
  105.         static bool ServoRunning = 0;        //舵機正在以指定速度運動到指定的脈寬對應的位置
  106.         if(ServoRunning == 0 && ServoPwmDutyHaveChange)//停止運動并且脈寬發(fā)生變化時才進行計算
  107.         {
  108.                 ServoPwmDutyHaveChange = 0;
  109. //                ServoPwmDutyIncTimes = ServoTime*2/5;        //ServoTime/(20/8)        //當每2.5ms調(diào)用一次ServoPwmDutyCompare()函數(shù)時用此句
  110.                 ServoPwmDutyIncTimes = ServoTime/20;        //當每20ms調(diào)用一次ServoPwmDutyCompare()函數(shù)時用此句
  111.                 for(i=0;i<8;i++)
  112.                 {
  113.                         //if(ServoPwmDuty[i] != ServoPwmDutySet[i])
  114.                         {
  115.                                 if(ServoPwmDutySet[i] > ServoPwmDuty[i])
  116.                                 {
  117.                                         ServoPwmDutyInc[i] = ServoPwmDutySet[i] - ServoPwmDuty[i];
  118.                                         ServoPwmDutyInc[i] = -ServoPwmDutyInc[i];
  119.                                 }
  120.                                 else
  121.                                 {
  122.                                         ServoPwmDutyInc[i] = ServoPwmDuty[i] - ServoPwmDutySet[i];
  123.                                        
  124.                                 }
  125.                                 ServoPwmDutyInc[i] /= ServoPwmDutyIncTimes;//每次遞增的脈寬
  126.                         }
  127.                 }
  128.                 ServoRunning = 1;        //舵機開始動作
  129.         }
  130.         if(ServoRunning)
  131.         {
  132.                 ServoPwmDutyIncTimes--;
  133.                 for(i=0;i<8;i++)
  134.                 {
  135.                         if(ServoPwmDutyIncTimes == 0)
  136.                         {                //最后一次遞增就直接將設定值賦給當前值
  137.                                 ServoPwmDuty[i] = ServoPwmDutySet[i];
  138.                                 ServoRunning = 0;        //到達設定位置,舵機停止運動
  139.                         }
  140.                         else
  141.                         {
  142.                                 ServoPwmDuty[i] = ServoPwmDutySet[i] +
  143.                                         (signed short int)(ServoPwmDutyInc[i] * ServoPwmDutyIncTimes);
  144.                         }
  145.                 }
  146.                
  147.         }
  148. }

  149. /***********************************************************
  150. * 名    稱: main()
  151. * 功    能: 入口函數(shù)
  152. * 入口參數(shù): 無
  153. * 出口參數(shù): 無
  154. * 說    明:                                          
  155. /**********************************************************/
  156. void main(void)
  157. {
  158.         uint8 i;
  159.         uint16 Time;
  160.         InitTimer0();        //定時器0初始化
  161.         EA = 1;                        //開總中斷
  162.         while(1)                //大循環(huán)
  163.         {       
  164.                 if(Flag_20ms)        // Flag_2_5ms        2.5毫秒調(diào)用一次ServoPwmDutyCompare()或20毫秒調(diào)用一次        
  165.                 {       
  166.                         Flag_20ms = 0;
  167.                         Flag_2_5ms = 0;
  168.                         Time++;
  169.                         ServoPwmDutyCompare();
  170.                 }
  171.                 if(Time > 110)
  172.                 {
  173.                         Time = 0;
  174.                         LED = ~LED;
  175.                         if(ServoPwmDutySet[0] == 500)
  176.                         {
  177.                                 ServoPwmDutySet[0] = 2500;                        //脈沖寬度在2500微秒,對應90°
  178.                                 for(i = 1;i<8;i++)
  179.                                         ServoPwmDutySet[i] = 500;                //脈沖寬度在500微秒,對應-90°
  180.                         }
  181.                         else
  182.                         {
  183.                                 ServoPwmDutySet[0] = 500;                        //脈沖寬度在500微秒,對應-90°
  184.                                 for(i = 1;i<8;i++)
  185.                                         ServoPwmDutySet[i] = 1500;                //脈沖寬度在1500微秒,對應0°
  186.                         }
  187.                         ServoPwmDutyHaveChange = 1;
  188.                 }
  189.         }
  190. }

  191. /***********************************************************
  192. * 名    稱: Timer0_isr() interrupt 1 using 1
  193. * 功    能: 時鐘0中斷處理
  194. * 入口參數(shù): 無
  195. * 出口參數(shù): 無
  196. * 說    明:                                          
  197. /**********************************************************/
  198. void Timer0_isr(void) interrupt 1 using 1
  199. {
  200.         static uint16 i = 1;        //靜態(tài)變量:每次調(diào)用函數(shù)時保持上一次所賦的值,
  201.                                                         //跟全局變量類似,不同是它只能用于此函數(shù)內(nèi)部
  202.         switch(i)
  203.         {
  204.                 case 1:
  205.                         SERVO0 = 1;        //PWM控制腳高電平
  206.                         //給定時器0賦值,計數(shù)Pwm0Duty個脈沖后產(chǎn)生中斷,下次中斷會進入下一個case語句
  207.                         Timer0Value(ServoPwmDuty[0]);
  208.                         Flag_20ms = 1;
  209.                         Flag_2_5ms = 1;
  210.                         break;
  211.                 case 2:
  212.                         SERVO0 = 0;        //PWM控制腳低電平
  213.                         //此計數(shù)器賦值產(chǎn)生的中斷表示下一個單元要進行任務的開始
  214.                         Timer0Value(2500-ServoPwmDuty[0]);       
  215.                         break;
  216.                 case 3:
  217.                         SERVO1 = 1;       
  218.                         Timer0Value(ServoPwmDuty[1]);
  219.                         Flag_2_5ms = 1;
  220.                         break;
  221.                 case 4:
  222.                         SERVO1 = 0;        //PWM控制腳低電平
  223.                         Timer0Value(2500-ServoPwmDuty[1]);       
  224.                         break;
  225.                 case 5:
  226.                         SERVO2 = 1;       
  227.                         Timer0Value(ServoPwmDuty[2]);
  228.                         Flag_2_5ms = 1;
  229.                         break;
  230.                 case 6:
  231.                         SERVO2 = 0;        //PWM控制腳低電平
  232.                         Timer0Value(2500-ServoPwmDuty[2]);       
  233.                         break;       
  234.                 case 7:
  235.                         SERVO3 = 1;       
  236.                         Timer0Value(ServoPwmDuty[3]);
  237.                         Flag_2_5ms = 1;
  238.                         break;
  239.                 case 8:
  240.                         SERVO3 = 0;        //PWM控制腳低電平
  241.                         Timer0Value(2500-ServoPwmDuty[3]);       
  242.                         break;       
  243.                 case 9:
  244.                         SERVO4 = 1;       
  245.                         Timer0Value(ServoPwmDuty[4]);
  246.                         Flag_2_5ms = 1;
  247.                         break;
  248.                 case 10:
  249.                         SERVO4 = 0;        //PWM控制腳低電平
  250.                         Timer0Value(2500-ServoPwmDuty[4]);       
  251.                         break;       
  252.                 case 11:
  253.                         SERVO5 = 1;       
  254.                         Timer0Value(ServoPwmDuty[5]);
  255.                         Flag_2_5ms = 1;
  256.                         break;
  257.                 case 12:
  258.                         SERVO5 = 0;        //PWM控制腳低電平
  259.                         Timer0Value(2500-ServoPwmDuty[5]);       
  260.                         break;
  261.                 case 13:
  262.                         SERVO6 = 1;       
  263.                         Timer0Value(ServoPwmDuty[6]);
  264.                         Flag_2_5ms = 1;
  265.                         break;
  266.                 case 14:
  267.                         SERVO6 = 0;        //PWM控制腳低電平
  268.                         Timer0Value(2500-ServoPwmDuty[6]);       
  269.                         break;
  270.                 case 15:
  271.                         SERVO7 = 1;       
  272.                         Timer0Value(ServoPwmDuty[7]);
  273.                         Flag_2_5ms = 1;
  274.                         break;
  275.                 case 16:
  276.                         SERVO7 = 0;        //PWM控制腳低電平
  277.                         Timer0Value(2500-ServoPwmDuty[7]);
  278.                         i = 0;       
  279.                         break;                                 
  280.         }
  281.         i++;
  282. }
復制代碼
  1. /*****************************************************************************
  2. ** 文件                        : main.c
  3. ** 作者                        : Zheng23
  4. ** 日期                        :                        
  5. ** 功能                        :
  6. /*****************************************************************************/
  7. //#include <STC15.h>
  8. //#include"STC89C5xRC.H"


  9. //一定要用12M的晶振
  10. //一定要用12M的晶振
  11. //一定要用12M的晶振
  12. //一定要用12M的晶振
  13. //一定要用12M的晶振
  14. //一定要用12M的晶振


  15. #include "reg51.h"

  16. #define bool        bit
  17. #define uint8        unsigned char   
  18. #define uint16        unsigned short int
  19. #define uint32        unsigned long

  20. sbit SERVO0=P0^0;                        //控制舵機的PWM輸出口

  21. sbit LED=P2^7;                //調(diào)試用

  22. uint16 ServoPwmDuty=1500;        //PWM脈沖寬度
  23. uint16 ServoPwmDutySet=1500;
  24. double ServoPwmDutyInc;

  25. bool Flag_20ms = 0;        //20毫秒標識位,在定時中斷里面置位
  26. bool ServoPwmDutyHaveChange = 0;        //脈寬有變化標志位

  27. uint16 ServoTime = 2000;
  28. /***********************************************************
  29. * 名    稱: DelayMs(uint16 ms)
  30. * 功    能: 延時ms毫秒
  31. * 入口參數(shù): ms        毫秒
  32. * 出口參數(shù): 無
  33. * 說    明:                                          
  34. /**********************************************************/
  35. void DelayMs(uint16 ms)
  36. {
  37.         uint16 i,j;
  38.         for(i=0;i<85;i++)        //89單片機用85,12系列單片機用800
  39.                 for(j=0;j<ms;j++);
  40. }
  41. /***********************************************************
  42. * 名    稱:InitTimer0()
  43. * 功    能:時鐘0初始化
  44. * 入口參數(shù):無
  45. * 出口參數(shù):無
  46. * 說    明:12M晶振,12分頻,所以計數(shù)器每遞增一個數(shù)就是1微秒,完全滿足舵機控制的精度要求
  47.                         因為定時器是TH0,TL0都要全部計數(shù)到0xFF后在計1個數(shù)就會產(chǎn)生中斷,所以要想產(chǎn)生
  48.                         x毫秒的中斷,那么TH0,TL0就應該賦值(0xFFFF-x)        從這個值開始計數(shù)產(chǎn)生定時中斷                                         
  49. /**********************************************************/
  50. void InitTimer0(void)
  51. {
  52. //        AUXR &= 0x7F;                //定時器時鐘12T模式
  53. //        AUXR |= 0x00;                //T0,T1工作在12T
  54.         TMOD &= 0xF0;                //設置定時器模式
  55.         TMOD |= 0x01;                //設置定時器模式
  56.         TL0 = 0x00;                        //設置定時初值
  57.         TH0 = 0x00;                        //設置定時初值
  58.         TF0 = 0;                        //清除TF0標志
  59.         TR0 = 1;                        //定時器0開始計時
  60.         ET0 = 1;                        //開定時器0中斷
  61. }
  62. /***********************************************************
  63. * 名    稱:Timer0Value(uint16 pwm)  
  64. * 功    能:給定時器0計數(shù)器賦值產(chǎn)生定時中斷
  65. * 入口參數(shù):pwm                控制舵機的PWM脈沖寬度值(范圍:500~2500)
  66. * 出口參數(shù):無
  67. * 說    明:12M晶振,12分頻,所以計數(shù)器每遞增一個數(shù)就是1微秒,完全滿足舵機控制的精度要求
  68.                         因為定時器是TH0,TL0都要全部計數(shù)到0xFF后在計1個數(shù)就會產(chǎn)生中斷,所以要想產(chǎn)生
  69.                         pwm毫秒的中斷,那么TH0,TL0就應該賦值(0xFFFF-pwm)        從這個值開始計數(shù)產(chǎn)生定時中斷                                          
  70. /**********************************************************/
  71. void Timer0Value(uint16 pwm)
  72. {
  73.         uint16 value;
  74.         value=0xffff-pwm;
  75.         TR0 = 0;
  76.         TL0=value;                        //16位數(shù)據(jù)給8位數(shù)據(jù)賦值默認將16位數(shù)據(jù)的低八位直接賦給八位數(shù)據(jù)
  77.     TH0=value>>8;                //將16位數(shù)據(jù)右移8位,也就是將高8位移到低八位,再賦值給8位數(shù)據(jù)       
  78.         TR0 = 1;
  79. }
  80. /***********************************************************
  81. * 名    稱: ServoPwmDutyCompare()
  82. * 功    能: 脈寬變化比較及速度控制
  83. * 入口參數(shù): 無
  84. * 出口參數(shù): 無
  85. * 說    明:                                          
  86. /**********************************************************/
  87. void ServoPwmDutyCompare()
  88. {

  89.         static uint16 ServoPwmDutyIncTimes;        //需要遞增的次數(shù)
  90.         static bool ServoRunning = 0;        //舵機正在以指定速度運動到指定的脈寬對應的位置
  91.         if(ServoRunning == 0 && ServoPwmDutyHaveChange)//停止運動并且脈寬發(fā)生變化時才進行計算
  92.         {
  93.                 ServoPwmDutyHaveChange = 0;
  94.                 ServoPwmDutyIncTimes = ServoTime/20;       
  95.                 if(ServoPwmDutySet > ServoPwmDuty)
  96.                 {
  97.                         ServoPwmDutyInc = ServoPwmDutySet - ServoPwmDuty;
  98.                         ServoPwmDutyInc = -ServoPwmDutyInc;
  99.                 }
  100.                 else
  101.                 {
  102.                         ServoPwmDutyInc = ServoPwmDuty - ServoPwmDutySet;
  103.                        
  104.                 }
  105.                 ServoPwmDutyInc /= ServoPwmDutyIncTimes;//每次遞增的脈寬
  106.                 ServoRunning = 1;        //舵機開始動作
  107.         }
  108.         if(ServoRunning)
  109.         {
  110.                 ServoPwmDutyIncTimes--;
  111.                 if(ServoPwmDutyIncTimes == 0)
  112.                 {                //最后一次遞增就直接將設定值賦給當前值
  113.                         ServoPwmDuty = ServoPwmDutySet;
  114.                         ServoRunning = 0;        //到達設定位置,舵機停止運動
  115.                 }
  116.                 else
  117.                 {
  118.                         ServoPwmDuty = ServoPwmDutySet +
  119.                                 (signed short int)(ServoPwmDutyInc * ServoPwmDutyIncTimes);
  120.                 }
  121.         }
  122. }
  123. /***********************************************************
  124. * 名    稱: main()
  125. * 功    能: 入口函數(shù)
  126. * 入口參數(shù): 無
  127. * 出口參數(shù): 無
  128. * 說    明:                                          
  129. /**********************************************************/
  130. void main(void)
  131. {
  132.         uint16 Time;
  133.         InitTimer0();        //定時器0初始化
  134.         EA = 1;                        //開總中斷
  135.         while(1)                //大循環(huán)
  136.         {       
  137.                 if(Flag_20ms)
  138.                 {
  139.                         Time++;
  140.                         Flag_20ms = 0;
  141.                         ServoPwmDutyCompare();
  142.                 }
  143.                 if(Time > 110)
  144.                 {
  145.                         Time = 0;
  146.                         LED = ~LED;
  147.                         if(ServoPwmDutySet == 500)
  148.                         {
  149.                                 ServoPwmDutySet = 2500;                        //脈沖寬度在2500微秒,對應90°
  150.                         }
  151.                         else
  152.                         {
  153.                                 ServoPwmDutySet = 500;                        //脈沖寬度在500微秒,對應-90°
  154.                         }
  155.                         ServoPwmDutyHaveChange = 1;
  156.                 }
  157.         }
  158. }

  159. /***********************************************************
  160. * 名    稱: Timer0_isr() interrupt 1 using 1
  161. * 功    能: 時鐘0中斷處理
  162. * 入口參數(shù): 無
  163. * 出口參數(shù): 無
  164. * 說    明:                                          
  165. /**********************************************************/
  166. void Timer0_isr(void) interrupt 1 using 1
  167. {
  168.         static uint16 i = 1;        //靜態(tài)變量:每次調(diào)用函數(shù)時保持上一次所賦的值,
  169.                                                         //跟全局變量類似,不同是它只能用于此函數(shù)內(nèi)部
  170.         switch(i)
  171.         {
  172.                 case 1:
  173.                         SERVO0 = 1;        //PWM控制腳高電平
  174.                         //給定時器0賦值,計數(shù)Pwm0Duty個脈沖后產(chǎn)生中斷,下次中斷會進入下一個case語句
  175.                         Timer0Value(ServoPwmDuty);
  176.                         Flag_20ms = 1;       
  177.                         break;
  178.                 case 2:
  179.                         SERVO0 = 0;        //PWM控制腳低電平
  180.                         //高脈沖結(jié)束后剩下的時間(20000-Pwm0Duty)全是低電平了,Pwm0Duty + (20000-Pwm0Duty) = 20000個脈沖正好為一個周期20毫秒
  181.                         Timer0Value(20000-ServoPwmDuty);
  182.                         i = 0;       
  183.                         break;         
  184.         }
  185.         i++;
  186. }
復制代碼


所有資料51hei提供下載:
STC單片機舵機PWM控制教程.zip (284.19 KB, 下載次數(shù): 113)


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

使用道具 舉報

沙發(fā)
ID:639290 發(fā)表于 2019-12-21 22:05 | 只看該作者
求詳細控制多舵機程序
回復

使用道具 舉報

板凳
ID:225956 發(fā)表于 2020-2-24 15:47 | 只看該作者
看看,多謝分享!!!!
回復

使用道具 舉報

地板
ID:225956 發(fā)表于 2020-2-24 15:48 | 只看該作者
多謝分享!!!!!!!!!!!
回復

使用道具 舉報

5#
ID:282869 發(fā)表于 2020-2-26 19:28 | 只看該作者
謝謝大大無私分享.....
回復

使用道具 舉報

6#
ID:399179 發(fā)表于 2020-2-27 07:44 來自手機 | 只看該作者
正在學習,謝謝樓主無私奉獻!
回復

使用道具 舉報

7#
ID:689120 發(fā)表于 2020-2-27 10:54 | 只看該作者
要是能用在機器狗上面多好啊!謝謝樓主分享。
回復

使用道具 舉報

8#
ID:639290 發(fā)表于 2020-3-8 08:13 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

9#
ID:165117 發(fā)表于 2020-6-3 16:21 | 只看該作者
看看,多謝分享!!!
回復

使用道具 舉報

10#
ID:105698 發(fā)表于 2020-6-5 15:33 | 只看該作者
學習中,感謝樓主無私奉獻!
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产激情精品一区二区三区 | 久久久久久av | 99精品国产一区二区三区 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | caoporn国产精品免费公开 | 浮生影院免费观看中文版 | 日韩中文字幕 | 成人动漫视频网站 | 久久99国产精品 | 亚洲精品久久久久久久久久久 | 久久久久久中文字幕 | 国产成人精品久久久 | 一级片网站视频 | 国内av在线| 亚洲电影一区二区三区 | av在线免费观看网站 | 久久99精品久久久久子伦 | 午夜资源 | 在线观看亚 | 欧美国产日韩在线 | 亚洲精品在线免费播放 | 国产精品视频在线播放 | 亚洲欧美一区二区三区视频 | 黄视频免费观看 | www日韩| 老司机午夜性大片 | 美女爽到呻吟久久久久 | 国产一区二区三区色淫影院 | 国产精品久久久久久久久免费 | 成人免费一级视频 | 精品国产乱码久久久久久图片 | 91精品国产91久久久久游泳池 | 欧美日韩专区 | 在线观看免费av片 | 亚洲成人久久久 | 久久毛片网站 | 欧美精品在线免费观看 | 精品久久久久久红码专区 | 国产精品一区二区欧美 | www.99热这里只有精品 | 请别相信他免费喜剧电影在线观看 |