找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4736|回复: 1
打印 上一主题 下一主题
收起左侧

舵机51单片机控制转向源代码 智能小车循迹(舵机版)

[复制链接]
跳转到指定楼层
楼主
ID:194920 发表于 2017-4-30 09:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
舵机控制实例


  1. #include<reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. void scan();
  6. void init_time0();
  7. void Direction(uchar jd);
  8. void DELAY(uint xms);
  9. void pwm_ENA(uchar k);
  10. sbit l_1=P1^0;
  11. sbit l_2=P1^1;
  12. sbit l_3=P1^2;
  13. sbit cen=P1^3;
  14. sbit r_1=P1^6;
  15. sbit r_2=P1^5;
  16. sbit r_3=P1^4;
  17. sbit duoji=P2^7;
  18. sbit pwm1=P2^0;
  19. sbit pwm2=P2^1;
  20. uchar count,cycle,jd;
  21. uchar flag=0;
  22. void main()
  23. {
  24. DELAY(3000);
  25. P1=0x00;
  26. cycle=0;
  27. count=0;
  28. jd=12;
  29. init_time0();
  30. while(1)
  31. {
  32. scan();
  33. }
  34. }
  35. void scan()
  36. {
  37. if(cen==0)
  38. {
  39. //中
  40. flag=0;
  41. }
  42. else if(r_1==0)
  43. //右 1

  44.  

  45. {
  46. }
  47. flag=1;
  48. else if(r_2==0)
  49. //右 2
  50. {
  51. flag=2;
  52. }
  53. else if(r_3==0)
  54. //右 3 P14
  55. {
  56. flag=3;
  57. }
  58. else if(l_1==0)
  59. //左 1
  60. {
  61. flag=4;
  62. }
  63. else if(l_2==0)
  64. //左 2
  65. P11
  66. {
  67. flag=5;
  68. }
  69. {
  70. else if(l_3==0)
  71. flag=6;
  72. //左 3 P12
  73. }
  74. switch(flag)
  75. {
  76. case
  77. 0:
  78. {Direction(12);pwm_ENA(5);break;}
  79. //
  80. P13
  81. P15
  82. case 1: {Direction(15);pwm_ENA(3);break;} // delay(1);;pwm_ENA1(1)
  83. P16
  84. case 2: {Direction(14);pwm_ENA(3);break;}
  85. //
  86. case 3: {Direction(13);pwm_ENA(4);break;}
  87. //run()run()
  88. P14
  89. P10
  90. case 4: {Direction(9);pwm_ENA(3);break;} // delay(1)
  91. pwm_ENA1(1);
  92. case 5: {Direction(10);pwm_ENA(3);break;}
  93. //
  94. P11

  95.  

  96. case 6: {Direction(11);pwm_ENA(4);break;}
  97. //
  98. run()
  99. P12
  100. }
  101. }
  102. void init_time0()
  103. {
  104. TMOD=0x01;
  105. //定时器方式 1
  106. //定时 0.1ms
  107. TH0=(65536-100)/256;
  108. TL0=(65536-100)%256;
  109. IE=0x82;
  110. TR0=1;
  111. }
  112. void Dreaction(uchar jd)
  113. {
  114. if(cycle<jd)
  115. //判断 0.05ms 次数是否小于角度标识
  116. //确定小于, duoji 输出高电平
  117. duoji=1;
  118. else
  119. duoji=0;
  120. //大于则输出低电平
  121. }
  122. void DELAY(uint xms)
  123. {
  124. uint i,j;
  125. for(i=xms;i>0;i--)
  126. for(j=125;j>0;j--);
  127. }
  128. void pwm_ENA(uchar k)
  129. {
  130. if(count<=k)
  131. {
  132. pwm1=0;
  133. }
  134. else if(count>k&&count<13)
  135. {
  136. pwm1=1;
  137. }
  138. else if(count==13)
  139. count=0;
  140. }
  141. void Time0_ISP(void) interrupt 1
  142. {
  143. //定时器中断

  144.  

  145. cycle+=1;
  146. //0.1ms 次数加 1
  147. //次数始终保持为 200 即保持周期为 20ms
  148. cycle=cycle%200;
  149. }

  150. …………限于本文篇幅 余下代码请从51黑下载附件…………

复制代码

完整代码下载:
智能小车循迹(舵机版).rar (2.42 MB, 下载次数: 37)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶顶 踩踩
回复

使用道具 举报

沙发
ID:186510 发表于 2017-11-10 23:16 | 只看该作者
运行程序有错误啊,由10多个,下载下的程序也不可以用,楼主,你可以发一下源码吗???.c文件可以吗??
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表