亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 單片機(jī)PWM控制舵機(jī)由淺入深各模塊源代碼(單路與8路) [打印本頁(yè)]

作者: 張大哈哈哈    時(shí)間: 2018-8-19 16:00
標(biāo)題: 單片機(jī)PWM控制舵機(jī)由淺入深各模塊源代碼(單路與8路)
此為初學(xué)者掌握51程序控制舵機(jī)的重要程序


控制一個(gè)普通舵機(jī)單片機(jī)源程序如下:
  1. /**********************************************************************

  2. 該實(shí)驗(yàn)例程還是實(shí)現(xiàn)一個(gè)舵機(jī)在兩個(gè)角度之間擺動(dòng)。0度和90度
  3. 但定時(shí)器中斷里的處理與前一節(jié)有所區(qū)別,目的是讓大家更好的
  4. 理解下一節(jié)分時(shí)復(fù)用思想產(chǎn)生多路PWM 。是一個(gè)過(guò)渡實(shí)驗(yàn)例程。
  5. ***********************************************************************/
  6. #include <STC15Fxxxx.H>                  //STC15系列單片機(jī)

  7. void delay(uint16 time);        //軟件延時(shí)函數(shù)
  8. void Timer_init();                        //定時(shí)器初始化函數(shù)
  9. void Timer0(uint32 us);                //定時(shí)器0定時(shí)函數(shù)

  10. uint16 pwm_valu=500;
  11. sbit pwm1=P0^0;                                 //將舵機(jī)插到P0^0口上
  12. void main()
  13. {

  14.         P0M1=0;
  15.         P0M0=0XFF;                                //將P2口設(shè)置成強(qiáng)推免輸出,提高帶負(fù)載能力

  16.         Timer_init();                        //定時(shí)器初始化
  17.         Timer0(31);                                //通過(guò)一個(gè)定時(shí)值進(jìn)入定時(shí)循環(huán)
  18.         while(1)
  19.         {
  20.                 pwm_valu=500;           //脈寬=500us=0.5ms即0度位置
  21.                 delay(1000);
  22.                 pwm_valu=1500;           //脈寬=1500us=1.5ms即90度位置
  23.                 delay(1000);           //舵機(jī)在兩個(gè)角度之間擺動(dòng)
  24.         }
  25. }
  26. void delay(uint16 time)
  27. {
  28.         uint16 i;
  29.         uint16 j;
  30.         for(i=0;i<1000;i++)
  31.         for(j=0;j<time;j++);
  32. }
  33. void Timer_init()
  34. {
  35.         EA=1;
  36.         AUXR|=0xC0;                                //T0,T1工作在1T
  37.         TMOD|= 0x11;                        //T0工作在方式1,16位
  38.                
  39.         ET0 = 1;       
  40. }

  41. void Timer0(uint32 us)                
  42. {       
  43.         uint32 valu;
  44.         valu=0xffff-us*23;                //          

  45.     TH0=valu>>8;          
  46.     TL0=(valu<<8)>>8;
  47.     TR0  = 1;                                //T0開(kāi)始工作
  48. }
  49. void T0zd(void) interrupt 1   
  50. {
  51.                 static uint8 i=1;
  52.                 switch(i)          //   
  53.                 {
  54.                 case 1:
  55.                         {
  56.                                 pwm1=1;
  57.                                 Timer0(pwm_valu);//       
  58.                         }  break;
  59.                 case 2:
  60.                         {
  61.                                  pwm1=0;//        pwm1變低
  62.                                 Timer0(2500-pwm_valu);//       
  63.                         }  break;
  64.                 case 3:
  65.                         {
  66.                                 Timer0(500);//       
  67.                         }  break;
  68.                 case 4:
  69.                         {
  70.                                 Timer0(2500);//       
  71.                         }  break;
  72.                 case 5:
  73.                         {
  74.                                 Timer0(2500);//       
  75.                         }  break;
  76.                 case 6:
  77.                         {
  78.                                 Timer0(2500);//       
  79.                         }  break;
  80.                 case 7:
  81.                         {
  82.                                 Timer0(2500);//       
  83.                         }  break;
  84.                 case 8:
  85.                         {
  86.                                 Timer0(2500);//       
  87.                         }        break;
  88.                 case 9:
  89.                         {
  90.                                 Timer0(2500);//       
  91.                                 i=0;
  92.                         }        break;
  93.                 default:break;
  94.             }
  95.                 i++;
  96. }   
復(fù)制代碼

控制多個(gè)普通舵機(jī)

單片機(jī)源程序如下:
  1. /**********************************************************************
  2. 該實(shí)驗(yàn)例程是實(shí)現(xiàn)8個(gè)舵機(jī)在兩個(gè)角度之間擺動(dòng)。0度和90度
  3. 通過(guò)該例程,讀者要學(xué)會(huì)  分時(shí)復(fù)用定時(shí)器 ,用1個(gè)定時(shí)器來(lái)產(chǎn)生多路PWM的思想。
  4. ***********************************************************************/
  5. #include "STC15Fxxxx.H"                    //STC12C5A系列單片機(jī)

  6. void delay(uint16 time);        //軟件延時(shí)函數(shù)
  7. void Timer_init();                        //定時(shí)器初始化函數(shù)
  8. void Timer0(uint32 us);                //定時(shí)器0定時(shí)函數(shù)



  9. uint16 pos[2][9]={                                                                                                        //上一節(jié)中控制一個(gè)舵機(jī)這里只需要兩個(gè)數(shù)。
  10.                                         {1500,1500,1500,1500,1500,1500,1500,1500,1500},        //此節(jié)擴(kuò)展成8個(gè)舵機(jī),則此處變?yōu)閮蓚(gè)數(shù)組。。
  11.                                         {500,500,500,500,500,500,500,500,500}                        //數(shù)組中的1~8成員代表每一個(gè)舵機(jī)的兩個(gè)位置。
  12.                                  };


  13. uint16 pwm[9]={1500,1500,1500,1500,1500,1500,1500,1500,1500};                //定時(shí)器取定時(shí)值從這里取


  14. sbit pwm16=P5^3;                 
  15. sbit pwm15=P1^5;
  16. sbit pwm14=P1^6;
  17. sbit pwm13=P1^7;
  18. sbit pwm12=P4^3;
  19. sbit pwm11=P3^2;
  20. sbit pwm10=P3^3;
  21. sbit pwm9=P3^4;

  22. sbit pwm8=P0^5;                 
  23. sbit pwm7=P0^6;
  24. sbit pwm6=P0^7;
  25. sbit pwm5=P4^6;
  26. sbit pwm4=P4^1;
  27. sbit pwm3=P4^5;
  28. sbit pwm2=P4^4;
  29. sbit pwm1=P2^7;

  30. /**************************************************************************************************       
  31. 函數(shù)名:main()
  32. 功能:        入口函數(shù)
  33. 作者:        許長(zhǎng)華
  34. 時(shí)間:        2012-3-3
  35. 備注:
  36. /***************************************************************************************************/
  37. void main()
  38. {
  39.         uint8 i=0;

  40.         P0M1=0;                           //設(shè)置P口為強(qiáng)推免輸出模式,下同
  41.         P0M0=0XFF;

  42.         P1M1=0;
  43.         P1M0=0XFF;

  44.         P2M1=0;
  45.         P2M0=0XFF;

  46.         P3M1=0;
  47.         P3M0=0XFF;

  48.         P4M1=0;
  49.         P4M0=0XFF;

  50.         P5M1=0;
  51.         P5M0=0XFF;


  52.         Timer_init();        //定時(shí)器初始化
  53.         Timer0(31);                //通過(guò)一個(gè)定時(shí)值進(jìn)入定時(shí)循環(huán)


  54.         while(1)
  55.         {
  56.                 for(i=1;i<9;i++)                   //pos[0]位置
  57.                         pwm[i]=pos[0][i];
  58.                 delay(1000);

  59.                 for(i=1;i<9;i++)                   // pos[1]位置
  60.                         pwm[i]=pos[1][i];

  61.                 delay(1000);                           //舵機(jī)在兩個(gè)角度之間擺動(dòng)
  62.         }
  63. }
  64. /**************************************************************************************************       
  65. 函數(shù)名:delay(uint16 time)
  66. 功能:        軟件延時(shí)函數(shù)
  67. 參數(shù):        time 定時(shí)值,其大小與延時(shí)長(zhǎng)短成正比
  68. 作者:        許長(zhǎng)華
  69. 時(shí)間:        2012-3-3
  70. 備注:
  71. /***************************************************************************************************/
  72. void delay(uint16 time)
  73. {
  74.         uint16 i;
  75.         uint16 j;
  76.         for(i=0;i<2000;i++)
  77.         for(j=0;j<time;j++);
  78. }
  79. /**************************************************************************************************       
  80. 函數(shù)名:timer_init()
  81. 功能:        定時(shí)器初始化函數(shù)
  82. /***************************************************************************************************/
  83. void Timer_init()
  84. {
  85.         EA=1;                                           //開(kāi)總中斷
  86.         AUXR|=0xC0;                                //T0,T1工作在1T
  87.     TMOD|= 0x11;                        //T0工作在方式1,16位
  88.         ET0 = 1;                                //開(kāi)定時(shí)器0中斷
  89. }
  90. /**************************************************************************************************       
  91. 函數(shù)名:timer0(uint32 us)
  92. 功能:        定時(shí)器0定時(shí)函數(shù)
  93. /***************************************************************************************************/
  94. void Timer0(uint32 us)                        
  95. {       
  96.         uint32 valu;
  97.         valu=us*23;                                        //工作在1T,最大定時(shí)時(shí)間2700us
  98.         valu=valu - 120;
  99.         valu=0xffff-valu;                        //          
  100.        
  101.     TH0=valu>>8;          
  102.     TL0=(valu<<8)>>8;
  103.     TR0  = 1;                                        //T0開(kāi)始工作
  104. }

  105. /**************************************************************************************************       
  106. 函數(shù)名:T0zd(void) interrupt 1
  107. 功能:        定時(shí)器0中斷函數(shù)
  108. 備注:         控制8個(gè)舵機(jī)
  109. /***************************************************************************************************/
  110. void T0zd(void) interrupt 1   
  111. {
  112.                 static uint8 i=1;
  113.                 switch(i)                                  //   
  114.                 {
  115.                 case 1:
  116.                         {
  117.                                 pwm1=1;
  118.                                 Timer0(pwm[1]);        //定時(shí)
  119.                         }  break;
  120.                 case 2:
  121.                         {
  122.                                  pwm1=0;                        //pwm1變低
  123.                                 Timer0(2500-pwm[1]);//        定時(shí)
  124.                         }  break;
  125.                 case 3:
  126.                         {
  127.                                 pwm2=1; //pwm2變高
  128.                                 Timer0(pwm[2]);//        定時(shí)時(shí)常為pwm[2]
  129.                         }  break;
  130.                 case 4:
  131.                         {
  132.                                 pwm2=0; //pwm2變低
  133.                                 Timer0(2500-pwm[2]);//        定時(shí)時(shí)常為pwm[2]
  134.                         }         break;
  135.                 case 5:
  136.                         {
  137.                                 pwm3=1; //pwm3變高
  138.                                 Timer0(pwm[3]);//        定時(shí)時(shí)常為pwm[3]
  139.                         }  break;
  140.                 case 6:
  141.                         {
  142.                                 pwm3=0; //pwm3變低
  143.                                 Timer0(2500-pwm[3]);//        定時(shí)
  144.                         }        break;          
  145.                 case 7:
  146.                         {
  147.                                 pwm4=1; //pwm4變高
  148.                                 Timer0(pwm[4]);//        定時(shí)
  149.                         }        break;          
  150.                 case 8:
  151.                         {
  152.                                 pwm4=0; //pwm4變低
  153.                                 Timer0(2500-pwm[4]);//        定時(shí)
  154.                         }        break;          
  155.                 case 9:
  156.                         {
  157.                                 pwm5=1; //pwm5變高
  158.                                 Timer0(pwm[5]);//        定時(shí)
  159.                         }        break;          
  160.                 case 10:
  161.                         {
  162.                                 pwm5=0; //pwm5變低
  163.                                 Timer0(2500-pwm[5]);//        定時(shí)
  164.                         }        break;          
  165.                 case 11:
  166.                         {
  167.                                 pwm6=1; //pwm6變高
  168.                                 Timer0(pwm[6]);//        定時(shí)
  169.                         }        break;          
  170.                 case 12:
  171.                         {
  172.                                 pwm6=0; //pwm6變低
  173.                                 Timer0(2500-pwm[6]);//        定時(shí)
  174.                         }        break;       

  175.                 case 13:
  176.                         {
  177.                                 pwm7=1; //pwm7變高
  178.                                 Timer0(pwm[7]);//        定時(shí)
  179.                         }        break;          
  180. ……………………

  181. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼


所有資料51hei提供下載:
1.普通PWM舵機(jī)由淺入深各模塊代碼.rar (309.12 KB, 下載次數(shù): 82)



作者: bemc    時(shí)間: 2018-8-19 20:39
不錯(cuò) 有價(jià)值的資料 有時(shí)間好好研究一下
作者: jshyda    時(shí)間: 2018-8-20 04:11
正在學(xué)習(xí)如何控制舵的知識(shí),謝LZ!
作者: bbk215    時(shí)間: 2019-3-1 17:20
不錯(cuò),非常值得學(xué)習(xí)
作者: bbk215    時(shí)間: 2019-3-1 17:21
可以的,值得學(xué)習(xí)的資料
作者: gdatgb    時(shí)間: 2019-3-3 15:04
不錯(cuò),值得學(xué)習(xí).謝樓主!
作者: 不三不四    時(shí)間: 2019-10-15 18:37
可以的

作者: tonggin    時(shí)間: 2019-10-16 09:31
自學(xué)玩舵機(jī)的必要參考資料




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1