单片机 > 单片机程序设计 > 详情

单片机控制的松下伺服电机正反转程序

发布时间:2024-10-08 发布时间:
|

 //    
//  文 件 名: download.c    
//    
//  目标对象: AT89S52    
//    
//  编 译 器: ISP    
//    
//  功能描述: 下料部单独控制程序    
//    
//  修改版本: 0.0    
//   
//    
//***************************************************************************    
    
#include     
#includeCC.H>    
#include     
#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口的接键盘的中间四位置1    
    KValue=P3;    
    KValue|=0xc3;      //将未接键的4位置1    
    if(KValue==0xff)    //中间4位均为1,无键按下      
        return(0);      //返回    
    mDelay(10);    //延时10ms,去键抖    
    KValue=P3;    
    KValue|=0xc3;      //将未接键的4位置1    
    if(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.00111300s    
mDelay(1);    
mDelay(2);    
mDelay(3);    
mDelay(4);    
mDelay(10);    
mDelay(20);    
for(m=0;m<100;m++)    
{    
RIGHT_MOVE_SERVO(25000);    
//mDelay(20);//延时0.00023s    
LEFT_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);    
                }    
            }    
        }    
}  

关键字:单片机控制  松下伺服电机  正反转程序

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
MSP430低功耗模式-while循环失效