找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6770|回复: 10
收起左侧

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, 下载次数: 126)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:610719 发表于 2019-11-1 16:38 | 显示全部楼层
提问,程序中利用定时器1控制PWM占空比时间,但是楼主的程序中,定时器1在定时器1中断中,这样做的话,当中断中的定时器1溢出时,会不会再次进入定时器中断1,陷入死循环
回复

使用道具 举报

ID:623518 发表于 2019-10-15 23:59 来自手机 | 显示全部楼层
厉害厉害
回复

使用道具 举报

ID:516644 发表于 2020-2-29 19:58 | 显示全部楼层
1206246381 发表于 2019-11-1 16:38
提问,程序中利用定时器1控制PWM占空比时间,但是楼主的程序中,定时器1在定时器1中断中,这样做的话,当中 ...

在中断里,只是改变了PWM的输出值,没有死循环
回复

使用道具 举报

ID:203076 发表于 2020-3-26 16:46 | 显示全部楼层
请问楼主 还有外置电路吗?
回复

使用道具 举报

ID:516644 发表于 2020-4-5 22:26 | 显示全部楼层
qihemu 发表于 2020-3-26 16:46
请问楼主 还有外置电路吗?

只有最小系统和降压电路
回复

使用道具 举报

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 | 显示全部楼层
有双足机器人走路都的源程序嘛,求大佬
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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