单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:7133|回复:11

51单片机 四足机器人 12路PWM源程序

 [复制链接]
ID:516644发表于 2019-9-3 18:16|显示全部楼层
之前比赛做的一个小四足机器人,由51单片机产生十二路PWM控制十二个舵机进行运动,用蓝牙遥控
IMG_20190503_164931.jpg


单片机源程序如下:
  1. #include "headfile.h"

  2. void jihuo()       //激活/停止
  3. {
  4.      uint sign = 3;
  5. //调整四脚姿势
  6.      delayms(250);
  7.      t_up0 = 1800;
  8.      t_up1 = 1500;
  9.      t_up2 = 1500;
  10.      t_up3 = 1500;
  11.      t_up4 = 1500;
  12.      t_up5 = 1500;
  13.      t_up6 = 1500;
  14.      t_up7 = 1500;
  15.      t_up8 = 1500;
  16.      t_up9 = 1100;
  17.      t_up10 = 1500;
  18.      t_up11 = 1600;
  19.     
  20. //抬左前腿
  21.      delayms(200);
  22.      t_up7 = 1800;
  23.      delayms(50);
  24.      t_up8 = 1200;
  25.      while(sign--)
  26.      {
  27.          delayms(200);
  28.          t_up6 = 1100;
  29.          delayms(200);
  30.          t_up6 = 1500;
  31.      }
  32.      delayms(200);
  33.      t_up7 = 1500;
  34.      delayms(50);
  35.      t_up8 = 1500;
  36.      delayms(200);
  37.      t_up0 = 1500;
  38.      t_up9 = 1500;
  39. }

  40. void ahead()       //前进
  41. {
  42. //调整四脚姿势
  43.      delayms(250);
  44.      t_up0 = 1500;    
  45.      t_up1 = 1500;
  46.   t_up2 = 1500;
  47.   t_up3 = 1500;
  48.   t_up4 = 1500;
  49.   t_up5 = 1500;
  50.   t_up6 = 1500;
  51.   t_up7 = 1500;
  52.   t_up8 = 1500;
  53.   t_up9 = 1500;
  54.   t_up10 = 1500;
  55.   t_up11 = 1600;
  56.      while(direc == 2)
  57.      {
  58. //抬右腿
  59.          delayms(250);
  60.          t_up1 = 1200;
  61.          delayms(125);
  62.          t_up2 = 1800;
  63.          delayms(100);
  64.          t_up0 = 1900;
  65.          delayms(100);
  66.          t_up1 = 1700;
  67.         
  68.          t_up6 = 1900;
  69.          delayms(100);
  70.          t_up3 = 1000;
  71.          delayms(50);
  72.          t_up4 = 1300;
  73.          delayms(100);
  74.          t_up9 = 1100;
  75.          delayms(100);
  76.          t_up5 = 1300;
  77.          t_up2 = 1500;
  78.          delayms(100);
  79.          t_up5 = 1500;
  80.          delayms(50);
  81.          t_up4 = 1500;

  82. //抬左腿
  83.          delayms(250);
  84.          t_up7 = 1800;
  85.          delayms(125);
  86.          t_up8 = 1200;
  87.          delayms(100);
  88.          t_up6 = 1400;
  89.          delayms(100);
  90.          t_up7 = 1300;
  91.         
  92.          t_up0 = 1500;
  93.          delayms(100);
  94.          t_up9 = 1500;
  95.          delayms(50);
  96.          t_up10 = 1700;
  97.          delayms(100);
  98.          t_up3 = 1500;
  99.          delayms(100);
  100.          t_up11 = 1800;
  101.          t_up8 = 1500;
  102.          delayms(100);
  103.          t_up11 = 1600;
  104.          delayms(50);
  105.          t_up10 = 1500;
  106.      }
  107. }

  108. void back()       //后退
  109. {
  110. //调整四脚姿势
  111.      delayms(250);
  112.      t_up0 = 1500;
  113.      t_up1 = 1500;
  114.   t_up2 = 1500;
  115.   t_up3 = 1500;
  116.   t_up4 = 1500;
  117.   t_up5 = 1500;
  118.   t_up6 = 1500;
  119.   t_up7 = 1500;
  120.   t_up8 = 1500;
  121.   t_up9 = 1500;
  122.   t_up10 = 1500;
  123.   t_up11 = 1600;
  124.      while(direc == 3)
  125.      {
  126. //抬右腿
  127.          delayms(250);
  128.          t_up4 = 1800;
  129.          delayms(125);
  130.          t_up5 = 1200;
  131.          delayms(100);
  132.          t_up3 = 1000;
  133.          delayms(100);
  134.          t_up4 = 1300;
  135.         
  136.          t_up9 = 1200;
  137.          delayms(100);
  138.          t_up0 = 2000;
  139.          delayms(50);
  140.          t_up1 = 1700;
  141.          delayms(125);
  142.          t_up6 = 1900;
  143.          delayms(125);
  144.          t_up2 = 1700;
  145.          t_up5 = 1500;
  146.          delayms(125);
  147.          t_up2 = 1500;
  148.          delayms(50);
  149.          t_up1 = 1500;

  150. //抬左腿
  151.          delayms(250);
  152.          t_up10 = 1200;
  153.          delayms(125);
  154.          t_up11 = 1900;
  155.          delayms(100);
  156.          t_up9 = 1500;
  157.          delayms(100);
  158.          t_up10 = 1700;
  159.         
  160.          t_up3 = 1500;
  161.          delayms(100);
  162.          t_up6 = 1500;
  163.          delayms(50);
  164.          t_up7 = 1300;
  165.          delayms(100);
  166.          t_up0 = 1500;
  167.          delayms(100);
  168.          t_up8 = 1200;
  169.          t_up11 = 1600;
  170.          delayms(100);
  171.          t_up8 = 1500;
  172.          delayms(50);
  173.          t_up7 = 1500;
  174.      }
  175. }

  176. void ymove()       //向右平移
  177. {
  178. //调整四脚姿势
  179.      delayms(250);
  180.      t_up0 = 1500;
  181.      t_up1 = 1500;
  182.   t_up2 = 1500;
  183.   t_up3 = 1500;
  184.   t_up4 = 1500;
  185.   t_up5 = 1500;
  186.   t_up6 = 2000;
  187.   t_up7 = 1500;
  188.   t_up8 = 1500;
  189.   t_up9 = 1100;
  190.   t_up10 = 1500;
  191.   t_up11 = 1600;
  192.      while(direc == 7)
  193.      {
  194. //右边起身
  195.          delayms(250);
  196.          t_up2 = 2000;
  197.          delayms(50);
  198.          t_up1 = 1800;
  199.          delayms(50);
  200.          t_up5 = 1000;
  201.          delayms(50);
  202.          t_up4 = 1200;    
  203. //左边起身
  204.          delayms(250);
  205.          t_up7 = 1200;
  206.          t_up10 = 1800;
  207.          delayms(50);
  208. //右边还原
  209.          t_up1 = 1500;
  210.          t_up4 = 1500;
  211.          delayms(50);
  212.          t_up2 = 1500;
  213.          t_up5 = 1500;
  214.          t_up8 = 1200;
  215.          t_up11 = 1900;
  216.          delayms(100);
  217. //左边还原        
  218.          t_up7 = 1500;
  219.          t_up10 = 1500;
  220.          delayms(50);
  221.          t_up8 = 1500;
  222.          t_up11 = 1600;
  223.      }
  224. }

  225. void zmove()       //向左平移
  226. {
  227. //调整四脚姿势
  228.      delayms(250);
  229.      t_up0 = 1500;
  230.      t_up1 = 1500;
  231.   t_up2 = 1500;
  232.   t_up3 = 1500;
  233.   t_up4 = 1500;
  234.   t_up5 = 1500;
  235.   t_up6 = 2000;
  236.   t_up7 = 1500;
  237.   t_up8 = 1500;
  238.   t_up9 = 1100;
  239.   t_up10 = 1500;
  240.   t_up11 = 1600;
  241.      while(direc == 6)
  242.      {
  243. //左边起身
  244.          delayms(250);
  245.          t_up8 = 1000;
  246.          delayms(50);
  247.          t_up7 = 1200;
  248.          delayms(50);
  249.          t_up11 = 2100;
  250.          delayms(50);
  251.          t_up10 = 1800;    
  252. //右边起身
  253.          delayms(250);
  254.          t_up1 = 1800;
  255.          t_up4 = 1200;
  256.          delayms(50);
  257. //左边还原
  258.          t_up7 = 1500;
  259.          t_up10 = 1500;
  260.          delayms(50);
  261.          t_up8 = 1500;
  262.          t_up11 = 1600;
  263.          t_up2 = 1800;
  264.          t_up5 = 1200;
  265.          delayms(100);
  266. //右边还原    
  267.          t_up1 = 1500;
  268.          t_up4 = 1500;
  269.          delayms(50);
  270.          t_up2 = 1500;
  271.          t_up5 = 1500;
  272.      }
  273. }

  274. void right()       //右转
  275. {
  276. //调整四脚姿势
  277.      delayms(250);
  278.      t_up0 = 1500;
  279.      t_up1 = 1500;
  280.   t_up2 = 1500;
  281.   t_up3 = 1500;
  282.   t_up4 = 1500;
  283.   t_up5 = 1500;
  284.   t_up6 = 1500;
  285.   t_up7 = 1500;
  286.   t_up8 = 1500;
  287.   t_up9 = 1500;
  288.   t_up10 = 1500;
  289.   t_up11 = 1600;
  290.     
  291.      delayms(250);
  292.      t_up1 = 1200;
  293.      delayms(125);
  294.      t_up0 = 1900;
  295.      delayms(100);
  296.      t_up1 = 1500;
  297.      while(direc == 5)
  298.      {
  299.          delayms(200);
  300.          t_up1 = 1700;
  301.          delayms(50);
  302.          t_up2 = 1700;
  303.          delayms(200);
  304.          t_up3 = 1100;
  305.          delayms(100);
  306.          t_up2 = 1500;
  307.          delayms(50);
  308.          t_up1 = 1500;
  309.          delayms(200);
  310.          t_up4 = 1400;
  311.          delayms(50);
  312.          t_up5 = 1400;
  313.          delayms(100);
  314.          t_up0 = 1900;
  315.          delayms(100);
  316.          t_up9 = 1100;
  317.          delayms(100);
  318.          t_up6 = 1900;
  319.          delayms(200);
  320.          t_up5 = 1500;
  321.          delayms(50);
  322.          t_up4 = 1500;
  323.          delayms(200);
  324.          t_up1 = 1700;
  325.          delayms(50);
  326.          t_up2 = 1700;
  327.          delayms(200);
  328.          t_up6 = 1500;
  329.          delayms(200);
  330.          t_up2 = 1500;
  331.          delayms(50);
  332.          t_up1 = 1500;
  333.          delayms(200);
  334.          t_up10 = 1600;
  335.          delayms(100);
  336.          t_up9 = 1500;
  337.          delayms(100);
  338.          t_up10 = 1500;
  339.          delayms(200);
  340.          t_up3 = 1500;
  341.      }
  342. }
  343. void left()       //左转
  344. {
  345. //调整四脚姿势
  346.      delayms(250);
  347.      t_up0 = 1500;
  348.      t_up1 = 1500;
  349.   t_up2 = 1500;
  350.   t_up3 = 1500;
  351.   t_up4 = 1500;
  352.   t_up5 = 1500;
  353.   t_up6 = 1500;
  354.   t_up7 = 1500;
  355.   t_up8 = 1500;
  356.   t_up9 = 1500;
  357.   t_up10 = 1500;
  358.   t_up11 = 1600;
  359.     
  360.      delayms(250);
  361.      t_up1 = 1200;
  362.      delayms(125);
  363.      t_up0 = 1900;
  364.      delayms(100);
  365.      t_up1 = 1500;
  366.      delayms(200);
  367.      t_up3 = 1000;
  368.      while(direc == 4)
  369.      {
  370.          delayms(200);
  371.          t_up1 = 1700;
  372.          delayms(50);
  373.          t_up2 = 1700;
  374.          delayms(200);
  375.          t_up6 = 2000;  // 1900
  376.          delayms(200);
  377.          t_up3 = 1500;
  378.          delayms(200);
  379.          t_up9 = 1100;
  380.          delayms(50);
  381.          t_up2 = 1500;
  382.          delayms(200);
  383.          t_up1 = 1500;
  384.          delayms(200);
  385.          t_up6 = 1500;
  386.          delayms(200);
  387.          t_up3 = 1100;
  388.          delayms(200);
  389.          t_up11 = 1400;
  390.          delayms(50);
  391.          t_up9 = 1500;
  392.          delayms(50);
  393.          t_up11 = 1600;
  394.      }
  395. }
复制代码

所有资料51hei提供下载:
避障机器人.rar(63.17 KB, 下载次数: 130)

评分

黑币 +50
收起理由
+ 50
共享资料的黑币奖励!

查看全部评分

ID:610719发表于 2019-11-1 16:38|显示全部楼层
提问,程序中利用定时器1控制PWM占空比时间,但是楼主的程序中,定时器1在定时器1中断中,这样做的话,当中断中的定时器1溢出时,会不会再次进入定时器中断1,陷入死循环
ID:623518发表于 2019-10-15 23:59来自手机|显示全部楼层
厉害厉害
ID:723293发表于 2020-4-6 11:45|显示全部楼层
学习了!!!
ID:216527发表于 2020-4-24 11:03|显示全部楼层
这个不错,正好要做一个玩一下,谢谢!
ID:410464发表于 2020-4-28 09:39|显示全部楼层
这个程序怎么这么熟悉呢?
ID:1003334发表于 2022-4-20 20:03|显示全部楼层
楼主,问一下舵机是不是需要外加电路,我之前做的一个小车没有加电路然后操控舵机会导致蓝牙断开
ID:1077953发表于 2023-5-16 22:01|显示全部楼层
有双足机器人走路都的源程序嘛,求大佬
ID:884711发表于 2024-5-5 09:04|显示全部楼层
路过学习,谢谢分享!

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

Powered by 单片机教程网