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

標題: 51單個舵機精確控制程序 [打印本頁]

作者: 南風知我意@@@    時間: 2020-4-4 12:18
標題: 51單個舵機精確控制程序
舵機控制

  1. #include <12c5a.H>                  //STC12C5A系列單片機
  2. unsigned char count;      //0.5毫秒計數
  3.          //PWM控制
  4. sbit jia =P1^6;           //測試加
  5. sbit jan =P1^5;           //測試減
  6. unsigned char jd;         //角度控制
  7. sbit pwm8=P0^1;
  8. sbit pwm7=P1^1;
  9. sbit pwm6=P2^1;
  10. sbit pwm5=P2^0;
  11. sbit youyan=P3^5;       
  12. sbit zuoyan=P3^7;      
  13. sbit zuojiao=P1^7;
  14. sbit youjiao=P1^2;
  15. sbit zuojiao2=P1^6;
  16. sbit youjiao2=P1^0;
  17. sbit pwm4=P0^4;
  18. sbit pwm3=P1^4;
  19. sbit pwm2=P3^4;       
  20. sbit pwm1=P2^4;
  21. uint16 pwm[9]={1500,1500,1500,1500,1500,1500,1500,1500,1500};                //定時器取定時值從這里取
  22. /**************************************************************************************************       
  23. 函數名:delay(uint16 time)
  24. 功能:        軟件延時函數
  25. 參數:        time 定時值,其大小與延時長短成正比
  26. 備注:
  27. /***************************************************************************************************/
  28. void delay(uint16 time)
  29. {
  30.         uint16 i;
  31.         uint16 j;
  32.         for(i=0;i<1000;i++)
  33.         for(j=0;j<time;j++);
  34. }
  35. /**************************************************************************************************       
  36. 函數名:timer_init()
  37. 功能:        定時器初始化函數
  38. 備注: 1T
  39. /***************************************************************************************************/
  40. void Timer_init()
  41. {
  42.         EA=1;                                           //開總中斷
  43.         AUXR|=0xC0;                                //T0,T1工作在1T
  44.     TMOD|= 0x11;                        //T0工作在方式1,16位
  45.         ET0 = 1;                                //開定時器0中斷
  46. }
  47. /**************************************************************************************************       
  48. 函數名:timer0(uint32 us)
  49. 功能:        定時器0定時函數
  50. 參數:        us,毫秒。  精確定時。
  51. 備注:         晶振12M,工作模式1T
  52. /***************************************************************************************************/
  53. void Timer0(uint32 us)                        
  54. {       
  55.         uint32 valu;
  56.         valu=us*12;                                        //工作在1T,最大定時時間2700us
  57.         valu=valu;
  58.         valu=0xffff-valu;                        //          

  59.     TH0=valu>>8;          
  60.     TL0=(valu<<8)>>8;
  61.     TR0  = 1;                                        //T0開始工作
  62. }
  63. /**************************************************************************************************       
  64. 函數名:T0zd(void) interrupt 1
  65. 功能:        定時器0中斷函數
  66. 備注:         控制8個舵機
  67. /***************************************************************************************************/
  68. void T0zd(void) interrupt 1   
  69. {
  70.                 static uint8 i=1;
  71.                 switch(i)                                  //   
  72.                 {
  73.                 case 1:
  74.                         {
  75.                                 pwm1=1;
  76.                                 Timer0(pwm[1]);        //定時
  77.                         }  break;
  78.                 case 2:
  79.                         {
  80.                                  pwm1=0;                        //pwm1變低
  81.                                 Timer0(2500-pwm[1]);//        定時
  82.                         }  break;
  83.                 case 3:
  84.                         {
  85.                                 pwm2=1; //pwm2變高
  86.                                 Timer0(pwm[2]);//        定時時常為pwm[2]
  87.                         }  break;
  88.                 case 4:
  89.                         {
  90.                                 pwm2=0; //pwm2變低
  91.                                 Timer0(2500-pwm[2]);//        定時時常為pwm[2]
  92.                         }         break;
  93.                 case 5:
  94.                         {
  95.                                 pwm3=1; //pwm3變高
  96.                                 Timer0(pwm[3]);//        定時時常為pwm[3]
  97.                         }  break;
  98.                 case 6:
  99.                         {
  100.                                 pwm3=0; //pwm3變低
  101.                                 Timer0(2500-pwm[3]);//        定時
  102.                         }        break;          
  103.                 case 7:
  104.                         {
  105.                                 pwm4=1; //pwm4變高
  106.                                 Timer0(pwm[4]);//        定時
  107.                         }        break;          
  108.                 case 8:
  109.                         {
  110.                                 pwm4=0; //pwm4變低
  111.                                 Timer0(2500-pwm[4]);//        定時
  112.                         }        break;          
  113.                 case 9:
  114.                         {
  115.                                 pwm5=1; //pwm5變高
  116.                                 Timer0(pwm[5]);//        定時
  117.                         }        break;          
  118.                 case 10:
  119.                         {
  120.                                 pwm5=0; //pwm5變低
  121.                                 Timer0(2500-pwm[5]);//        定時
  122.                         }        break;          
  123.                 case 11:
  124.                         {
  125.                                 pwm6=1; //pwm6變高
  126.                                 Timer0(pwm[6]);//        定時
  127.                         }        break;          
  128.                 case 12:
  129.                         {
  130.                                 pwm6=0; //pwm6變低
  131.                                 Timer0(2500-pwm[6]);//        定時
  132.                         }        break;       

  133.                 case 13:
  134.                         {
  135.                                 pwm7=1; //pwm7變高
  136.                                 Timer0(pwm[7]);//        定時
  137.                         }        break;          
  138.                 case 14:
  139.                         {
  140.                                 pwm7=0; //pwm7變低
  141.                                 Timer0(2500-pwm[7]);//        定時
  142.                         }        break;       

  143.                 case 15:
  144.                         {
  145.                                 pwm8=1; //pwm8變高
  146.                                 Timer0(pwm[8]);//        定時
  147.                         }        break;          
  148.                 case 16:
  149.                         {
  150.                                 pwm8=0; //pwm8變低
  151.                                 Timer0(2500-pwm[8]);//        定時

  152.                                 i=0;
  153.                         }        break;       

  154.                 default:break;
  155.                        
  156.             }
  157.                   
  158.                         i++;
  159. }

  160. void keyscan()              //測試按鍵掃描
  161. {
  162.    if(jia==0)              
  163.   {
  164.               
  165.     if(jia==0)              
  166.      {
  167.       pwm[1]=pwm[1]+3;  

  168. if(pwm[1]>=250)
  169.        pwm[1]=250;        
  170. delay(40);         
  171.                   
  172.             
  173.      }
  174.   }
  175.   if(jan==0)               
  176.   {

  177.     if(jan==0)
  178.      {
  179.        pwm[1]=pwm[1]-3;               
  180.                            
  181.    if(pwm[1]<=20)
  182.        pwm[1]=20;  
  183.          delay(40);       
  184.      }
  185.   }
  186. }

  187. void main()
  188. {
  189.                 P0M1=0;                           //設置P口為強推免輸出模式,下同
  190.         P0M0=0XFF;

  191.         P2M1=0;
  192.         P2M0=0XFF;

  193.        

  194.         P3M1=0;
  195.         P3M0=0XFF;

  196.         P4M1=0;
  197.         P4M0=0XFF;

  198.         P5M1=0;
  199.         P5M0=0XFF;
  200.         P4SW|=0X70;
  201.        
  202.        

  203. Timer_init();
  204. Timer0(32);
  205.         delay(40);
  206. pwm[1]=110;
  207. while(1)
  208. {
  209.   keyscan();               //持續監測按鍵狀態
  210.   
  211. }
  212. }
復制代碼

舵機精確控制.7z

22.05 KB, 下載次數: 22, 下載積分: 黑幣 -5


作者: admin    時間: 2020-4-7 15:54
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 蜜桃在线视频 | 国产99久久久国产精品 | av片毛片 | 亚洲天堂久久 | 亚洲国产欧美国产综合一区 | 午夜精品久久久久久不卡欧美一级 | 中文字幕亚洲精品 | 成人在线一区二区三区 | 中文字幕在线观看第一页 | 国产精品美女久久久 | 精品国产91亚洲一区二区三区www | 正在播放国产精品 | 国产一区二区不卡 | 久久视频精品 | 国产精品久久久乱弄 | 成人福利网| 激情福利视频 | 久久综合99| 国产91黄色 | 久草资源网站 | 91色视频在线观看 | 国产一区二区不卡 | 酒色成人网| 国产福利网站 | 久久在线 | 精品国产视频 | 亚洲精品二区 | 国产精品一区二区三区四区 | 国产精品久久久久免费 | 日韩在线视频免费观看 | 不卡av在线 | 亚洲午夜精品 | 久久久91精品国产一区二区三区 | 欧美电影免费观看高清 | 国产丝袜一区二区三区免费视频 | 国产欧美视频一区二区三区 | 91精品国产91久久综合桃花 | av国产精品| 国产视频一区二区在线观看 | 精品一区二区三区四区五区 | 国产激情亚洲 |