/*此程序实现的功能为,按键反转,即每按一次键,步进电机
在原来的方向上反转一次,要注意将P3^2口接到任意按键上。*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit d1=P1^0; //定义步进电机的四个端口
sbit d2=P1^1;
sbit d3=P1^2;
sbit d4=P1^3;
#define A {d1=1,d2=0,d3=0,d4=0;}//使用1-2相励磁法一相与二相交替导通
#define B {d1=0,d2=1,d3=0,d4=0;}
#define C {d1=0,d2=0,d3=1,d4=0;}
#define D {d1=0,d2=0,d3=0,d4=1;}
#define AB {d1=1,d2=1,d3=0,d4=0;}
#define BC {d1=0,d2=1,d3=1,d4=0;}
#define CD {d1=0,d2=0,d3=1,d4=1;}
#define DA {d1=1,d2=0,d3=0,d4=1;}
#define OF {d1=0,d2=0,d3=0,d4=0;}
void delay(uchar t)
{
while(--t);
}
void delayMS(uchar t)
{
while(t--)
{
delay(245);
delay(245);
}
}
uchar speed;//控制延时长度的变量
bit flag;//位变量
void main()
{
uint i=512;//注意c语言的语法中变量的定义和初始化要放在主函数的最开头
EA=1;//开总中断
EX0=1;//开外部中断0
IT1=1;//采用边沿触发方式
speed=5;
while(1)
{
OF //线圈均不导通
while(i--&&flag)//正转
{
A
delayMS(speed);
AB
delayMS(speed);
B
delayMS(speed);
BC
delayMS(speed);
C
delayMS(speed);
CD
delayMS(speed);
D
delayMS(speed);
DA
delayMS(speed);
}
OF //线圈均不导通
i=512;
while(i--&&(!flag))//反转
{
A
delayMS(speed);
DA
delayMS(speed);
D
delayMS(speed);
CD
delayMS(speed);
C
delayMS(speed);
BC
delayMS(speed);
B
delayMS(speed);
AB
delayMS(speed);
}
}
}
void Int0() interrupt 0
{
if(!INT0)//reg52头文件中,定义P3^2=INT0,判断按键是否按下
{
delayMS(10);//延时消抖,防止按键抖动造成错误
if(!INT0) //再次判断按键是否按下
{
flag=!flag;//flag的值置反,即步进电机反向
}
while(!INT0);//判断是否松手
}
}