电子产业一站式赋能平台

PCB联盟网

搜索
查看: 2629|回复: 1
收起左侧

单片机C语言实例-382-步进电机

[复制链接]
发表于 2022-4-8 10:58:32 | 显示全部楼层 |阅读模式
单片机C语言实例-382-步进电机

#include <reg52.h>       //51芯片管脚定义头文件
#include <intrins.h>       //内部包含延时函数 _nop_();

#define uchar unsigned char
#define uint  unsigned int

sbit  K1=P1^2;
uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
uchar rate ;        
/********************************************************/
/*                                                  
/* 延时
/* 11.0592MHz时钟,                                    
/*                                                      
/********************************************************/
void delay()
{                           
   uchar k;
   uint s;
   k = rate;
   do
    {
       for(s = 0 ; s <125 ; s++) ;  
    }while(--k);
}
/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
/********************************************************/
void  motor_ffw()
{
   uchar i;
   uint  j;
   for (j=0; j<16; j++)         //转1*n圈
    {
                         //退出此循环程序
      for (i=0; i<8; i++)       //一个周期转45度
        {
          P0 = FFW;          //取数据
          delay();            //调节转速
        }
    }
}

/********************************************************
*                                                      
*步进电机运行                                               
*                                                      
*********************************************************/
void  motor_turn()
{
   uchar x;
   rate=0x10;
   x=0x0f;
   do
     {
        motor_ffw();               //加速
        rate--;
     }while(rate!=0x02);

   do
     {     
        motor_ffw();               //匀速
       x--;
     }while(x!=0x01);

   do
     {
        motor_ffw();              //减速
        rate++;
     }while(rate!=0x0a);   
}

/********************************************************
*                                                      
*  主程序                                               
*                                                      
*********************************************************/
main()
{     

   P0=0x0f;

   while(1)
  {
      P0=0x0f;
      if(K1==0)
     {
       motor_turn();
     }
  }
}

/********************************************************/


更多详情参考附件文档
+08:00C165联盟网1053.png
游客,如果您要查看本帖隐藏内容请回复

回复

使用道具 举报

0

主题

10

帖子

46

积分

一级会员

Rank: 1

积分
46
发表于 2022-4-8 17:07:53 | 显示全部楼层
                              来
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表