3439|0

280

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

XL2000步进电机完整版C程序(带正反转与加减速) [复制链接]

#include        //51芯片管脚定义头文件
#include          //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint  unsigned int

uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
unsigned int speed=5;
sbit  K1   = P2^0;       //正转
sbit  K2   = P2^1;       //反转
sbit  K3   = P2^2;       // +
sbit  K4   = P2^3;       // -
sbit  K5   = P2^4;         // 停止
sbit  BEEP = P3^3;       //蜂鸣器
      
/********************************************************/
/*                                                  
/* 延时t毫秒
/* 11.0592MHz时钟,延时约1ms                                    
/*                                                      
/********************************************************/
//char code SST516[3] _at_ 0x003b;
void delay(uint t)
{                           
   uint k;
   while(t--)
   {
     for(k=0; k<125; k++)
     { }
   }
}

/**********************************************************/
void delayB(uchar x)    //x*0.14MS
{
   uchar i;
   while(x--)
   {
     for (i=0; i<100; i++)
     { }
   }
}

/**********************************************************/
void beep()
{
   uchar i;
   for (i=0;i<100;i++)
    {
     delayB(4);
     BEEP=!BEEP;                 //BEEP取反
    }
     BEEP=1;                    //关闭蜂鸣器
}

/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void  motor_ffw()
{
   uchar i;
   uint  j;
   for (j=0; j<12; j++)         //转1*n圈
    {
            if(K5==0)
        {break;}                //退出此循环程序
      for (i=0; i<8; i++)       //一个周期转30度
        {
          P1 = FFW;          //取数据
          delay(speed);            //调节转速
        }
    }
}

/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void  motor_rev()
{
     uchar i;
         uint  j;
         for (j=0; j<12; j++)       //转1×n圈
      {
            if(K5==0)
         {break;}               //退出此循环程序
        for (i=0; i<8; i++)     //一个周期转30度
        {
          P1 = REV;          //取数据
          delay(speed);         //调节转速
        }
      }
}


/********************************************************
*                                                      
*  主程序                                               
*                                                      
*********************************************************/

main()
{
      uchar r,N=100;               //N 步进电机运转圈数
         
   while(1)
    {  
      if(K1==0)
          {
        beep();

        while(N==100)
         {
                   motor_ffw();           //电机正转
                   if(K5==0)
                  {beep();break;}       //退出此循环程序


                if(K3==0)                        //加速开关
                   {  
                     unsigned int dou;
                     for(dou=0;dou<20;dou++)
                         speed--;               //加速
                         if(speed==0)
                         { break;}
                             speed=2;
                         }
                    if(K4==0)            //减速开关
                        speed++;                //减速
             }
         }
          else if(K2==0)
       {
            beep();

           while(N==100)
           {
               motor_rev();       //电机反转
                   if(K5==0)
                  {beep();break;}    //退出此循环程序

            if(K3==0)                           //加速开关
                   {unsigned int dd;
                   for(dd=0;dd<20;dd++)
                   speed--;                  
                   if(speed==0)
                   {break;}
                   speed=2;
                        }

                   if(K4==0)
                   speed++;  //减速
                 }
       }
          else  
                 P1 = 0xf0;
    }
}

/********************************************************/  
此帖出自单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表