#include<reg52.h>
#include"StepperMotorControl.h"
uchar timevar,keyvalue,run,reverse;//timevar是时间变量控制延时时间,
//keyvalue:按键值,
//run:控制电机转动或停止,
//reverse;控制电动机的正反转
uchar code stepper[8]={0x1,0x3,0x2,0x6,0x4,0xc,0x8,0x9}; //电动机运转的相数通电表
//------------------------------------------------------------------------------------------------------
//名称:变量延时函数
//作用:通过改变var的值,改变延时时间
//------------------------------------------------------------------------------------------------------
void delay_var(uint var)
{
uint i,j;
for(i=0;i<var;i++)
for(j=0;j<110;j++);
}
//------------------------------------------------------------------------------------------------------
//名称:步进电机停止
//作用:停止
//------------------------------------------------------------------------------------------------------
void MotorStop(void)
{
Motor_A=0;
Motor_B=0;
Motor_C=0;
Motor_D=0;
}
//------------------------------------------------------------------------------------------------------
//名称:步进电机驱动函数
//作用:通过变量var控制电动机的转速高低,通过变量state判断电动机的正反转
//------------------------------------------------------------------------------------------------------
void MotorAccOrDec(uint var,uchar state)
{
uchar i;
if(!state)
{
for(i=0;i<8;i++)
{
P0=stepper[i];
delay_var(var);
}
}
else
{
for(i=7;i>0;i--)
{
P0=stepper[i];
delay_var(var);
}
}
}
//------------------------------------------------------------------------------------------------------
//名称:获取按键值函数
//作用:获取哪个按键被按下
//------------------------------------------------------------------------------------------------------
uchar GetKey(void)
{
uchar temp;
temp=P1&0x1f;
return temp;
}
//------------------------------------------------------------------------------------------------------
//名称:外部中断0初始化函数
//作用:初始化外部中断
//------------------------------------------------------------------------------------------------------
void Inter0_init(void)
{
EX0=1;
ET0=0;
EA=1;
}
//------------------------------------------------------------------------------------------------------
//名称:外部中断0函数
//作用:按键按下时能获取键值,并设定电动机的运转状态
//------------------------------------------------------------------------------------------------------
void Inter0_Interrupt() interrupt 0
{
keyvalue=GetKey();
switch(keyvalue)
{
case 0x1e:
timevar=100;
reverse=0;
run=1;break; // 启动电机,正转
case 0x1d:
run=0;break; //停止电机
case 0x1b:
timevar=timevar-10;
if(timevar<10)timevar=100;
run=1;
break; // 加速
case 0x17:
timevar=timevar+10;
if(timevar>250)timevar=100;
run=1;
break;// 减速
case 0x0f: reverse=1;
run=1;break;//电动机反转
}
}