资源简介

51单片机的步进电机控制,lcd1602显示电机转动方向及转速,用矩阵键盘调整方向及速度,包含c源码及proteus仿真

资源截图

代码片段和文件信息

/***************************************************
程序使用1毫秒定时器中断实现转速精确控制
步进电机用8拍驱动(A-AB-B-BC-C-CD-D-DA)
****************************************************/
#include 
#include “LCD1602.H“


#define   uchar unsigned char 
#define   uint  unsigned int 
#define   ulong unsigned long

/*****端口定义************/
#define P_key  P3
sbit motor_a=P1^0;
sbit motor_b=P1^1;
sbit motor_c=P1^2;
sbit motor_d=P1^3;

bit   run=0;
uint  speed;
uint  temp_t1temp_t2;
uchar KeyValue ;
uchar motor_step;

void  Disply(void); //显示
uchar GetKey(void);//返回键盘值0--16
void  ScanKey(void);//键盘扫描处理
void  SetMotorSpeed(uint nSpeed);//设置电机转速 nSpeed:转速 step/s
void  delayNms(uint z);//延时
 
/*****主函数************/
void main()
{
   lcd1602_init();
   motor_a=0;
   motor_b=1;
   motor_c=1;
   motor_d=1; 
   motor_step=0;
   TMOD = 0x01;
   TH0 = 0x0FC;
   TL0 = 0x18;
   EA = 1;
   ET0 = 1;
   TR0 = 1;
   while(1)
   { 
    Disply();
ScanKey();
   }
}


/*****延时************/  
void delayNms(uint z)
{
uint x;
for( ;z>0;z--)
for(x=124;x>0;x--)
;
}

/*****设置电机转速************/
void  SetMotorSpeed(uint nSpeed)// nSpeed:转速 step/s
{
  speed=nSpeed;
  if(speed!=0)
  {
    run=1;
//计算每步需要多少毫秒
temp_t2=1000/nSpeed;
  }
  else
  {
    run=0;
  }
}


/*****1毫秒定时器************/
void Timer0Interrupt(void) interrupt 1
{
   if(run)
   {
     temp_t1++;
 if(temp_t1>temp_t2)
 {
    temp_t1=0;
    motor_step++;
    if(motor_step>7)  motor_step=0;
        switch (motor_step)
    {
       case 0:
       {
          motor_a=0; motor_b=1;
      motor_c=1; motor_d=1;
      break;
        }
        case 1:
        {
          motor_a=0; motor_b=0;
      motor_c=1; motor_d=1;
      break;
        }
        case 2:
        {
          motor_a=1; motor_b=0;
      motor_c=1; motor_d=1;
      break;
        }
        case 3:
        {
          motor_a=1; motor_b=0;
      motor_c=0; motor_d=1;
      break;
        }
        case 4:
        {
          motor_a=1; motor_b=1;
      motor_c=0; motor_d=1;
      break;
        }
        case 5:
        {
          motor_a=1; motor_b=1;
      motor_c=0; motor_d=0;
      break;
        }
        case 6:
        {
          motor_a=1; motor_b=1;
      motor_c=1; motor_d=0;
      break;
        }
        case 7:
        {
          motor_a=0; motor_b=1;
      motor_c=1; motor_d=0;
      break;
        }
       default: break;    
     }
 
  }
}
    TH0 = 0x0FC;
    TL0 = 0x18;
}


/***********显示************/
void Disply( ) 
{
    uchar DisBuff[16];
DisBuff[0]=‘S‘;
DisBuff[1]=‘p‘;
DisBuff[2]=‘e‘;
DisBuff[3]=‘e‘;
DisBuff[4]=‘d‘;
DisBuff[5]=speed>9999 ? speed%100000/10000+0x30 : 0x20;
DisBuff[6]=speed>999 ? speed%10000/1000+0x30 : 0x20;
DisBuff[7]=speed>99 ? speed%1000/100+0x30 : 0x20;
DisBuff[8]=speed>9 ? speed%100/10+

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-01-22 11:26  lcd1602 motor\
     文件      109105  2011-12-27 19:46  lcd1602 motor\Last Loaded sx.DBK
     文件        1985  2006-06-11 08:38  lcd1602 motor\LCD1602.H
     文件        5421  2011-12-28 00:30  lcd1602 motor\main.c
     文件       12344  2011-12-28 00:30  lcd1602 motor\main.LST
     文件       15267  2011-12-28 00:30  lcd1602 motor\main.OBJ
     文件          34  2011-12-28 00:30  lcd1602 motor\main.__i
     文件       14072  2011-12-28 00:30  lcd1602 motor\motor_1602
     文件        4865  2011-12-28 00:30  lcd1602 motor\motor_1602.hex
     文件          62  2011-12-28 00:30  lcd1602 motor\motor_1602.lnp
     文件       21572  2011-12-28 00:30  lcd1602 motor\motor_1602.M51
     文件         908  2011-12-28 11:38  lcd1602 motor\motor_1602.opt.bak
     文件         184  1993-05-05 07:51  lcd1602 motor\motor_1602.plg
     文件        2171  2011-12-27 23:21  lcd1602 motor\motor_1602.Uv2.bak
     文件       55401  1993-05-05 07:51  lcd1602 motor\motor_1602.uvopt
     文件       13422  1993-05-05 07:51  lcd1602 motor\motor_1602.uvproj
     文件        1064  2011-12-28 00:35  lcd1602 motor\motor_1602_Opt.Bak
     文件        2170  2011-12-27 20:05  lcd1602 motor\motor_1602_Uv2.Bak
     文件        6376  2011-12-28 00:27  lcd1602 motor\STARTUP.A51
     文件       10782  2011-12-28 00:27  lcd1602 motor\STARTUP.LST
     文件         750  2011-12-28 00:27  lcd1602 motor\STARTUP.OBJ
     文件      116440  2011-12-28 00:34  lcd1602 motor\sx.DSN
     文件         840  2013-01-22 11:26  lcd1602 motor\sx.PWI
     文件         109  2011-12-27 17:40  lcd1602 motor\新建文本文档.txt

评论

共有 条评论