51单片机控制五自由度机械手臂源程序
应用单片机进行多自由度机械臂控制系统设计

应用单片机进行多自由度机械臂控制系统设计作者:王晴来源:《江苏理工学院学报》2018年第02期摘要:机器人(臂)是机械技术、电子技术和信息技术有机结合的产物。
机械臂的优点众多,其中最为显著的是其精确性和高效性。
而要实现这些优点,作为机械臂的大脑——机械臂的控制系统则显得尤为重要,拌随着微电子技术的日趋成熟和控制方法的不断改进,以单片机作为控制系统也变得更为简单和方便。
介绍了基于单片机(STC12C5A60S2)采用脉冲调制技术(PWM)控制舵机达到控制多自由机械臂,工作原理以及控制系统的设计(包括硬件电路设计和C语言进行软件设计),为今后开发更加复杂且功能更为强大的现代机械臂奠定了基础。
关键词:单片机;机械臂;控制系统中图分类号:TP241.2 文献标识码: A 文章编号:2095-7394(2018)02-0060-04近年来,随着人工智能技术、数字化制造技术与移动互联网之间创新融合步伐的不断加快,发达国家纷纷做出战略部署,抢占机器人产业制高点。
机器人(臂)是机械技术、电子技术和信息技术有机结合的产物,在现代工业的基础上,综合应用机械技术、微电子技术、信息技术、自动控制技术、传感测试技术、电力电子技术、接口技术、软件编程技术以及人体仿生学技术等群体技术实现高功能、高质量、高精度、高可靠性、低能耗等诸方面实现多种技术功能复合的最佳功能价值系统工程技术的产物。
它是应用于工业领域的多关节机械手或多自由度的机械装置,能自动执行工作,靠自身动力和控制能力来实现设计功能的装置。
它既可接受人类指挥,也可按照预先编排的指令程序运行,先进的工业机器人能够根据人工智能技术制定的原则纲领行动。
1 80C51单片机单片机[1]是一种集成在一块电路芯片上的完整计算机系统,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。
本科毕业论文-基于单片机的多自由度机械手臂控制器设计解析

唐山学院毕业设计设计题目:基于单片机的多自由度机械手臂控制器设计系别:信息工程系班级:11电气工程及其自动化3班姓名:刘亮指导教师:田红霞2015年6月1日基于单片机的多自由度机械手臂控制器设计摘要机械臂控制器作为机械臂的大脑,对于它的研究有着十分重要的意义。
随着微电子技术和控制方法的不断进步,以单片机作为控制器的控制系统越来越成熟。
本课题正是基于单片机的机械臂控制系统的研究。
本文首先介绍了国内外机械臂发展状况以及控制系统的发展状况。
其次,阐述了四自由度机械手臂控制系统的硬件电路设计及软件实现。
详细阐述了机械臂控制系统中单片机及其外围电路设计、电源电路设计和舵机驱动电路设计。
在程序设计中,着重介绍了利用微分插补法进行PWM调速的程序设计。
并给出了控制器软件设计及流程图。
最后,给出了系统调试中出现的软硬件问题,进行了详细的分析并给出了相应的解决办法。
关键词:机械臂单片机自由度舵机PWMDesign of Multi DOF Manipulator ControllerBased on MCUAbstractAs the brain of robot arm, manipulator controller is very important for its research.With the development of microelectronics technology and control method, the control system of MCU is becoming more and more mature.This thesis is based on the research of the manipulator control system of MCU.Firstly,it is introduced the development of the manipulator and the control system at home and abroad.Secondly,it is given the circuit and software design for the four DOF manipulator in this disertation.it is expatiated the Single Chip Microcomputer(SCM),the relative circuit design ,Power circuit design,and driver circuit design of manipulator control system.In the design of the program, the design of PWM speed regulation by differential interpolation is introduced emphatically. The software design and flow chart of the controller are given.Finally,it is presented the problems of hardware and software in practive given resolves.Key word: Manipulator;MCU;DOF;Steering engine;PWM目录1引言 (1)1.1研究的背景和意义 (1)1.2国内外机械臂研究现状 (2)1.2.1国外机械臂研究现状 (2)1.2.2国内机械臂研究现状 (3)1.3机械臂控制器的发展现状 (3)1.4本设计研究的任务 (4)2机械结构与控制系统概述 (5)2.1机械结构 (5)2.2控制系统 (6)2.3系统功能介绍 (8)2.4舵机工作原理与控制方法 (8)2.4.1概述 (8)2.4.2舵机的组成 (8)2.4.3舵机工作原理 (9)3系统硬件电路设计 (11)3.1时钟电路设计 (11)3.2复位电路设计 (11)3.3控制器电源电路设计 (12)3.4舵机驱动电路 (13)3.5串口通信电路设计 (13)4系统软件设计 (14)4.1四自由机械臂轨迹规划 (15)4.2主程序设计 (16)4.3舵机调速程序设计 (17)4.3.1舵机PWM信号 (17)4.3.2利用微分插补法实现对多路PWM信号的输出 (18)4.4初末位置置换子程序 (21)4.5机械爪控制程序 (22)4.6定时器中断子程序 (23)4.6.1定时器T1中断程序 (23)4.6.2定时器T0中断子程序 (24)5系统软硬件调试 (25)5.1单片机系统开发调试工具 (25)5.1.1编程器 (25)5.1.2集成开发环境Keil和Protues (25)5.2控制系统的仿真 (26)5.3软件调试 (27)5.4硬件调试 (27)5.5软硬件联合调试 (28)6结论 (29)谢辞 (30)参考文献 (31)附录 (32)1引言1.1研究的背景和意义机器人是传统的机械结构学结合现代电子技术、电机学、计算机科学、控制理论、信息科学和传感器技术等多学科综合性高新技术产物,它是一种拟生结构、高速运行、重复操作和高精度机电一体化的自动化设备。
本科毕业论文-基于单片机的多自由度机械手臂控制器设计

本科毕业论文-基于单片机的多自由度机械手臂控制器设计摘要:随着自动化技术的不断发展,机械手臂在工业生产中扮演着越来越重要的角色,越来越得到人们的关注。
现代机械手臂控制器尤其是多自由度机械手臂控制器的设计与实现成为了本领域中的研究热点。
本文基于单片机芯片设计了一种多自由度机械手控制器,采用了串行通信的方式从计算机发送命令控制机械手臂的动作。
在硬件设计方面,使用了AT89S52单片机作为主控制器,引入了五个伺服电机控制模块作为机械手的动力源,以及一组角度传感器作为手臂的姿态测量元件。
在软件设计方面,采用C语言编写程序,实现了机械手臂自动运动、复位、姿态检测等功能。
同时,对机械手臂的自动防撞、误操作检测等进行了设计。
最终实验表明,本文设计的多自由度机械手控制器具有较强的动作准确性和鲁棒性。
关键词:多自由度机械手,单片机,控制器,硬件设计,软件设计Abstract:With the continuous development of automation technology, the role of robotic manipulators in industrial production is becoming more and more important, and it has attracted more and more attention from people. The design and implementation of modern robotic controller, especially multi-degree-of-freedom robotic controller, has become a hot research topic in this field.In this paper, a multi-degree-of-freedom robotic arm controller based on MCU chip is designed, and the motion of the robotic arm is controlled by serial communication from the computer. In terms of hardware design, AT89S52 MCU is used as the main controller. Five servo motor control modules are introduced as the power source of the manipulator, and a set of angle sensors are used as the posture measurement element of the arm.In terms of software design, the program is written in C language, and the functions of automatic movement, reset and posture detection of the robotic arm are realized. At the same time, the automatic anti-collision and misoperation detection of the robotic arm are also designed. Finally, the experiment shows that the multi-degree-of-freedom robotic arm controller designed in this paper has strong motion accuracy and robustness.Keywords: multi-degree-of-freedom robotic arm, MCU, controller, hardware design, software design一、引言机器人技术早产业生产中广泛使用,将传统的出产系统向自动化和智能化方向推进。
基于51单片机多自由度机械手教学模型的设计

基于51单片机多自由度机械手教学模型的设计作者:欧家明来源:《科技视界》 2014年第16期欧家明(广东省南方高级技工学校,广东韶关 512023)【摘要】目前,51系列单片机广泛应用于各院校的单片机教学当中,而多自由度的机械手的教学应用也比较广泛。
本文探讨了利用51系列单片机进行多自由度机械手教学模型的设计,可作为自动控制等专业学生学习单片机应用和自动控制的教学模型。
【关键词】51系列单片机;自由度;机械手;舵机;PWM 按键消抖0 概述在各院校的开设的单片机课程当中,几乎都是采用51系列单片机进行教学。
51系列单片机是一种8位单片机,始祖是MCS-51单片机,由INTEL公司发明。
后来INTEL公司将核心技术授权其它公司,生产出兼容的51系列单片机。
现在国内教学比较常用的是美国ATMEL公司的AT89系列和深圳宏晶公司的STC89系列,采用都是兼容的51指令。
由于51单片机到现在还能到处见到它的踪影,可见其生命力之长。
掌握了51单片机的应用,对于进一步的学习AVR系列和PIC系列单片机就更有帮助了。
多自由度机械手教学模型,有助于学生更好的理解工业自动控制的过程,激发学习兴趣。
教学用的多自由度机械手可分为气动类和电动类的。
气动类需要压缩空气驱动汽缸作为动力;电动类可以由步进电机、直流电机等驱动。
以上的机械手结构比较复杂,制作起来费时费力。
本设计采用航模中的舵机作为动力,结合由51单片机组成的控制系统,可以对机械手进行多自由度控制。
不仅可以作为自动控制专业课程的教学演示,还可以在单片机的教学中作为目标机,供学生编程学习用,应用效率高。
1 机械手硬件组成1.1 舵机本设计采用舵机作为驱动。
舵机主要由以下几个部分组成:舵盘、减速齿轮组、位置反馈比例电位器、直流电机、控制电路板等。
控制电路板接受来自控制端口的控制信号,控制电机转动,电机带动一系列齿轮组,减速后传动至输出轴。
舵机的输出轴和位置反馈比例电位器是相连的,输出轴转动的同时,带动位置反馈比例电位器,转换为一比例电压反馈到控制电路板,然后控制电路板根据所在位置决定电机的转动方向和速度,达到目标后停止。
基于单片机的多自由度机械手臂设计

基于单片机的多自由度机械手臂设计近年来,机器人技术蓬勃发展,越来越多的高新机器人先后亮相。
在各种机器人中,带机械手臂类机器人应用最为广泛。
带机械手臂的机器人能模仿人的肢体动作,代替人的工作,特别是在重物装卸,精细加工中有着非常重要的优势。
机械手臂关节的自由度、灵活性和准确性是机械手臂机器人的工作前提。
文章基于单片机,设计一个小型机器人的一只手臂能在空间四个自由度转动。
加入机械手的机械结构,通过对四个电机的正反转实验论证方案的可靠性和可行性。
标签:单片机;四自由度;机械手臂;电机引言机器手臂作为一种工业技术装备,它能代替人搬运物件或货物分拣操作。
近年来工业机器人在工厂自动化改革中发挥着巨大的作用,代替人处理一些高危险、高危害、高工作负荷的工作,大大加快了生产效率,缩减了生产周期。
然而在这些自动化生产中,机械臂机器人占了最大的比重。
如汽车生产中的无缝焊接,钢厂里的钢材打包分拣,都用到了机器人机械臂。
机器手臂具有三个部分组成:机械臂、控制部分和工作部分。
机械臂的大小,规格决定了机械臂的应用,转角轴等,控制部分工业上一般是工控机,通过编程设计控制机械臂进行相应的操作。
工作部分由具体工作事项决定,如电焊机器人的电焊手,搬运机器人的挂钩。
1 系统功能介绍本设计采用电动式多自由度机器机器手臂模型,应用单片机控制,步进电动机的方式来驱动。
该手臂具有四个关节,每个关节可以前后转动,手臂转动采用4台微型步进电机驱动,可以完成前后左右360度摆臂等简单动作,系统控制图如图1控制部分采用80C51单片机,完成对电机的控制,即完成对手臂转动的控制。
2 软硬件设计机械手臂在动力传动方式上有连杆式、齿轮式和绳索式等。
采用齿轮结构是主流的机械手发展趋势,因为齿轮式机械手臂传动精度高、结构紧、承载高等优点。
随着工业的发展,对机械手臂要求越来越高,机械手臂向多自由度发展。
本设计为了简单起见,选用第三种传动方式——绳索式。
2.1 机械结构4自由度机械臂采用四个步进电机控制,如图2,步进电机1控制底座,实现自由旋转,步进电机2、3、4可自由旋转,完成伸展、收缩等动作。
机械手控制程序

#include<STC15F2K.h>#include<math.h>#define uchar unsigned char#define uint unsigned int#define Cycle 20000 //定义周期uint PWM_Value[6];uchar order=0; //中断步长uchar FLAG,DZ_FLAG;//PWM的输出端口sbit PWM_OUT0=P0^0; //舵机1 sbit PWM_OUT1=P0^1; //舵机2 sbit PWM_OUT2=P0^2; //舵机3 sbit PWM_OUT3=P0^3; //舵机4 sbit PWM_OUT4=P0^4; //舵机5 sbit PWM_OUT5=P0^5; //舵机6void Init_Timer0() //定时器0 初始化{TMOD=0x01;TH0=(65536-500)/256; //0.5msTL0=(65536-500)%256;AUXR&=0X7F; //12分频1T模式EA = 1;//打开总中断ET0 = 1;//打开定时器0中断TR0 = 1;//启动定时器0// PT0=1; //定时器0 设置为最高优先中断// PX0=0; // 外部中断0 设置最低中断}//延时void delay(uint us){while(us--);}void delayms(uint ms){{uchar i=100,j;for(;ms;ms--){while(--i){j=10;while(--j);}}}}//动作void action_duoji_1(uint mov1) {while(PWM_Value[0]!=mov1){if(PWM_Value[0]<mov1)PWM_Value[0]+=1;elsePWM_Value[0]-=1;delay(1000);}}void action_duoji_2(uint mov2) {while(PWM_Value[1]!=mov2){if(PWM_Value[1]<mov2)PWM_Value[1]+=1;elsePWM_Value[1]-=1;delay(2000);}}void action_duoji_3(uint mov3) {while(PWM_Value[2]!=mov3){if(PWM_Value[2]<mov3)PWM_Value[2]+=1;elsePWM_Value[2]-=1;delay(1000);}}void action_duoji_4(uint mov4){while(PWM_Value[3]!=mov4){if(PWM_Value[3]<mov4)PWM_Value[3]+=1;elsePWM_Value[3]-=1;delay(1000);}}void action_duoji_5(uint mov5){while(PWM_Value[4]!=mov5){if(PWM_Value[4]<mov5)PWM_Value[4]+=1;elsePWM_Value[4]-=1;delay(1000);}}/****************************************************************************** *********************************************************************************************** ***************/void action1() //初始动作{action_duoji_1(550);delayms(250);action_duoji_2(1500);delayms(250);action_duoji_3(530);delayms(250);action_duoji_4(580);delayms(250);action_duoji_5(1700);delayms(250);}void action2() //抓取前方物体{action1();action_duoji_1(555); //1舵机底层delayms(250);action_duoji_3(750); //抓取准备delayms(250);action_duoji_4(1300);delayms(250);action_duoji_5(1300);delayms(250);action_duoji_2(1200); //舵机23组合减少误差delayms(400);action_duoji_3(900);delayms(250);action_duoji_2(1150); //舵机23组合减少误差delayms(400);action_duoji_3(950);delayms(250);action_duoji_2(1100);delayms(250);action_duoji_3(1000);delayms(250);action_duoji_2(1050);delayms(250);action_duoji_3(1050);delayms(250);action_duoji_2(950);delayms(250);action_duoji_3(1100);delayms(250);action_duoji_2(850);delayms(250);action_duoji_3(1150);delayms(250); //组合完毕action_duoji_2(800);delayms(600);action_duoji_5(1600);delayms(1000);action_duoji_2(1500);delayms(1000); //抓取完毕action_duoji_1(1250);delayms(500);action_duoji_2(1000);delayms(1000);action_duoji_3(950);delayms(250);action_duoji_5(1200);delayms(250);action_duoji_2(1500);delayms(1000);action_duoji_4(580);delayms(250);action_duoji_3(580);delayms(250);action_duoji_1(550);action_duoji_5(1600);delayms(250); //完成物品放下}void main(void){FLAG=0;PWM_Value[0]=550;PWM_Value[1]=1500;PWM_Value[2]=600;PWM_Value[3]=580;PWM_Value[4]=1600;// PWM_Value[5]=800;delayms(500);Init_Timer0();while(1){//action1();//action2();action2();// action_duoji_5(800);// delayms(2000);// action_duoji_5(2200);// delayms(2000);while(1){EA=0;}}}void timer0(void) interrupt 1{switch(order){case 1:PWM_OUT0=1;TH0=-PWM_Value[0]/256; //第一路输出高电平时长TL0=-PWM_Value[0]%256;break;case 2:PWM_OUT0=0;TH0=-(5000-PWM_V alue[0])/256; //第一路输出低电平时长TL0=-(5000-PWM_Value[0])%256;break;case 3:PWM_OUT1=1;TH0=-PWM_Value[1]/256;TL0=-PWM_Value[1]%256;break;case 4:PWM_OUT1=0;TH0=-(5000-PWM_V alue[1])/256;TL0=-(5000-PWM_Value[1])%256;break;case 5:PWM_OUT2=1;TH0=-PWM_Value[2]/256;TL0=-PWM_Value[2]%256;break;case 6:PWM_OUT2=0;TH0=-(5000-PWM_V alue[2])/256;TL0=-(5000-PWM_Value[2])%256;break;case 7:PWM_OUT3=1;TH0=-PWM_Value[3]/256;TL0=-PWM_Value[3]%256;break;case 8:PWM_OUT3=0;TH0=-(5000-PWM_V alue[3])/256;TL0=-(5000-PWM_Value[3])%256;break;case 9:PWM_OUT4=1;TH0=-PWM_Value[4]/256;TL0=-PWM_Value[4]%256;break;case 10:PWM_OUT4=0;TH0=-(5000-PWM_V alue[4])/256;TL0=-(5000-PWM_Value[4])%256;/* break;case 11:PWM_OUT5=1;TH0=-PWM_Value[5]/256;TL0=-PWM_Value[5]%256;break;case 12:PWM_OUT5=0;TH0=-(5000-PWM_V alue[5])/256;TL0=-(5000-PWM_Value[5])%256; */order=0;break;default: order=0;}order++;}。
基于单片机的机械手设计

基于单片机的机械手设计摘要机械手是一种能够模仿人类手臂运动的智能机器人。
本文介绍了一款基于单片机的机械手的设计。
该机械手由五个自由度组成,其运动控制系统由单片机控制。
该机械手具有定位精度高、反应速度快、操作简便等优点。
理论分析和实验结果表明,该机械手设计具有较高的实用性和普适性。
关键词:机械手;单片机;自由度;控制系统;精度1. 引言近年来,智能机器人领域蓬勃发展,机械手作为一种具有广泛应用前景的机器人,已成为研究热点。
机械手具有广泛的应用范围,如生产线上的自动化生产,医疗手术,危险环境中的救援等。
因此,基于单片机的机械手的设计及其控制系统研究具有重要意义。
2. 设计思路本文设计的机械手由五个自由度组成,能够完成抓取、举起、放置等基本操作。
本文的设计思路是基于单片机控制系统,通过驱动电机实现机械手的运动。
机械手的五个自由度分别为旋转、抬升、伸展、弯曲和手掌张合。
机械手的控制系统主要由单片机、电机驱动器和传感器组成。
其中,单片机采用STM32F407主控制器,并通过PWM信号控制电机运动。
传感器采用光电编码器对电机转速和位置进行反馈。
图2 机械手的控制系统机械手的驱动电机由直流电机和舵机组成。
直流电机主要用于实现伸展和弯曲动作,而舵机用于实现手掌张合动作。
机械手的轴承部件采用滚珠轴承,能够有效减小摩擦力,提高机械手的运动精度和操作稳定性。
3. 理论分析本文采用MATLAB建立机械手的数学模型,并进行了理论分析。
机械手在执行任务时需要完成一系列位置和姿态变化,因此,机械手的位置和姿态控制是机械手设计的重要指标。
机械手的位置精度取决于电机性能和轴承部件的精度。
电机性能包括电机的输出电功率、转速、转矩等。
机械手的姿态精度取决于机械手的运动学性能。
在不同姿态下,机械手的姿态解算需要通过角度解算和矩阵变换等方法进行计算。
在机械手的设计中,需要考虑机械手的运动学性能和机械手的实际操作需求。
4. 实验结果本文通过实验验证了机械手设计的有效性和性能优越性。
51单片机机械臂设计流程

51单片机机械臂设计流程
设计一个基于51单片机的机械臂需要经过以下几个步骤:
1. 需求分析:明确机械臂需要完成的任务,例如抓取、移动、释放等。
根据任务需求,确定机械臂的关节数量、自由度以及工作范围等。
2. 机械设计:根据需求,设计机械臂的各个关节和结构。
这一步通常需要使用CAD软件(如SolidWorks、AutoCAD等)进行建模和仿真。
3. 控制系统设计:确定使用51单片机作为主控制器,并为其编写控制程序。
根据机械臂的自由度和关节数量,选择合适的电机和驱动器,如步进电机、舵机等。
4. 硬件搭建:根据设计,采购并搭建控制系统所需的硬件,包括51单片机、电机驱动器、传感器等。
同时,也需要设计和制作机械臂的电路板。
5. 软件编程:使用C语言或汇编语言为51单片机编写控制程序,实现对机械臂的精确控制。
这一步需要编写各种算法,如PID控制、模糊控制等,以实现精确的运动控制。
6. 系统调试:在完成硬件搭建和软件编程后,需要进行系统调试,确保机械臂能够按照预期工作。
这一步可能需要反复修改硬件和软件,直到达到满意的效果。
7. 优化和完善:在初步实现机械臂的基本功能后,需要进行优化和完善,以提高机械臂的性能和工作效率。
以上是一个基于51单片机的机械臂设计的基本流程,具体的设计过程可能会因实际需求和条件的不同而有所调整。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*****五自由度机器手臂舵机控制**********/
/*****中国地质大学(武汉)**************/
/***机械与电子信息学院071082班王聪***/
#include<reg
52."h>
#include<zlg
7289."h>
/************************************************************/#defi ne uint unsigned int
#define uchar unsigned char
sbit P00=P0^0; //底座旋转舵机
sbit P01=P0^1; //腰部舵机
sbit P02=P0^2; //肘部舵机
sbit P03=P0^3; //腕部舵机
sbit P04=P0^4; //夹持舵机
uchar Key=0xff;//默认键值
uchar k=0xff;
uchar flag=0;
uchar dat;
uchar M=11;
uchar dj0,dj1,dj2,dj3,dj4;
uchar a=0;
uchar c=0;
uchar beep=1;
/***********************************************************/void Delay(uchar n)//毫秒延时{uint i,j;
for(i=n;i>0;i--)
for(j=0;j<1140;j++);}
void Init_Timer0(void){TMOD |= 0x01;
TH0=0xff;//定时器初值,定时100us
TL0=0x9c;
EA=1;
ET0=1;
TR0=1;}void INT0_SVC() interrupt 0{Key = ZLG7289_Key();
k = Key; //Key的值复制到临时变量k中
Key = 0xFF; //Key恢复为无按键状态
flag=1;}void Init_zlg(void){Delay
(10); //延时30ms,等待ZLG7289复位完毕
ZLG7289_Init
(4); //调用ZLG7289的初始化函数
Delay
(20);
ZLG7289_Reset();
Delay
(10);}void Timer0_isr(void) interrupt 1 using 1
//中断函数内部太过复杂,影响定时器计时精度,堆栈是否会溢出出问题?有待测试...{a+=1;
c+=1;
TH0=0xff;
TL0=0x9c;
if(a==M)//高电平持续时间{a=0;
beep=0;}if(c==200)//低电平持续时间为(200-M)*100us{a=c=0;
beep=1;}}
void mov(uchar t ,uchar p,uchar n)//单步动作完成函数,t为控制执行时间参数,n为舵机编号选择{uchar i,j;
M=p;//所需位置信息赋给舵机脉宽变量
for(i=0;i<150;i++){if(flag)
break;
for(j=0;j<t;j++){switch(n){case 0:{P00=beep;dj0=p;break;}
case 1:{P01=beep;dj1=p;break;}
case 2:{P02=beep;dj2=p;break;}
case 3:{P03=beep;dj3=p;break;}
case 4:{P04=beep;dj4=p;break;}
default:
break;}}}}
void auto_mov()//自动执行一串动作{mov(100,5,0);
mov(60,7,1);
mov(100,22,3);
mov(200,17,4);
mov(60,10,1);
mov(60,8,2);
mov(100,22,0);
mov(80,7,1);
mov(80,10,2);
// mov(100,20,3);
mov(200,8,4);
mov(60,11,1);
mov(60,11,2);
mov(60,18,3);}void key_test(){for (;;){flag=0;
if ( k != 0xFF ) //通过临时变量k判断是否有键按下,有则显示出来{ dat = k / 10;
ZLG7289_Download(1,2,0,dat);
dat = k - dat * 10;
ZLG7289_Download(1,3,0,dat);
//以下部分调节高电平脉宽,控制舵机转角
switch(k){case 0:{ if(dj0>=5)dj0--;M=dj0;break;}
case 1:{ if(dj1>=5)dj1--;M=dj1;break;} case 2:{ if(dj2>=5)dj2--;M=dj2;break;} case 3:{ if(dj3>=5)dj3--;M=dj3;break;} case 4:{ if(dj0<=23)dj0++;M=dj0;break;} case 5:{ if(dj1<=23)dj1++;M=dj1;break;} case 6:{ if(dj2<=23)dj2++;M=dj2;break;} case 7:{ if(dj3<=23)dj3++;M=dj3;break;} case 8:{ if(dj4<=23)dj4++;M=dj4;break;} case 9:{ if(dj4>=5)dj4--;M=dj4;break;} case 10:{auto_mov();k=0xff;break;} default:
break;}while(k==0||k==4){P00=beep; if(flag)
break;}while(k==1||k==5){P01=beep; if(flag)
break;}while(k==2||k==6){P02=beep; if(flag)
break;}while(k==3||k==7){P03=beep; if(flag)
break;}while(k==8||k==9){P04=beep; if(flag)
break;}}
Delay
(5);}}
void main(){Init_Timer0();//初始化定时器设置Init_zlg();//初始化周立功7289
IT0 = 1; //负边沿触发中断
EX0 = 1;
dj0=dj1=dj2=dj3=dj4=M;
while(k==0xff)
P00=P01=P02=P03=beep;
key_test();}。