资源简介

本文介绍了单片机控制步进电机的系统。在电气时代的今天,电动机一直在现代化的生产和生活中起着十分重要的作用。步进电机是机电控制中一种常用的执行机构, 其原理是通过对它每相线圈中的电流和顺序切换来使电机作步进式旋转。本系统的硬件组成主要有:51系列单片机、L298N驱动电路、直流电压源等。同时对系统设计中所用到的一些软件都进行了介绍。本系统用51系列单片机和L298N电机驱动芯片并加入了键盘来控制步进电机实现转向、转速等。系统中使用的是永磁式二相步进电机,相应的驱动和控制电路对于其整体性能起着非常重要的作用。 经系统调试,能够很好的控制步进电机的正反转、加减速、急停,从而达到预期目的。整个系统具有结构简单、可靠性高、成本低和实用性强等特点,具有较高的通用性和应用推广价值。

资源截图

代码片段和文件信息

#include“reg51.h“
#include“intrins.h“
#include“math.h“
#include“absacc.h“
#define  PORTA  XBYTE[0x8500]
#define  PORTB  XBYTE[0x8502]
#define  PORTC  XBYTE[0x8504]
#define  PORTC0 XBYTE[0x8506]
#define nop _nop_()
#define Right_RUN  1
#define Left_RUN  0
unsigned long RunSpeed=76;
unsigned  char  RUNState=1;
sbit  RS=P2^0;
sbit  RW=P2^1;
sbit  E=P2^2;
sbit P17=P1^7;
bit   flag=0;
unsigned char xx[]=“speed(n/min):“;
unsigned char SD[]=“76“;
char  state[2][14]={“direction:cw““direction:ccw“};
unsigned char  FLGINMA=0;
unsigned  char  ts=0x01;
unsigned  int   a;
main()
{
  void  OPJIAN();
  unsigned char JIAN();
  unsigned char JIANZHI();
   void  speed();
 void  SHOW_LCD();
 void  show_state();
 void  write1();
 void  writ2(unsigned char i);
 void  delay();
 void time();
 void  busy();
 unsigned  char  i;
  i=0x90;
  PORTC0=i;
  i=0x01;
  TMOD=i;
  t=0x10;
  a=0x0f;
  TH0=0x10;
  TL0=0x0f;
  FLG=INMA;  
  SHOW_LCD();
  show_state();
  EA=1;
  ET0=1;
  TR0=1;
while(1)
{
 i=JIAN();
     if(i!=0)
{
  time();
  time();
 }
i=JIAN();
if(i!=0)
{
INMA=JIANZHI();
   OPJIAN();
 time();
}
  if(FLG!=INMA||flag==1)
   {  FLG=INMA;
SHOW_LCD();
      show_state();
flag=0;
}
  }
  }
 void SHOW_LCD()/*lcd设置程序*/
 {
  P1=0x38;
  write1();
  delay();
  P1=0x38;
  write1();
  delay(); 
  P1=0x38;
  write1();
  delay();
  P1=0x01;
  write1();
 delay();
  P1=0x0f;
  write1();
 delay();
  P1=0x06;
  write1();
  delay();
  P1=0x0c;
  write1();
  
 }
void  show_state()/*状态显示程序*/
  {
   unsigned char i=0;
   P1=0x80;
write1();
 while(xx[i]!=‘\0‘)
  {
    writ2(xx[i]);
 i++;
 delay();
 }
   i=0;
  while(SD[i]!=‘\0‘)
    {
  writ2(SD[i]);
  delay();
  i++;
 
  }
  P1=0xc0;
  write1();
  i=0;
  if(RUNState==Right_RUN)
 while(state[0][i]!=‘\0‘)
   {
  writ2(state[0][i]);
  i++;
 }
else
  if(RUNState==Left_RUN)
  while(state[1][i]!=‘\0‘)
   {
  writ2(state[1][i]);
   i++;
 }
   }
void  write1()/*lcd写控制字*/
 {
   RS=0;
RW=0;
E=0;
busy();
E=1;
  }
void  writ2( unsigned char i)/*lcd写数据*/
 { P1=i;
   RS=1;
RW=0;
E=0;
   busy();
E=1;
}
 
 void delay()/*延时程序*/
{
  unsigned char  i;
  for(i=0;i<100;i++)
    {
    i=i;
 }
 
}
void time()
{ unsigned char ij;
for(i=0;i<100;i++)
 { 
for(j=0;j<30;j++)
 {
   j=j;
  }
  }
}

void busy()         //判断LCD是否忙
{    
 do
 {
 P1=0xff;
  RS=0;
     RW=1;
     E=0;
  nop;
  E=1;
  }while(P17==1);
  
 }
 unsigned char JIAN()/*判断是否有键按下*/
 {
  unsigned char  ij;
     i=0xff;
     PORTA=i;
     time();
     i=0x00;
     PORTB=i;
     j=PORTA;
     j=~j;
     j=j&(0x0f);
     return  j;
 }
unsigned char JIANZHI()/*读键值程序*/
 {
   unsigned ijdkm=1;
 i=0xfe;
 k=0x01;
 do
 {
 PORTB=i;
 j=PORTA;
 m=j&(0x01);
    if(m==0)
   d=k/2;
 else
     {
 m=j&(0x02);
     if(m

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     181508  2007-08-18 20:16  C语言驱动程序\步进电机.DSN

     文件     181508  2007-08-18 20:16  C语言驱动程序\Last Loaded 步进电机.DBK

     文件        814  2007-09-19 21:54  C语言驱动程序\步进电机.PWI

     文件        807  2007-09-16 22:50  C语言驱动程序\d.Opt

    .......      1658  2007-08-17 16:47  C语言驱动程序\d_Uv2.Bak

     文件       4103  2007-08-18 20:13  C语言驱动程序\d.c

     文件          0  2007-09-16 22:02  C语言驱动程序\d.plg

     文件      10370  2007-08-18 20:13  C语言驱动程序\d.LST

     文件      15057  2007-08-18 20:13  C语言驱动程序\d.OBJ

     文件         19  2007-08-18 20:13  C语言驱动程序\d.lnp

     文件      16616  2007-08-18 20:13  C语言驱动程序\d.M51

     文件      13292  2007-08-18 20:13  C语言驱动程序\d

     文件       3696  2007-08-18 20:13  C语言驱动程序\d.hex

    .......       807  2007-08-18 20:14  C语言驱动程序\d_Opt.Bak

     文件       1662  2007-08-18 20:05  C语言驱动程序\d.Uv2

     目录          0  2007-08-16 15:02  C语言驱动程序

----------- ---------  ---------- -----  ----

               432135                    17


评论

共有 条评论