⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 步进电机.c

📁 L298N直流电机步进电机两用驱动器
💻 C
字号:
/********************************************************************
                            汇诚科技

实现功能:上位机控制步进电机程序
使用芯片:AT89S52 或者 STC89C52
晶振:11.0592MHZ
编译环境:Keil
作者:zhangxinchunleo
网站:www.ourhc.cn
淘宝店:汇诚科技 http://shop36330473.taobao.com
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     

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

 #include<reg52.h>
 #define uchar unsigned char
 #define uint unsigned int
 
 //电机控制专用数据
/*****P1.0=A ;P1.1=B ;P1.2=B' ; P1.3=A'****/ 

/*******************************正转数组**************************************************/
  code uchar runz[8]={
                      0x05,0x01,0x09,0x08,0x0a,0x02,0x06,0x04
					 }; 
                              //两相四线八拍工作方式
/*******************************反转数组**************************************************/
  code uchar runf[8]={
                      0x04,0x06,0x02,0x0a,0x08,0x09,0x01,0x05
					 }; 
                               //两相四线八拍工作方式
 uchar keycan=0;		//键值
 uchar i,j,k,z;
 unsigned char receive_count; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
 uchar add_temp=0,rdu_temp=0;//定义加减速的控制值
 uchar oper_temp=0;

 int y=10;//定义转动速度,数值越大电机转速越慢反之则快

 sbit P2_0=P2^0;//正转按键
 sbit P2_1=P2^1;//反转按键
 sbit P2_2=P2^2;//电机加圈
 sbit P2_3=P2^3;//电机减圈

/***************************************************************************
                               函数声明
***********************************************************************/
 void delay(i) ;
 void zrun();
 void frun() ;
 void Init_Com(void);
 
 /********************************************************************
                       主程序
 *********************************************************************/
main()
{ 	 
   Init_Com();
   while(1)
     {
 
	   if ( RI ) //扫描判断是否接收到数据,
         {
            receive_count = SBUF; 
            RI=0; //RI 
	      	 //判断串口接收的字符类型
            switch( receive_count) 
		           {		  
		                 case 'A': keycan=1;break;	    //接收到的字符为B 是keycan=1
			             case 'B': keycan=2;break;		//接收到的字符为C 是keycan=1
			             case 'C': add_temp=1;break;    //接收到的字符为D 是电机加速add_temp=1
			             case 'D': rdu_temp=1;break;  	//接收到的字符为E是 电机加减速rdu_temp=1
			             case 'E': 
								    keycan=0;
									rdu_temp=0;
									add_temp=0;
									break;	   //接收到的字符为F 是keycan=0
		            }
	     }
       switch (keycan)	 //判断电机的工作状态
	       {
			  case 0: break;
	          case 1:
			         { 
					    zrun();
					  }
					  break;
	          case 2: 
			          {
					     frun();
					   }
					   break;
	         }
    if(P2_0==0) //如果电机正转按键按下
      {
        keycan=1;	 //键值等于1
       }
    if(P2_1==0) //如果电机反转按键按下
      {
        keycan=2;	 //键值等于2
       }

    if((P2_2==0)||(rdu_temp==1)) //  电机加速
         {
	         delay(200);
             y=y+2;	
		    rdu_temp=0;
          }
   if((P2_3==0)||(add_temp)) 
        {	
	      delay(200);		 // 电机减速
		  y=y-2;
		  add_temp=0;
        }
   }
}
 
/***************************************************************************************
		      串口初始化函数
***************************************************************************************/
void Init_Com(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}

 /********************************************************************
                      延时程序
 *********************************************************************/ 	 
void delay(i)//延时函数
  {
      for(j=0;j<i;j++)
      for(k=0;k<150;k++);
  }

 /********************************************************************
                      步进电机正传程序
 *********************************************************************/ 

void zrun()// 正转运行
{  

	   for(z=0;z<8;z++)
         {
             P1=runz[z];
             delay(y);
         }
}
 /********************************************************************
                       步进电机反转程序
 *********************************************************************/ 
void frun()// 反转运行
 {
	    for(z=0;z<8;z++)
          {
            P1=runf[z];
            delay(y);
          }
}
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -