|
#include "reg52.h"
sbit anniu=P3^2;
//Motor
sbit A = P1^1; //定义管脚
sbit b = P1^2;
sbit C = P1^3;
sbit D = P1^4;
///
//步进电机驱动
unsigned char MotorStep=0; //步进马达步序
unsigned int MotorDelay,Speed=1,TIM,CT;
#define speed 1 // 调整速度 数值不要设的太低 低了会引起震动。
/*****************************************************
* 初始化马达 *
******************************************************/
void InitMotor()
{
A = 1;
b = 1;
C = 1;
D = 1;
}
void SetMotor()
{
MotorDelay=Speed; //调整速度
switch(MotorStep)
{
case 0:
if(TIM) // A
{
A = 0; //0xf1
b = 1;
C = 1;
D = 1;
MotorStep = 1;
TIM=0;
}
break;
case 1: // AB
if(TIM)
{
A = 0; //0xf3
b = 0;
C = 1;
D = 1;
MotorStep = 2;
TIM=0;
}
break;
case 2: //B
if(TIM)
{
A = 1;
b = 0; //0xf2
C = 1;
D = 1;
MotorStep = 3;
TIM=0;
}
break;
case 3: //BC
if(TIM)
{
A = 1;
b = 0; //0xf6
C = 0;
D = 1;
MotorStep = 4;
TIM=0;
}
break;
case 4: //C
if(TIM)
{
A = 1;
b = 1; //0xf4
C = 0;
D = 1;
MotorStep = 5;
TIM=0;
}
break;
case 5: //CD
if(TIM)
{
A = 1;
b = 1; //0xfc
C = 0;
D = 0;
MotorStep = 6;
TIM=0;
}
break;
case 6: //D
if(TIM)
{
A = 1;
b = 1; //0xf8
C = 1;
D = 0;
MotorStep = 7;
TIM=0;
}
break;
case 7: //DA
if(TIM)
{
A = 0;
b = 1; //0xf9
C = 1;
D = 0;
MotorStep = 0;
TIM=0;
}
break;
}
}
void system_Ini()
{
TMOD|= 0x11;
TH1=0xDC;//(65536-46080)/256;//0xDC; //11.0592M
TL1=0x00;//(65536-46080)%256;//0x00;
IE = 0xff;
TR1 = 1;
EX0=1;
PX0=1;
}
main()
{
system_Ini();
InitMotor();
while(1)
{
SetMotor();
}
}
/************************************************
* *
* 定时中断延时 *
************************************************/
void Tzd(void) interrupt 3
{
TH1 = 0xfe; //11.0592
TL1 = 0x33;
if( CT++==speed)
{TIM=1;
CT=0;
}
}
void int0(void) interrupt 0 //interrupt是声明函数为中断服务函数,0是编译器对中断的编号
{ //外部中断0
P1=0X00;
while(anniu==0); //低电频触发
}
|
|