⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msr40型步进电机.txt

📁 MSR40四线六想型步进电机驱动,带LED显示步长
💻 TXT
字号:
//MSR40型(四线三相)步进电机驱动 LED显示步长
#include "My8051.H"
#include "Globle.H"

void initmotor(void)							//初始化
{
	P1 = P1&0xf0;								//各相均不加电
	portinit = P1;	
	TMOD = 0x21;                                //定时器0方式1;
	SCON = 0X50;								//设定串行口方式为1,启动接收
	TL0 = 0xA3;
	TH0 = 0xFF; 								//0.1ms
	TH1 = 0XFD;									//设定定时器1波特率为9600	
	TL1 = 0XFD;									//设定定时器1波特率为9600	
	TCON =0x40;									//
//	IP = 0x04;
	ES = 1;										//开串口中断
	EA = 1;							
	TR0 = 1;									//T0计时开始
	TR1 = 1;									//T1计时开始
}

void Delayx10ms(Word count)		
{
	Word i,j;
	while(count-- != 0)
	{
		for(i=0;i<10;i++)
			for(j=0;j<72;j++)
			;
	}
}

void Delay50us(Byte count)
{
	Byte i,j;
	for(i=0;i<count;i++)
		for(j=0;j<6;j++)
		;
}

void NoDisPlay(void)
{
	P0 = 0;
}

void DisPlay(Byte bySW, Byte P) 			//P0字形,P1选中
{
	P1 = bySW;
    P0 = P;
  	Delay50us(10);    
//	Delayx10ms(1);
}

void DisplayLed(Byte *pData)
{
	DisPlay(0x00 , ASIIC[pData[0]]);
	DisPlay(0x10 , ASIIC[pData[1]]);
	DisPlay(0x20 , ASIIC[pData[2]] | DOT);//个位加小数点显示
	DisPlay(0x30 , ASIIC[pData[3]]);
}

void step_counter(Byte n)
{
	Byte idata arTemp[4];
	Word idata value = 0;
	value = n * 75;
	arTemp[0] = (int)(value/1000);			//千位
	arTemp[1] = (value/100) %10;			//百位
	arTemp[2] =  (value/10) % 10;			//个位
	arTemp[3] = value%10;				//十位

	DisplayLed(arTemp);
}

void control(Byte direct, Byte k, Byte n)	//direct为转向,k为调速,n为步数
{
	Word i;
	Byte *p;
	if(direct == 0)
	{
		p = clkwise;
	}
	else
	{
		p = antiwise;
	}	
	for(i = 0; i < n; i++)
	{
		P1  = *p;
		p++;
		if(*p == 0)
		{
			p = p-4;
		}
		Delayx10ms(k);
//  g_byShortTime = 10;
//	while(g_byShortTime)
//	{
//		;
//	}
	}
	P1 = portinit;								//切断所有通电
}

void main(void)
{
//	Byte idata byStep = 0;
	initmotor();
	while(1)
	{	
		if(Fgextout1 == 0)
		{
			NoDisPlay();
			if(INT1 == 0)
			{
				byStep = 25;
				control(0, 2, byStep);
//				Fgextout1 = 1;			
				Fgextout1 = !Fgextout1;
			}			
		}
		else
		{	
			NoDisPlay();
			if(INT1 == 0)
			{
				byStep = 24;
				control(1, 3, byStep);
//				Fgextout1 = 0;			
				Fgextout1 = !Fgextout1;
			}
		}
		step_counter(byStep);				//计算步数
 	
	}
//	while(1);
}

/*
void timer_1 (void) interrupt 1 using 3      	//定时器0方式1(每十毫秒产生中断一次)
{
	TR0 = 0;
	TL0 = 0xA3;
	TH0 = 0xFF; 								//0.1ms
	g_by1Ms++;
	if(g_by1Ms == 10)							//定时1ms
	{
		g_by1Ms = 0;
		if(g_byShortTime > 0) g_byShortTime--;	
	}
}
*/


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -