基于51单片机的四足机器人
一种基于单片机的四足步行机器人设计及步态研究.

一种基于单片机的四足步行机器人设计及步态研究周晓东,汤修映,农克俭中国农业大学工学院,北京(100083E-mail:摘要 :本论文通过对四足动物结构及其行走步态的研究, 设计制作了一台四足步行机器人样机, 按照多足步行机器人行走的稳定性原则, 设计出了慢走和对角小跑两种步态的具体过程,并采用单片机作为控制系统,实现了这两种步态,实验证明,所设计的步态具有良好的稳定性。
关键词:四足机器人;步态;慢走;对角小跑中图法分类号:TP2421. 引言步行机器人是一种腿式移动机构, 具有轮式、履带式等移动机器人所不具备的优点, 该类机器人能够在复杂的非结构环境中稳定地行走, 代替人完成许多危险作业, 被广泛地应用于军事运输、矿山开采、核能工业、星球表面探测、消防及营救、建筑业、农业及森林采伐、示教娱乐等众多行业。
因此, 长期以来, 多足步行机器人技术一直是国内外机器人领域研究的热点之一 [1][2]。
而四足机器人具有实现静态步行的最少腿数 [3],也适合于动态步行,以实现高速移动,因此,对四足步行机器人的研究,具有特殊的重要性。
本文以四足爬行动物为模仿对象, 通过对其结构和步态的分析和研究, 设计出了一台四足步行机器人, 采用单片机控制系统,使其能够模仿四足动物的慢走、对角小跑等步态。
2. 四足步行机构总体结构设计与自由度2.1步行机构总体结构分析图 1为所设计的四足步行机器人总体结构示意图, 由图可知, 该机构由四条腿及机体组成,每条腿的结构完全相同,在各主动驱动关节(膝关节、臀关节、髋关节上分别装有直1踝关节 2小腿 3膝关节 4大腿 5臀关节6髋关节 7机体 8控制系统电路板图 1 总体结构示意图Fig.1 The sketch of the overall configuration流电机,整个机体上共装有 12个独立的驱动电机。
而被动关节(踝关节采用球铰链结构, 脚底部粘上胶皮以增大和地面的摩擦力, 同时可对脚与地面之间的撞击起到缓冲作用, 小腿和大腿组成平面连杆机构, 它们均可以绕着自身的关节轴在一定的角度范围内摆动, 而整条腿又可以绕着髋关节转动。
基于AT89C51单片机设计的简易智能机器人

基于AT89C51单片机设计的简易智能机器人引言随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数器、并行和串行接口、看门狗、前置放大器、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。
这种技术促使机器人技术也有了突飞猛进的发展,目前人们已经完全可以设计并制造出具有某些特殊功能的简易智能机器人。
1 设计思想与总体方案1.1 简易智能机器人的设计思想本机器人能在任意区域内沿引导线行走,自动绕障,在有光源引导的条件下能沿光源行走。
同时,能检测埋在地下的金属片,发出声光指示信息,并能实时存储、显示检测到的断点数目以及各断点至起跑线间的距离,最后能停在指定地点,显示出整个运行过程的时间。
1.2 总体设计方案和框图本设计以A T89C5l单片机作为检测和控制核心。
采用红外光电传感器检测路面黑线及障碍物,使用金属传感器检测路面下金属铁片,应用光电码盘测距,用光敏电阻检测、判断车库位置,利用PWM(脉宽调制)技术动态控制电动机的转动方向和转速。
通过软件编程实现机器人行进、绕障、停止的精确控制以及检测数据的存储、显示。
通过对电路的优化组合,可以最大限度地利用51单片机的全部资源。
P0口用于数码管显示,P1口用于电动机的PWM驱动控制,P2,P3口用于传感器的数据采集与中断控制。
这样做的优点是:充分利用了单片机的内部资源,降低了总体设计的成本。
该方案总体方案见图1。
2 系统的硬件组成及设计原理此系统的硬件部分由单片机单元、传感器单元、电源单元、声光报警单元、键盘输入单元、电机控制单元和显示单元组成,如图2所示。
2.1 单片机单元本系统采用A T89C51单片机作为中央处理器。
其主要任务是扫描键盘输入的信号启动机器人,在机器人行走过程中不断读取传感器采集到的数据,将得到的数据进行处理后,根据不同的情况产生占空比不同的PWM脉冲来控制电机,同时将相关数据送显示单元动态显示,产生声光报警信号。
以MCS—51单片机为核心研制的四脚步行机器人分布...

以MCS—51单片机为核心研制的四脚步行机器人分布...刘多伟
【期刊名称】《电讯技术》
【年(卷),期】1990(030)002
【摘要】本文描述一个四脚步行机器人的微处理器分布式实时控制系统,介绍系统的主从分布式松耦合结构.该系统采用了2只8088CPU,一只8087协处理器和14只8031单片机.文中设计了一个系统管理员来负责整个系统的时序控制,用C写的系统管理程序具有移植性好和执行速度快的特点.而松耦合的任务处理器则根据系统管理员的指令来执行特定的算法.本文将首先介绍把整个系统控制分解为一组单独执行的任务(即电机伺服)的方法,然后重点讨论基于8031单片机的全数字式直流伺服系统的设计以及步行机的实时控制等问题.模块化设计、并行处理、数字化和分布控制技术使得整个控制系统的性能和可靠性均得到了提高.
【总页数】6页(P71-76)
【作者】刘多伟
【作者单位】无
【正文语种】中文
【中图分类】TP242
【相关文献】
1.基于Protues仿真的MCS-51单片机教学实践与探讨--利用仿真软件解决MCS-51单片机教学中常见的问题 [J], 侯俊才;杨蜀秦
2.基于MCS-51单片机的智能机器人迷宫车设计 [J], 李雪霞;何扣芳
3.基于四脚支持的四足机器人斜面步行研究 [J], 王利利;张磊
4.基于增强型MCS-51单片机的可避障竞步机器人控制系统设计 [J], 陆宽; 蒋善超
5.基于Intel 8088微处理器和MCS-51单片机的四脚步行机器人分步式控制系统[J], 刘多伟
因版权原因,仅展示原文概要,查看原文内容请购买。
四足机器人设计方案书

浙江大学“海特杯”第十届大学生机械设计竞赛“四足机器人”设计方案书“四足机器人”设计理论方案自从人类发明机器人以来,各种各样的机器人日渐走入我们的生活。
仿照生物的各种功能而发明的各种机器人越来越多。
作为移动机器平台,步行机器人与轮式机器人相比较最大的优点就是步行机器人对行走路面的要求很低,它可以跨越障碍物,走过沙地、沼泽等特殊路面,用于工程探险勘测或军事侦察等人类无法完成的或危险的工作;也可开发成娱乐机器人玩具或家用服务机器人。
四足机器人在整个步行机器中占有很大大比重,因此对仿生四足步行机器人的研究具有很重要的意义。
所以,我们在选择设计题目时,我们选择了“四足机器人”,作为我们这次比赛的参赛作品。
一.装置的原理方案构思和拟定:随着社会的发展,现代的机器人趋于自动化、高效化、和人性化发展,具有高性能的机器人已经被人们运用在多种领域里。
特别是它可以替代人类完成在一些危险领域里完成工作。
科技来源于生活,生活可以为科技注入强大的生命力,基于此,我们在构思机器人的时候想到了动物,在仔细观察了猫.狗等之后我们找到了制作我们机器人的灵感,为什么我们不可以学习小动物的走路呢,于是我们有了我们机器人行走原理的灵感。
为了使我们所设计的机器人在运动过程中体现出特种机器人的性能及其运动机构的全面性,我们在构思机器人的同时也为它设计了一些任务:1. 自动寻找地上的目标物。
2. 用机械手拾起地上的目标物。
3.把目标物放入回收箱中。
4. 能爬斜坡。
图一如图一中虚线所示的机器人的行走路线,机器人爬过斜坡后就开始搜寻目标物体,当它发现目标出现在它的感应范围时,它将自动走向目标,同时由于相关的感应器帮助,它将自动走进障碍物中取出物体。
二.原理方案的实现和传动方案的设计:机器人初步整体构思如上的图二和图三,四只腿分别各有一个电机控制它的转动,用一个电机驱动两条腿的抬伸。
根据每只腿的迈步先后实现机器人的前进,后退,左转和右转,在机器人腿迈出的同时,它也会相应地进行抬伸,具体实现情况会在下文详细说明。
基于单片机的仿生四足机器人设计与实现

基于单片机的仿生四足机器人设计与实现
徐永前;马西沛;程晓舟;熊绍托;黄友权
【期刊名称】《产业与科技论坛》
【年(卷),期】2024(23)9
【摘要】仿生四足机器人有着广泛的应用和研究价值,它可用于运输、作为机械宠物、辅助工人工作或代替人类在某些特殊环境下进行作业。
而对生物行为的模拟,
也可能让我们发现某些机械结构所具备的运动和力学优势,并将这些仿生机械结构
应用到更多领域。
本仿生四足机器人采用全肘式腿型配置,大腿由舵机直接带动其
旋转;小腿的运动则采用空间四杆机构,通过杠杆的方式使其摆动。
步态选择为对角
步态,单片机采用英飞凌TC264。
仿生四足机器人还装有陀螺仪,用于感知运动姿态。
为了方便发送指令和查看反馈数据,该仿生四足机器人除板载按键以外,还配有无线
转串口模块和蓝牙模块两种通讯模块。
【总页数】3页(P36-38)
【作者】徐永前;马西沛;程晓舟;熊绍托;黄友权
【作者单位】上海工程技术大学机械与汽车工程学院;上海工程技术大学继续教育
学院
【正文语种】中文
【中图分类】TP2
【相关文献】
1.基于STC单片机的仿生六足机器人设计
2.基于单片机的六足仿生机器人设计
3.基于单片机的四足智能机器人设计与实现
4.基于STM32的四足仿生机器人控制系统设计与实现
5.基于STM32单片机的四足仿生蜘蛛机器人控制系统设计
因版权原因,仅展示原文概要,查看原文内容请购买。
基于单片机的四足仿生机械狗设计

构稳定性,可改装为钢板等其它材1-4:仿生机械狗四足结构;5:电机;6:控制平台图1机械结构件设计的控制芯片是51单片机,具有很很小。
系统主要以传感器和输入输出部分包括电机、显示屏。
电源容量电池来供电,能够提供足够动电机转动和系统运作,系统机带。
振电路如图2所示。
图2晶振电路1.2复位电路部分设计其复位部分是由外部复位电路实现,接在单片RST引脚上,需要手动按下复位按键。
采用可充的电池来作为电源部分,提供动力。
的如图3所示。
图3复位电路2.2电机控制电路设计这里采用的是直流电机,当单片机输出为1时,继电器得电。
电机工作这里面得电源也是接可充电得电池。
其中三极管是为了增加电机的启动电压。
其输入基金项目:安徽新华学院2016年度省级新训练项目《四足仿生机械狗设计》(AH201612216051)。
63Science&Technology Vision科技视界端接在P1.0引脚,如图4所示。
图4电机电路电源部分本系统采用可充电的大容量电池来供电,能够提供足够的电压以及电流来驱动电机转动和系统运作。
2.3传感器及显示电路设计以单片机为核心,通过温度传感器DS18B20对当前温度的检测送到单片机进行处理与系统设定温度的比较,控制主电路双向晶闸管的导通与关断,接在单片机的P3.7引脚上,如图5所示。
图5传感器电路系统显示电路采用1602液晶屏进行显示,主要对温度数据进行显示,处理后的数据和设定阈值,均通过送单片机P0.0到P0.7口连接的显示电路以显示当前温度,如图6所示3程序设计由于基本功能比较简单,系统应用了AT89C51类型的单片机,因为能耗低,操作简单易学,其基本功能也满足机器人的需求。
本系统主要功能有:电机转动、图6显示器电路图7主程序流程图图8温度传感器子程序流程图2子程序当子程序检测到信号用子程序,首先进行初始化时序,然后发出读温度令,读出数据,最后子程序返回。
如图8所示。
结论通过构建自由度少的械结构来支撑整体框架,需要的驱动力较小,能够稳的进行行走。
四足机器人(课程标准)

《四足机器人的设计与制作》课程标准一、课程名称四足机器人的设计与制作二、适用年龄范围二年级以上三、课程定位《四足机器人的设计与制作》是一门将3d打印设计、舵机的单片机控制与仿生学动力原理相互结合的一门综合课程。
本课程以培养学生知识的综合运用能力为目的,在实践中发现问题并解决问题。
同时为后续创客课程打下坚实的基础。
1.这是一门综合运用机械、电子和数学知识的课程。
学生需要学会从顶层到底层的思考模式,即由最终爬行的四足机器人,拆分到每个环节应该如何去实现。
这是掌握任务设计思维的基础课程,同时对后续课程的进行起到至关重要的作用。
四、课程目标1.知识与技能的目标3D打印设计的学习与巩固仿生动力学原理的了解与运用舵机单片机控制原理的了解2.个人素养的目标空间思维能力与耐心的提高观察能力与动手实践能力的提高培养主动学习和深入学习的习惯发现问题和解决问题能力的提升五、课程设计《四足机器人的设计与制作》课程主要以学生自行参与动手时间为主,在教学过程中,重点应该放在学生课堂的实践,采用实践与理论一体化的教学方式,使学生能够在做中学,学中玩。
课程设计思路如下:(1)以课堂任务为载体,将教学内容融入其中,实现理论与实践一体化教学。
在基于项目式的教学过程中,学生是主要的行为者,全程实现小班化教学,学生以个体或者小组的形式,在老师的指导下完成任务。
老师需要根据学生每堂课的课堂表现和完成任务情况给予评价。
(2)基于项目式教学的基本方法如下:引入:使用视频、游戏、图片等方式引出课程,明确教学任务,培养学生从顶层到底层思考问题的能力。
设计制作:根据四足所涉及到的知识点进行教学任务的分解安排,首先使用3D打印设计制作机器人的机械部分,其次使用舵机控制板控制多个舵机联合运动,最后进行调试与运动。
拓展与运用:结合开源硬件Arduino和超声波传感器制作智能避障四足机器人。
学习结果评价:根据每堂课的表现和最终任务完成情况给予结果的综合评价。
四足机器人运动及稳定控制关键技术综述

四足机器人运动及稳定控制关键技术综述目录一、内容概览 (2)1. 四足机器人概述 (3)2. 研究背景与意义 (4)3. 研究现状和发展趋势 (5)二、四足机器人运动原理及结构 (7)1. 四足机器人运动原理 (8)1.1 动力学模型建立 (9)1.2 运动规划与控制策略 (10)2. 四足机器人结构组成 (11)2.1 主体结构 (13)2.2 关节与驱动系统 (14)2.3 感知与控制系统 (17)三、四足机器人运动控制关键技术 (19)1. 运动规划算法研究 (20)1.1 基于模型预测控制的运动规划算法 (21)1.2 基于优化算法的运动规划策略 (22)2. 稳定性控制策略研究 (23)2.1 静态稳定性控制策略 (25)2.2 动态稳定性控制策略 (26)3. 路径规划与轨迹跟踪控制技术研究 (27)3.1 路径规划算法研究 (28)3.2 轨迹跟踪控制策略设计 (29)四、四足机器人稳定控制实现方法 (31)1. 基于传感器反馈的稳定控制方法 (32)1.1 传感器类型与布局设计 (34)1.2 传感器数据采集与处理技术研究 (35)2. 基于优化算法的稳定控制方法应用探讨 (37)一、内容概览四足机器人运动机制:阐述四足机器人的基本运动模式,包括行走、奔跑、跳跃等,以及不同运动模式之间的转换机制。
稳定性分析:探讨四足机器人在运动过程中的稳定性问题,包括静态稳定性和动态稳定性,以及影响稳定性的因素。
运动控制关键技术:详细介绍四足机器人运动控制的关键技术,包括运动规划、轨迹跟踪、力控制等,以及这些技术在实现机器人稳定运动中的应用。
传感器与感知技术:介绍四足机器人运动及稳定控制中涉及的传感器与感知技术,包括惯性测量单元(IMU)、激光雷达、视觉传感器等,以及这些技术在机器人运动控制中的作用。
控制算法与策略:探讨四足机器人运动及稳定控制中常用的控制算法与策略,包括基于模型的控制、智能控制方法等,以及这些算法在实际应用中的效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
深圳大学期末考试试卷开/闭卷开卷A/B卷N/A课程编号13032700011303270002 课程名称EDA技术与实践(2)学分2.0命题人(签字) 审题人(签字) 2015 年10 月20 日设计考试题目:完成一个集成电路或集成系统设计项目基本要求:2-3位同学一组,完成一个完整的集成电路设计项目或是一个集成系统设计项目。
规格说明:1.题目自定。
1)集成电路设计项目i.若为IC设计项目需要完成IC设计的版图。
ii.若采用FPGA实现数字集成电路设计,需要进行下板测试。
2)集成系统设计项目,需使用FPGA开发板或嵌入式开发板,完成一个完整的集成系统作品。
3)作品需要课堂现场演示,最后提交报告,每个小组单独一份报告,但需阐述各个成员的工作。
2.评分标准:2015年第二学期,建议作品内容:•完成一个行走机器人,基本要求o2-8只脚o能行走o可以用单片机,嵌入式,FPGA方案一、设计目的:通过设计一个能够走动的机器人来增加对动手能力,和对硬件电路设计的能力,增强软件流程设计的能力和对设计流程实现电路功能的能力,在各个方面提升自己对电子设计的能力。
二、设计仪器和工具:本设计是设计一个能走动的机器人,使用到的仪器和工具分别有:sg90舵机12个、四脚机器人支架一副、单片机最小系统一个、电容电阻若干、波动开关一个、超声遥控模块一对、杜邦线若干、充电宝一个。
三、设计原理:本次设计的机器人是通过51单片机控制器来控制整个电路的。
其中,舵机的控制是通过产生一个周期为20毫秒的高电平带宽在0.5到2.5ms之间的pwm信号来控制。
12路Pwm信号由单片机的定时器来产生。
51单片机产生12路pwm信号的原理是:以20毫秒为周期,把这20毫秒分割成8个2.5ms,因为,每个pwm信号的高电平时间最多为2.5ms,然后在前六个2.5ms中分别输出两个pwm信号的高电平,例如,在第一个2.5ms中输出第一个和第二个pwm信号的高电平时,首先开始时,把信号S1、S2都置1,然后比较两个高电平时间,先定时时间短的高电平时间,把高电平时间短的那个信号置0,再定时两个高电平时间差,到时把高电平时间长的按个信号置0,然后,定时(2.5-较长那个高电平时间),在第二个2.5ms开始时,把S3、S4置1,接下来和上面S1、S2一样,以此类推,在六个2.5ms 中输出12路pwm信号来控制舵机。
原理图如图1.通过超声模块来控制机器人前进、后退、向前的左转、向前的右转、向后的左转、向后的右转几个动作。
控制模块电路,D0,D1,D2,D3分别为超声接受模块的输出,输出为高电平,要加NPN作为开关。
四、设计步骤:1、设计好硬件电路,焊接51单片机的最小系统和各个硬件电路。
2、设计好软件的流程图,如图2。
3、写产生12路控制舵机的pwm信号的程序并在proteus中测试,如图3。
4、设计出行走步态,四脚机器人的步态是采用对角的相互前进来实现的,如图4。
5、写出流程图中各个模块的软件,包括前进函数、后退函数、左转和右转的函数,并逐个烧到单片机中测试。
6、按流程图把各个函数组合到主函数中,完成所有软件的编写,并烧到单片机中测试,并不断的调试。
图2.流程图图3.在proteus里测试并调试pwm信号初始状态:先迈一对脚迈另一对并另一对支撑身体前进图4,行走步态五、遇到的问题及解决:1、此设计的pwm信号输出使用定时器来产生每个信号的高电平和低电平,每次定时时间到,都会会关掉定时器并执行中断函数,在此过程中会消耗一定的时间,等到给定时器赋值下一次定时时间并开始定时时,就会产生一定的时间延时,造成每次高电平时间都会变长一点,且总的加起来会使20ms周期变长,因此,需要稍微减小高电平的定时时间,并结合proteus仿真确定最准确值。
2、由于机器人的四个脚都是自己组装的,可能会有存在不平衡和对称,当对角的两只脚同时向前迈同一个角度时,会使机器人向一个方向偏转而不沿直线前进,这时要结合实际测试来调整机器人的各个脚的前迈角度来使机器人平衡的沿直线前进,比如,一只脚迈多点,另一边的脚迈少点。
六、心得与体会:通过这次设计,我更加的熟悉基本的硬件电路和软件的设计,特别是软件的流程图设计。
更加熟悉软硬件电路结合的测试与调试。
六、实验实物图:设计代码:#include<reg51.h>#define uchar unsigned char#define uint unsigned intuint pwm[12],p_min1,p_max1,p_min2,p_max2,p_min3,p_max3,p_min4,p_max4,p_min5,p_max5, p_min6,p_max6,p1,p2,p3,p4,p5,p6,p11,p21,p31,p41,p51,p61;//高电平带宽sbit s0=P2^0;//12路输出信号sbit s1=P2^1;sbit s2=P2^2;sbit s3=P2^3;sbit s4=P2^4;sbit s5=P2^5;sbit s6=P2^6;sbit s7=P2^7;sbit s8=P0^6;sbit s9=P0^4;sbit s10=P0^2;sbit s11=P0^0;sbit up=P1^0;sbit right=P1^4;sbit left=P1^2;sbit down=P1^6;uchar s_num,f,b,r,l,back_flag;forward_flag;void back();//后退void forward(); //前进void back_right(); //后右转、前左转void back_left(); //后左转、前右转void scan_key();//遥控监控void labor_init();//机器人的初始状态void delay(uint i) //延时函数,延时一秒{uint j;for(i;i>0;i--)for(j=110;j>0;j--);}void init(void)//中断初始函数{TMOD=0x01;TR0=1;ET0=1;EA=1;}void rate(uint p[12])//pwm的排序函数{p_min1=(p[0]<=p[1]?(p[0]):(p[1]))-40;p_max1=p[0]>p[1]?(p[0]):(p[1]);p_min2=(p[2]<=p[3]?p[2]:p[3])-64;p_max2=p[2]>p[3]?p[2]:p[3];p_min3=(p[4]<=p[5]?p[4]:p[5])-64;p_max3=p[4]>p[5]?p[4]:p[5];p_min4=(p[6]<=p[7]?p[6]:p[7])-64;p_max4=p[6]>p[7]?p[6]:p[7];p_min5=(p[8]<=p[9]?p[8]:p[9])-64;p_max5=p[8]>p[9]?p[8]:p[9];p_min6=(p[10]<=p[11]?p[10]:p[11])-64;p_max6=p[10]>p[11]?p[10]:p[11];p1=p_max1-p_min1-21;p2=p_max2-p_min2-42;p3=p_max3-p_min3-42;p4=p_max4-p_min4-42;p5=p_max5-p_min5-42;p6=p_max6-p_min6-42;p11=2400-p_max1;p21=2400-p_max2;p31=2400-p_max3;p41=2400-p_max4;p51=2400-p_max5;p61=15500-p_max6;TH0=-p_min1/256;TL0=-p_min1%256;s_num=0;s0=1;s1=1;init();}void scan_key(){if(P1!=0xff){delay(5);if(up==0){f=0;}if(down==0)b=0;if(right==0)r=0;if(left==0)l=0;}}void time0() interrupt 1 //中断产生12路pwm信号{TR0=0;switch(s_num){case 0:if(pwm[0]<=pwm[1]){if(pwm[0]==pwm[1]){s0=0;s1=0;s_num++;TH0=-(p1-0)/256;TL0=-(p1-0)%256;break;} elses0=0;}elses1=0;TH0=-p1/256;TL0=-p1%256;s_num++;break;case 1:if(pwm[0]>pwm[1])s0=0;elses1=0;TH0=-p11/256;TL0=-p11%256;s_num++;break;case 2:s2=1;s3=1;TH0=-p_min2/256;TL0=-p_min2%256;s_num++;break;case 3:if(pwm[2]<=pwm[3]){if(pwm[2]==pwm[3]){s2=0;s3=0;s_num++;TH0=-p2/256;TL0=-p2%256;break;}elses2=0;}elses3=0;TH0=-p2/256;TL0=-p2%256;s_num++;break;case 4:if(pwm[2]>pwm[3])s2=0;elses3=0;TH0=-p21/256;TL0=-p21%256;s_num++;break;case 5:s4=1;s5=1;TH0=-p_min3/256;TL0=-p_min3%256;s_num++;break;case 6:if(pwm[4]<=pwm[5]){if(pwm[4]==pwm[5]){s4=0;s5=0;s_num++;TH0=-p3/256;TL0=-p3%256;break;} elses4=0;}elses5=0;TH0=-p3/256;TL0=-p3%256;s_num++;break;case 7:if(pwm[4]>pwm[5])s4=0;elses5=0;TH0=-p31/256;TL0=-p31%256;s_num++;break;case 8:s6=1;s7=1;TH0=-p_min4/256;TL0=-p_min4%256;s_num++;break;case 9:if(pwm[6]<=pwm[7]){if(pwm[6]==pwm[7]){s6=0;s7=0;s_num++;TH0=-p4/256;TL0=-p4%256;break;} elses6=0;}elses7=0;TH0=-p4/256;TL0=-p4%256;s_num++;break;case 10:if(pwm[6]>pwm[7])s6=0;elses7=0;TH0=-p41/256;TL0=-p41%256;s_num++;break;case 11:s8=1;s9=1;TH0=-p_min5/256;TL0=-p_min5%256;s_num++;break;case 12:if(pwm[8]<=pwm[9]){if(pwm[8]==pwm[9]){s8=0;s9=0;s_num++;TH0=-p5/256;TL0=-p5%256;break;} elses8=0;}elses9=0;TH0=-p5/256;TL0=-p5%256;s_num++;break;case 13:if(pwm[8]>pwm[9])s8=0;elses9=0;TH0=-p51/256;TL0=-p51%256;s_num++;break;case 14:s10=1;s11=1;TH0=-p_min6/256;TL0=-p_min6%256;s_num++;break;case 15:if(pwm[10]<=pwm[11]){if(pwm[10]==pwm[11]){s10=0;s11=0;s_num++;TH0=-p6/256;TL0=-p6%256;break;}elses10=0;}elses11=0;TH0=-p6/256;TL0=-p6%256;s_num++;break;case 16:if(pwm[10]>pwm[11])s10=0;elses11=0;TH0=-p61/256;TL0=-p61%256;s_num++;break;case 17:s0=1;s1=1;s_num=0;TH0=-p_min1/256;TL0=-p_min1%256;break;}scan_key();TR0=1;}void motor_init1()//给所有信号都设高电平时间为1.5毫秒{uchar i;for(i=0;i<12;i++)pwm[i]=1500;}void labor_init()//机器人的初始状态{motor_init1();l=1;f=1;r=1;b=1;back_flag=0;forward_flag=0;rate(pwm);//delay(200);while(1){if(r==0){r=1;back_right();}if(l==0){l=1;back_left();}if(f==0){f=1;forward();}if(b==0){b=1;back();}}}void back(){back_flag=1;forward_flag=0;motor_init1();pwm[8]=pwm[8]+300;pwm[9]=pwm[9]-250;pwm[2]=pwm[2]+150;pwm[3]=pwm[3]-150;pwm[7]=pwm[7]+50;//pwm[0]=pwm[0]-80;//pwm[5]=pwm[5]+80;//pwm[11]=pwm[11]-30;rate(pwm);delay(500);pwm[3]=pwm[3]+320;pwm[8]=pwm[8]-200;pwm[4]=pwm[4]+600;pwm[5]=pwm[5]+600;pwm[6]=pwm[6]+600;pwm[7]=pwm[7]+600;rate(pwm);delay(300);pwm[4]=pwm[4]-600;pwm[5]=pwm[5]-600;pwm[6]=pwm[6]-600;pwm[7]=pwm[7]-600;rate(pwm);delay(300);while(1){if(r==0){r=1;back_right();}if(l==0){l=1;back_left();}if(f==0){f=1;forward();}if(b==0)b=1;pwm[3]=pwm[3]-320;pwm[8]=pwm[8]+200;pwm[2]=pwm[2]-270;pwm[9]=pwm[9]+320;pwm[1]=pwm[1]-600;pwm[0]=pwm[0]-600;pwm[10]=pwm[10]-600;pwm[11]=pwm[11]-600;rate(pwm);delay(300);pwm[1]=pwm[1]+600;pwm[0]=pwm[0]+600;pwm[10]=pwm[10]+600;pwm[11]=pwm[11]+600;rate(pwm);delay(500);pwm[2]=pwm[2]+270;pwm[9]=pwm[9]-320;pwm[3]=pwm[3]+320;pwm[8]=pwm[8]-200;pwm[4]=pwm[4]+600;pwm[5]=pwm[5]+600;pwm[6]=pwm[6]+600;pwm[7]=pwm[7]+600;rate(pwm);delay(300);pwm[4]=pwm[4]-600;pwm[5]=pwm[5]-600;pwm[6]=pwm[6]-600;pwm[7]=pwm[7]-600;rate(pwm);delay(500);if(P1!=0xff)forward();}}void back_right(){motor_init1();pwm[8]=pwm[8]+50;pwm[9]=pwm[9]-50;//pwm[2]=pwm[2]+150;//pwm[3]=pwm[3]-150;pwm[7]=pwm[7]+100;//pwm[0]=pwm[0]-80;//pwm[5]=pwm[5]+80;//pwm[11]=pwm[11]-30; rate(pwm);delay(300);pwm[3]=pwm[3]-70;pwm[8]=pwm[8]-70;pwm[4]=pwm[4]+600; pwm[5]=pwm[5]+600; pwm[6]=pwm[6]+600; pwm[7]=pwm[7]+600;rate(pwm);delay(300);pwm[4]=pwm[4]-600; pwm[5]=pwm[5]-600; pwm[6]=pwm[6]-600; pwm[7]=pwm[7]-600;rate(pwm);delay(300);while(1){if(r==0){if(back_flag==1){r=1;back_right();}if(forward_flag==1){r=1;back_left();}}if(l==0){if(back_flag==1){l=1;back_left();}if(forward_flag==1){l=1;back_right();}}if(f==0){f=1;forward();}if(b==0){b=1;back();}pwm[3]=pwm[3]+70; pwm[8]=pwm[8]+70; pwm[2]=pwm[2]-70; pwm[9]=pwm[9]-70; pwm[1]=pwm[1]-600; pwm[0]=pwm[0]-600; pwm[10]=pwm[10]-600; pwm[11]=pwm[11]-600; rate(pwm);delay(300);pwm[1]=pwm[1]+600; pwm[0]=pwm[0]+600;pwm[10]=pwm[10]+600;pwm[11]=pwm[11]+600;rate(pwm);delay(500);pwm[2]=pwm[2]+70;pwm[9]=pwm[9]+70;pwm[3]=pwm[3]-70;pwm[8]=pwm[8]-70;pwm[4]=pwm[4]+600;pwm[5]=pwm[5]+600;pwm[6]=pwm[6]+600;pwm[7]=pwm[7]+600;rate(pwm);delay(300);pwm[4]=pwm[4]-600;pwm[5]=pwm[5]-600;pwm[6]=pwm[6]-600;pwm[7]=pwm[7]-600;rate(pwm);delay(300);}}void back_left(){motor_init1();pwm[8]=pwm[8]+50;pwm[9]=pwm[9]-50;//pwm[2]=pwm[2]+150;//pwm[3]=pwm[3]-150;pwm[6]=pwm[6]+50;pwm[7]=pwm[7]+100;//pwm[0]=pwm[0]-80;//pwm[5]=pwm[5]+80;//pwm[11]=pwm[11]-30; rate(pwm);delay(300);pwm[3]=pwm[3]+70;pwm[8]=pwm[8]+70;pwm[4]=pwm[4]+600; pwm[5]=pwm[5]+600; pwm[6]=pwm[6]+600; pwm[7]=pwm[7]+600;rate(pwm);delay(300);pwm[4]=pwm[4]-600; pwm[5]=pwm[5]-600; pwm[6]=pwm[6]-600; pwm[7]=pwm[7]-600;rate(pwm);delay(300);while(1){if(r==0){if(back_flag==1){r=1;back_right();}if(forward_flag==1){r=1;back_left();}}if(l==0){if(back_flag==1){l=1;back_left();}if(forward_flag==1){l=1;back_right();}}if(f==0){f=1;forward();}if(b==0){b=1;back();}pwm[3]=pwm[3]-70; pwm[8]=pwm[8]-70; pwm[2]=pwm[2]+70; pwm[9]=pwm[9]+70; pwm[1]=pwm[1]-600; pwm[0]=pwm[0]-600; pwm[10]=pwm[10]-600; pwm[11]=pwm[11]-600; rate(pwm);delay(300);pwm[1]=pwm[1]+600; pwm[0]=pwm[0]+600;pwm[10]=pwm[10]+600;pwm[11]=pwm[11]+600;rate(pwm);delay(500);pwm[2]=pwm[2]-70;pwm[9]=pwm[9]-70;pwm[3]=pwm[3]+70;pwm[8]=pwm[8]+70;pwm[4]=pwm[4]+600;pwm[5]=pwm[5]+600;pwm[6]=pwm[6]+600;pwm[7]=pwm[7]+600;rate(pwm);delay(300);pwm[4]=pwm[4]-600;pwm[5]=pwm[5]-600;pwm[6]=pwm[6]-600;pwm[7]=pwm[7]-600;rate(pwm);delay(300);}}void forward(){forward_flag=1;back_flag=0;motor_init1();pwm[2]=pwm[2]-150;pwm[3]=pwm[3]+220;pwm[8]=pwm[8]+10;pwm[11]=pwm[11]-20; rate(pwm);delay(500);pwm[3]=pwm[3]-300; pwm[8]=pwm[8]+300; pwm[4]=pwm[4]+600; pwm[5]=pwm[5]+600; pwm[6]=pwm[6]+600; pwm[7]=pwm[7]+600; rate(pwm);delay(300);pwm[4]=pwm[4]-600; pwm[5]=pwm[5]-600; pwm[6]=pwm[6]-600; pwm[7]=pwm[7]-600; rate(pwm);delay(300);while(1){if(r==0){r=1;back_left();}if(l==0){l=1;back_right();}if(b==0){b=1;back();}if(f==0)f=1;pwm[3]=pwm[3]+300; pwm[8]=pwm[8]-300; pwm[2]=pwm[2]+300; pwm[9]=pwm[9]-280; pwm[1]=pwm[1]-600; pwm[0]=pwm[0]-600; pwm[10]=pwm[10]-600; pwm[11]=pwm[11]-600; rate(pwm);delay(300);pwm[1]=pwm[1]+600; pwm[0]=pwm[0]+600; pwm[10]=pwm[10]+600; pwm[11]=pwm[11]+600; rate(pwm);delay(500);pwm[2]=pwm[2]-300; pwm[9]=pwm[9]+280; pwm[3]=pwm[3]-300; pwm[8]=pwm[8]+300; pwm[4]=pwm[4]+600; pwm[5]=pwm[5]+600; pwm[6]=pwm[6]+600; pwm[7]=pwm[7]+600; rate(pwm);delay(300);pwm[4]=pwm[4]-600; pwm[5]=pwm[5]-600; pwm[6]=pwm[6]-600; pwm[7]=pwm[7]-600; rate(pwm);delay(500);if(P1!=0xff)back();}}void main(void){labor_init();}。