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

📄 rainwiper v10a

📁 用L293步进电机驱动芯片做的步进电机驱动器.
💻
字号:
/********************************
名称:雨刷控制器
日期:2007-06-23
作者:Mavinger
版本:
V1.0:2007-07-8 ,创建此版本

V2.0:2006-11-5 ,修改外部晶振为11.0592M


硬件:
1.控制单片机: 12C5052AD
2.步进电机驱动器: L293D




********************************/

#include "STC12C2052AD.h"
#include <INTRINS.h>
#include <math.h>
#include <stdio.h>

//数据类型定义
typedef unsigned char byte;
typedef unsigned int  word;
typedef unsigned long dword;


//#define  Timer_H    0xFF		//0.1ms
//#define  Timer_L    0xBD
#define  Timer_H    0xFF		//0.01ms
#define  Timer_L    0xF9



//电机驱动控制

//input
sbit Run_Mode	=P3^5; 
sbit Stop_Mode	=P3^4;
sbit Speed_Mode	=P3^3;

//output
sbit Step_EN1	=P1^7;
sbit Step_EN2	=P1^6;

sbit Out_A0  	=P1^3;
sbit Out_A1     =P1^2; 
sbit Out_B0     =P1^1; 
sbit Out_B1     =P1^0; 


#define Open	1
#define Close   0
#define ON      1
#define OFF     0

bit MotorDir;
byte np;


const byte forward[]=
//{0b10100011,0b11101011,0b11001011,0b11011011,0b10010011,0b11010111,0b11000111,0b11100111,};
//{0xA3,0xEB,0xCB,0xDB,0x93,0xD0,0xC7,0xE7};

//{0b11111000,0b1111010,0b11110010,0b11110110,0b11110100,0b11110101,0b11110001,0b11111001,};
{0xF8,0xFA,0xF2,0xF6,0xF4,0xF5,0xF1,0xF9};



const byte backward[]=
{0xF9,0xF1,0xF5,0xF4,0xF6,0xF2,0xFA,0xF8};


void Initial(void)
{
	AUXR=AUXR & 0x7F;  				//T0x12=0; 系统时钟12分频,即 T=12/6=2us
	TMOD=0x01;						//C/T1作定时用,16位模式	
	//定时模式1,10ms
	//0xEC78 : 晶振6M
	//TH0=0xEC;
	//TL0=0x78;
	//0xE5F5 : 晶振8M
	//0xCBEA : 晶振16M
	//定时模式1,1ms	
	//0xFE0C : 晶振6M
	//0xFD65 : 晶振8M
	//TH0=0xFD;
	//TL0=0x65;
	//定时模式1,0.1ms	
	//0xFFCE : 晶振6M
	//0xFFBD : 晶振8M

	TH0=Timer_H;
	TL0=Timer_L;

	ET0=1;
	EA=1;

	P1M0=0;		//P1M0=0,P1M1=0,P1口为准双向口
	P1M1=0;
	P3M0=0;
	P3M1=0;

	TR0=0;

}
void InitialUART(void)
{
    SCON = 0X50;     
    TMOD = 0X21;        
	TH1 = 0xF7;			//Baudrate:2400
	TR1 = 1 ;         
    TI=1;
}


//1ms*N 延时
void Delay1MS(word delay1ms)
{
	word cnt;
	byte cnt1; 
	

	for(cnt=0;cnt<delay1ms;cnt++)
	{
		for(cnt1=0;cnt1<200;cnt1++)
		_nop_();
	}
}

void StepRun(byte StepDir,word Speednum)		// One step run
{

	if(StepDir & 0x01)
	{	 
		if(np==0)
			np=7;
		else 
			np--;
		P1=forward[np];
		Delay1MS(Speednum);	
	}
	else
	{
		if(np==0)
			np=7;
		else 
			np--;
		P1=backward[np];
		Delay1MS(Speednum);	
	}		
}

void MotorTurn(byte StepDir,word Speednum,word Degree)	//方向,速度,度数
{
	byte degreecnt;
	byte stepcnt;

	degreecnt=(byte)(Degree/0.9);
	
	for(stepcnt=0;stepcnt<degreecnt;degreecnt++)
	{
		StepRun(StepDir,Speednum);
	}
}



main()
{
	byte cnt;

	Initial();
	InitialUART();

    	Run_Mode=1;
	Stop_Mode=1;
	Speed_Mode=1;

	while(1)
	{	
		if(!Run_Mode)
		{				
			MotorTurn(1,20,90);
		}
	}
}


void Timer0(void) reentrant  interrupt 1
{

	TH0=Timer_H;
	TL0=Timer_L;
}

⌨️ 快捷键说明

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