打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
单片机控制松下伺服电机正反转程序
//***************************************************************************////  文 件 名: download.c//////  目标对象: AT89S52////  编 译 器: ISP////  功能描述: 下料部单独控制程序////  修改版本: 0.0////  创建日期:2009-03-09////***************************************************************************#include <REG52.H>#include<ABSACC.H>#include <INTRINS.H>#define uchar unsigned char#define uint  unsigned int//***************************************************************************sbit    DOWNLOAD_HS30806_Y_PULSE1       =   P1^0;//HS30806_Y电机脉冲-sbit    DOWNLOAD_HS30806_Y_DIR      =   P1^1;//HS30806_Y电机方向-sbit    DOWNLOAD_HS30806_X_PULSE1       =   P1^2;//HS30806_X电机脉冲-sbit    DOWNLOAD_HS30806_X_DIR      =   P1^3;//HS30806_X电机方向-sbit    SERVO_PULSE1        =   P3^0;//伺服电机脉冲-sbit    SERVO_DIR       =   P3^3;//伺服电机方向-sbit    SERVO_ON    =   P3^2;//伺服ON使能sbit    QIGANG=P3^1;sbit    SERVO_POINT=P2^0;sbit    Y_POINT=P2^1;sbit    S2 = P3^2;sbit    S3 = P3^3;sbit    S4 = P3^4;sbit    S5 = P3^5;//****************************************************************************//延时1us//****************************************************************************void mDelay(uchar DelayTime1){uchar i=0;for(;DelayTime1>0;DelayTime1--){for(i=0;i<0x16;i++){}}}//具体延时时间=DelayTime1*[10+3*m]+10个指令周期/* void mDelay(uint DelayTime1){for(;DelayTime1>0;DelayTime1--){}}*/void Delay(){;;}//***************************************************************************//下料部Y右转程序//***************************************************************************void RIGHT_MOVE_DOWNLOAD_HS30806_Y(uint Pluse1_num){DOWNLOAD_HS30806_Y_DIR=1;DOWNLOAD_HS30806_Y_PULSE1   =   1;//脉冲负mDelay(20);for(;Pluse1_num>0;Pluse1_num--){DOWNLOAD_HS30806_Y_PULSE1   =   ~DOWNLOAD_HS30806_Y_PULSE1;//脉冲负mDelay(20);DOWNLOAD_HS30806_Y_PULSE1   =   ~DOWNLOAD_HS30806_Y_PULSE1;//脉冲负mDelay(20);}}//***************************************************************************//下料部Y左转程序//***************************************************************************void LEFT_MOVE_DOWNLOAD_HS30806_Y(uint Pluse2_num){DOWNLOAD_HS30806_Y_DIR=0;DOWNLOAD_HS30806_Y_PULSE1   =   1;//脉冲负mDelay(20);for(;Pluse2_num>0;Pluse2_num--){DOWNLOAD_HS30806_Y_PULSE1   =   ~DOWNLOAD_HS30806_Y_PULSE1;//脉冲负mDelay(20);DOWNLOAD_HS30806_Y_PULSE1   =   ~DOWNLOAD_HS30806_Y_PULSE1;//脉冲负mDelay(20);}}//***************************************************************************//下料部Y停止程序//***************************************************************************void DOWNLOAD_HS30806_Y_Stop(){DOWNLOAD_HS30806_Y_DIR=0;DOWNLOAD_HS30806_Y_PULSE1   =   1;//脉冲负mDelay(20);}//***************************************************************************//下料部X右转程序//***************************************************************************void RIGHT_MOVE_DOWNLOAD_HS30806_X(uint Pluse1_num){DOWNLOAD_HS30806_X_DIR=1;DOWNLOAD_HS30806_X_PULSE1   =   1;//脉冲负mDelay(20);for(;Pluse1_num>0;Pluse1_num--){DOWNLOAD_HS30806_X_PULSE1   =   ~DOWNLOAD_HS30806_X_PULSE1;//脉冲负mDelay(20);DOWNLOAD_HS30806_X_PULSE1   =   ~DOWNLOAD_HS30806_X_PULSE1;//脉冲负mDelay(20);}}//***************************************************************************//下料部X左转程序//***************************************************************************void LEFT_MOVE_DOWNLOAD_HS30806_X(uint Pluse2_num){DOWNLOAD_HS30806_X_DIR=0;DOWNLOAD_HS30806_X_PULSE1   =   1;//脉冲负mDelay(20);for(;Pluse2_num>0;Pluse2_num--){DOWNLOAD_HS30806_X_PULSE1   =   ~DOWNLOAD_HS30806_X_PULSE1;//脉冲负mDelay(20);DOWNLOAD_HS30806_X_PULSE1   =   ~DOWNLOAD_HS30806_X_PULSE1;//脉冲负mDelay(20);}}//***************************************************************************//下料部X停止程序//***************************************************************************void DOWNLOAD_HS30806_X_Stop(){DOWNLOAD_HS30806_X_DIR=0;DOWNLOAD_HS30806_X_PULSE1   =   1;//脉冲负mDelay(20);}//***************************************************************************//伺服电机右转程序//***************************************************************************void RIGHT_MOVE_SERVO(uint Pluse1_num){//SERVO_ON  =   0;//mDelay(100);SERVO_DIR   =   1;mDelay(3);SERVO_PULSE1    =   1;//脉冲负for(;Pluse1_num>0;Pluse1_num--){SERVO_PULSE1    =   ~SERVO_PULSE1;//脉冲负mDelay(3);//  mDelay(2);SERVO_PULSE1    =   ~SERVO_PULSE1;//脉冲负mDelay(3);//  mDelay(2);}}//***************************************************************************//伺服电机左转程序//***************************************************************************void LEFT_MOVE_SERVO(uint Pluse2_num){//  SERVO_ON    =   0;//  mDelay(100);SERVO_DIR   =   0;mDelay(33);SERVO_PULSE1    =   1;//脉冲负for(;Pluse2_num>0;Pluse2_num--){SERVO_PULSE1    =   ~SERVO_PULSE1;//脉冲负//Delay();mDelay(3);SERVO_PULSE1    =   ~SERVO_PULSE1;//脉冲负//Delay();//mDelay(3);}}//***************************************************************************//伺服电机停止程序//***************************************************************************void SERVO_PULSE1_Stop(){SERVO_DIR=0;SERVO_PULSE1    =   1;//脉冲负mDelay(20);}//***************************************************************************//键盘处理程序//***************************************************************************uchar Key(){uchar KValue;uchar tmp;P3|=0x3c;           //将P3口的接键盘的中间四位置1KValue=P3;KValue|=0xc3;       //将未接键的4位置1if(KValue==0xff)    //中间4位均为1,无键按下return(0);      //返回mDelay(10);     //延时10ms,去键抖KValue=P3;KValue|=0xc3;       //将未接键的4位置1if(KValue==0xff)    //中间4位均为1,无键按下return(0);      //返回//如尚未返回,说明一定有1或更多位被按下for(;;){   tmp=P3;if((tmp|0xc3)==0xff)break;      //等待按键释放}return(KValue);}void KProce(uchar KValue)   //键值处理{if((KValue&0x04)==0)LEFT_MOVE_SERVO(10000);//RIGHT_MOVE_DOWNLOAD_HS30806_X(2000);//QIGANG=0;if((KValue&0x08)==0)RIGHT_MOVE_SERVO(10000);//LEFT_MOVE_DOWNLOAD_HS30806_X(2000);//QIGANG=1;if((KValue&0x10)==0)SERVO_ON    =   0;mDelay(100);//  RIGHT_MOVE_DOWNLOAD_HS30806_Y(2000);if((KValue&0x20)==0)SERVO_ON    =   1;mDelay(100);//LEFT_MOVE_DOWNLOAD_HS30806_Y(2000);}//***************************************************************************//初始化程序//***************************************************************************void    init(){//  P0=0xFF;//  P1=0xFF;//  P2=0xFF;//  P3=0xFF;P3=0xFD;mDelay(1000);while(S2==1){LEFT_MOVE_DOWNLOAD_HS30806_Y(1);}RIGHT_MOVE_DOWNLOAD_HS30806_Y(1600);while(S3==1){LEFT_MOVE_DOWNLOAD_HS30806_X(1);}RIGHT_MOVE_DOWNLOAD_HS30806_X(1600);}//***************************************************************************//主函数//***************************************************************************/*void main(){uchar KValue,m;//,n,flag;               //存放键值;//g init();////SERVO_ON  =   0;//mDelay(100);//延时0.00111300smDelay(1);mDelay(2);mDelay(3);mDelay(4);mDelay(10);mDelay(20);for(m=0;m<100;m++){RIGHT_MOVE_SERVO(25000);//mDelay(20);//延时0.00023sLEFT_MOVE_SERVO(25000);mDelay(20);}while(1){//  for(m=0;m<100;m++)//  {//  RIGHT_MOVE_DOWNLOAD_HS30806_Y(800);//  }for(;;){   KValue=Key();           //调用键盘程序并获得键值if(KValue)              //如果该值不等于0{KProce(KValue); //调用键盘处理程序}}}}*/void Initia(){LEFT_MOVE_SERVO(1);mDelay(6);}void main(){Initia();RIGHT_MOVE_SERVO(100);while(SERVO_POINT==0)while(1){while(S2==0){while(1){RIGHT_MOVE_SERVO(100);mDelay(20);LEFT_MOVE_SERVO(100);mDelay(20);}}}}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
DIY一个自己喜欢的瓦力吧!
发那科伺服调整系列教程|伺服调整SERVO GUIDE软件的使用(上)
解读FANUC系统SERVO SETTING画面
发那科机器人维修出现SERVO
周报139期 | 关于PLC三十问解答!
每转移动量与每转脉冲数该如何设置?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服