fengyepiaolei
/*此程序实现的功能为,按键反转,即每按一次键,步进电机
在原来的方向上反转一次,要注意将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);//判断是否松手
	}
}

  

分类:

技术点:

相关文章:

  • 2021-05-02
  • 2021-11-24
  • 2021-11-24
  • 2021-10-15
  • 2021-11-28
  • 2021-11-21
  • 2021-12-19
猜你喜欢
  • 2021-11-18
  • 2022-12-23
  • 2021-04-19
  • 2021-11-02
  • 2021-11-24
  • 2021-12-28
  • 2021-12-03
相关资源
相似解决方案