欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3547|回復: 2
打印 上一主題 下一主題
收起左側

51單片機超高精度6路舵機控制源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:302943 發表于 2018-4-6 22:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
51控制多路舵機

單片機源程序如下:
  1. #include <reg52.h>  //包含單片機寄存器的頭文件
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. P0M1=0X00;
  5. P0M0=0XFF;//設置P0 為強推挽輸出

  6. sbit servo0=P0^0;
  7. sbit servo1=P0^1;
  8. sbit servo2=P0^2;
  9. sbit servo3=P0^3;
  10. sbit servo4=P0^4;
  11. sbit servo5=P0^5;
  12. sbit servo6=P0^6;
  13. sbit servo7=P0^7;

  14. uchar serVal[2];
  15. uint pwm[]={1382,1382,1382,1382,1382,1382,1382,1382}; //初始90度,(實際是1382.4,取整得1382)
  16. uchar pwm_flag=0;
  17. uint code ms0_5Con=461; //0.5ms計數 (實際是460.8,取整得461)
  18. uint code ms2_5Con=2304; //2.5ms計數

  19. /********************************************************************
  20. * 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中斷
  21. ***********************************************************************/
  22. void Com_Init()
  23. {
  24. TMOD |= 0x20;   //用定時器設置串口波特率
  25. TH1=0xFD;   //256-11059200/(32*12*9600)=253 (FD)
  26. TL1=0xFD;//同上
  27. TR1=1;//定時器1開關打開  
  28. REN=1;          //開啟允許串行接收位
  29. SM0=0;//串口方式,8位數據
  30. SM1=1;//同上
  31. EA=1;           //開啟總中斷
  32. ES=1;  //串行口中斷允許位
  33. }
  34. /********************************************************************
  35. * 功能 : 舵機PWM中斷初始化
  36. ***********************************************************************/
  37. void Timer0Init()
  38. {
  39. //0度=0.5ms, 45度=1ms, 90度=1.5ms, 135度=2ms, 180度=2.5ms
  40. //2.5 ms初始值 F700, (12n/11059200=2.5/1000, n=2304, X=65536-2304=63232 > F700)  
  41. TMOD |= 0x01;  //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
  42. TH0=-ms2_5Con>>8;      //給定初值,17ms中斷
  43. TL0=-ms2_5Con;
  44. EA=1;            //總中斷打開
  45. ET0=1;           //定時器0中斷打開
  46. TR0=1;           //定時器0開關打開                                   
  47. }

  48. /********************************************************************
  49. * 功能 : 舵機PWM中斷, //舵機控制函數 周期為20ms 一個循環20MS  = 8*2.5ms
  50. ***********************************************************************/
  51. void SteeringGear() interrupt 1
  52. {
  53.     switch(pwm_flag)
  54.     {
  55.         case 1:  servo0=1; TH0=-pwm[0]>>8; TL0=-pwm[0]; break;
  56.         case 2:  servo0=0; TH0=-(ms2_5Con-pwm[0])>>8; TL0=-(ms2_5Con-pwm[0]); break;
  57. case 3:  servo1=1; TH0=-pwm[1]>>8; TL0=-pwm[1]; break;
  58.         case 4:  servo1=0; TH0=-(ms2_5Con-pwm[1])>>8; TL0=-(ms2_5Con-pwm[1]); break;   
  59. case 5:  servo2=1; TH0=-pwm[2]>>8; TL0=-pwm[2]; break;
  60.         case 6:  servo2=0; TH0=-(ms2_5Con-pwm[2])>>8; TL0=-(ms2_5Con-pwm[2]); break;
  61. case 7:  servo3=1; TH0=-pwm[3]>>8; TL0=-pwm[3]; break;
  62.         case 8:  servo3=0; TH0=-(ms2_5Con-pwm[3])>>8; TL0=-(ms2_5Con-pwm[3]); break;
  63. case 9:  servo4=1; TH0=-pwm[4]>>8; TL0=-pwm[4]; break;
  64.         case 10: servo4=0; TH0=-(ms2_5Con-pwm[4])>>8; TL0=-(ms2_5Con-pwm[4]); break;
  65.         case 11: servo5=1; TH0=-pwm[5]>>8; TL0=-pwm[5]; break;
  66.         case 12: servo5=0; TH0=-(ms2_5Con-pwm[5])>>8; TL0=-(ms2_5Con-pwm[5]); break;
  67. case 13: servo6=1;TH0=-pwm[6]>>8; TL0=-pwm[6]; break;                     
  68.         case 14: servo6=0;TH0=-(ms2_5Con-pwm[6])>>8; TL0=-(ms2_5Con-pwm[6]); break;  
  69.         case 15: servo7=1;TH0=-pwm[7]>>8;  TL0=-pwm[7]; break;      
  70.         case 16: servo7=0;TH0=-(ms2_5Con-pwm[7])>>8; TL0=-(ms2_5Con-pwm[7]); break;
  71. default: TH0=0xff; TL0=0x80; pwm_flag=0;         
  72.   }
  73.     pwm_flag++;
  74. }

  75.   void SetSteeringGear(uchar i, uchar val)
  76. {
  77. uint a = (val+46)*10;
  78.     if(a<ms0_5Con)
  79. a=ms0_5Con;
  80. if(a>ms2_5Con)
  81. a=ms2_5Con;
  82. pwm[i]=a;
  83. serVal[0]=255; //清除緩存
  84. }

  85.   void SteeringGearUp(uchar i)
  86. {
  87.     if(pwm[i]>ms0_5Con)
  88. pwm[i]=pwm[i]-10;
  89. }

  90.   void SteeringGearDown(uchar i)
  91. {
  92.     if(pwm[i]<ms2_5Con)
  93. pwm[i]=pwm[i]+10;
  94. }

  95. /********************************************************************
  96. * 功能 : 串口中斷接收數據
  97. ***********************************************************************/
  98. void ser() interrupt 4
  99. {
  100. serVal[0]=serVal[1];
  101. serVal[1]=SBUF;
  102. RI=0;//串口中斷清0
  103. }

  104. /*********************************************************************************
  105. ** 函數功能 : 主函數
  106. *********************************************************************************/
  107. void main()
  108. {
  109. bit started=0; //路由是否已經啟動完畢
  110.     Com_Init();//串口初始化
  111.     Timer0Init();//舵機初始化

  112. while(1)
  113. {
  114. if(serVal[0]=='w' && serVal[1]=='d'){
  115. started=1; //路由啟動最后會出現:ar71xx-wdt,由此判斷路由已經啟動
  116. }

  117. if(started)
  118. {
  119. if(serVal[0]==0){
  120. switch(serVal[1])
  121. {
  122. case 'A': SteeringGearUp(0); break;
  123. case 'B': SteeringGearDown(0); break;
  124. case 'C': SteeringGearUp(1); break;
  125. case 'D': SteeringGearDown(1); break;
  126. case 'E': SteeringGearUp(2); break;
  127. case 'F': SteeringGearDown(2); break;
  128. case 'G': SteeringGearUp(3); break;
  129. case 'H': SteeringGearDown(3); break;
  130. case 'I': SteeringGearUp(4); break;
  131. case 'J': SteeringGearDown(4); break;
  132. case 'K': SteeringGearUp(5); break;
  133. case 'L': SteeringGearDown(5); break;
  134. default:break;
  135. }
  136. serVal[0]=255; //清除緩存
  137. }else if(serVal[0]==1){
  138. SetSteeringGear(0,serVal[1]);
  139. }else if(serVal[0]==2){
  140. SetSteeringGear(1,serVal[1]);
  141. }else if(serVal[0]==3){
  142. SetSteeringGear(2,serVal[1]);
  143. }else if(serVal[0]==4){
  144. SetSteeringGear(3,serVal[1]);
  145. }else if(serVal[0]==5){
  146. SetSteeringGear(4,serVal[1]);
  147. }else if(serVal[0]==6){
  148. SetSteeringGear(5,serVal[1]);
  149. }
  150. }
  151. }
  152. }
復制代碼

所有資料51hei提供下載:
51單片機超高精度6路舵機控制程序-087b81f04afe04a1b071de51.doc (41 KB, 下載次數: 53)


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

使用道具 舉報

沙發
ID:220936 發表于 2018-4-8 14:05
51單片機超高精度6路舵機控制程序-087b81f04afe04a1b071de51.doc資源有問題,不能下載

板凳
ID:220936 發表于 2018-4-8 14:09 | 只看該作者
51單片機超高精度6路舵機控制程序-087b81f04afe04a1b071de51.doc資源有問題,不能下載
回復

使用道具 舉報

地板
ID:220936 發表于 2019-5-22 13:39 | 只看該作者
這個程序能用嗎,不會有問題吧
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表