步进电机

system.c

 
uchar flag_1ms=0;

void	Timer0_Init(void)
{
	TH0 = T1MS>>8; //赋初值
	TL0 = T1MS;	   //赋初值
	TMOD = 0x01;  //设置定时器0用十六位定时器方式
    EA = 1;			 //打开总中断
  	ET0 = 1;		 //打开定时器0中断
  	TR0 = 1;		 //启动定时器0		
}

void Timer0() interrupt 1		 //中断号1
{	
	TH0 = T1MS>>8; //赋初值
	TL0 = T1MS;	   //赋初值
	flag_1ms=1;
}

/*void	Delay_us(uint xus)
{
	for(;xus>0;xus--);
}
  
void	Delay_ms(uint xms)
{
	for(;xms>0;xms--)
	{
		Delay_us(1000);
	}
}
  */
void delay(uint i) 
    { 
        while(i--); 
    } 

system.h
#include "reg52.h"


#define	uchar unsigned char	//定义无符号字符
#define	uint  unsigned int	//定义无符号整形

#define	FOSC	12000000L	//定义晶振频率		   
#define	T1MS	(65536-FOSC/12/1000)  //定时10毫秒的时候,计数器要写入的值

//void	Delay_us(uint xus);	//us级延时
//void	Delay_ms(uint xms);	//ms级延时
void	Timer0_Init(void);  	//定时器初始化
void delay(uint i);

system.h
#include "system.h"

sbit MOTOR_PS = P1^6;
sbit MOTOR_PHASE1 = P1^5;
sbit MOTOR_PHASE2 = P1^4;
sbit MOTOR_I01 = P1^3;
sbit MOTOR_I11 = P1^2;
sbit MOTOR_I02 = P1^1;
sbit MOTOR_I12 = P1^0;


#define	Motor_Active()	(MOTOR_PS=1)
#define	Motor_Sleep()	(MOTOR_PS=0)


#define	MOTOR_STEP_1()	do{MOTOR_PHASE1=1;MOTOR_PHASE2=1;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define	MOTOR_STEP_2()	do{MOTOR_PHASE1=0;MOTOR_PHASE2=1;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define	MOTOR_STEP_3()	do{MOTOR_PHASE1=0;MOTOR_PHASE2=0;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define	MOTOR_STEP_4()	do{MOTOR_PHASE1=1;MOTOR_PHASE2=0;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=0;}while(0)


#define	MOTOR_STEP1_4_1()	do{MOTOR_PHASE1=1;MOTOR_PHASE2=1;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=1;MOTOR_I12=1;}while(0)
#define	MOTOR_STEP1_4_2()	do{MOTOR_PHASE1=1;MOTOR_PHASE2=1;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=1;}while(0)
#define	MOTOR_STEP1_4_3()	do{MOTOR_PHASE1=1;MOTOR_PHASE2=1;MOTOR_I01=1;MOTOR_I11=0;MOTOR_I02=1;MOTOR_I12=0;}while(0)
#define	MOTOR_STEP1_4_4()	do{MOTOR_PHASE1=1;MOTOR_PHASE2=1;MOTOR_I01=0;MOTOR_I11=1;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define	MOTOR_STEP1_4_5()	do{MOTOR_PHASE1=0;MOTOR_PHASE2=1;MOTOR_I01=1;MOTOR_I11=1;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define	MOTOR_STEP1_4_6()	do{MOTOR_PHASE1=0;MOTOR_PHASE2=1;MOTOR_I01=0;MOTOR_I11=1;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define	MOTOR_STEP1_4_7()	do{MOTOR_PHASE1=0;MOTOR_PHASE2=1;MOTOR_I01=1;MOTOR_I11=0;MOTOR_I02=1;MOTOR_I12=0;}while(0)
#define	MOTOR_STEP1_4_8()	do{MOTOR_PHASE1=0;MOTOR_PHASE2=1;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=1;}while(0)
#define	MOTOR_STEP1_4_9()	do{MOTOR_PHASE1=0;MOTOR_PHASE2=0;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=1;MOTOR_I12=1;}while(0)
#define	MOTOR_STEP1_4_10()	do{MOTOR_PHASE1=0;MOTOR_PHASE2=0;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=1;}while(0)
#define	MOTOR_STEP1_4_11()	do{MOTOR_PHASE1=0;MOTOR_PHASE2=0;MOTOR_I01=1;MOTOR_I11=0;MOTOR_I02=1;MOTOR_I12=0;}while(0)
#define	MOTOR_STEP1_4_12()	do{MOTOR_PHASE1=0;MOTOR_PHASE2=0;MOTOR_I01=0;MOTOR_I11=1;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define	MOTOR_STEP1_4_13()	do{MOTOR_PHASE1=1;MOTOR_PHASE2=0;MOTOR_I01=1;MOTOR_I11=1;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define	MOTOR_STEP1_4_14()	do{MOTOR_PHASE1=1;MOTOR_PHASE2=0;MOTOR_I01=0;MOTOR_I11=1;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define	MOTOR_STEP1_4_15()	do{MOTOR_PHASE1=1;MOTOR_PHASE2=0;MOTOR_I01=1;MOTOR_I11=0;MOTOR_I02=1;MOTOR_I12=0;}while(0)
#define	MOTOR_STEP1_4_16()	do{MOTOR_PHASE1=1;MOTOR_PHASE2=0;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=1;}while(0)

void	Motor_For(void);
void	Motor_For1_4(void);
void	Motor_Rev1_4(void);


motor.c
#include "motor.h"

void	Motor_For(void)
{
	static	uchar timer=0;

	timer++;
	switch(timer)
	{
		case 1:	MOTOR_STEP_1();break;
		case 2:	MOTOR_STEP_2();break;
		case 3:	MOTOR_STEP_3();break;
		case 4:	MOTOR_STEP_4();timer=0;break;
	}	
}

void	Motor_For1_4(void)
{
	static	uchar timer=0;

	timer++;
	switch(timer)
	{
		case 1:	MOTOR_STEP1_4_1();break;
		case 2:	MOTOR_STEP1_4_2();break;
		case 3:	MOTOR_STEP1_4_3();break;
		case 4:	MOTOR_STEP1_4_4();break;
		case 5:	MOTOR_STEP1_4_5();break;
		case 6:	MOTOR_STEP1_4_6();break;
		case 7:	MOTOR_STEP1_4_7();break;
		case 8:	MOTOR_STEP1_4_8();break;
		case 9:	MOTOR_STEP1_4_9();break;
		case 10:	MOTOR_STEP1_4_10();break;
		case 11:	MOTOR_STEP1_4_11();break;
		case 12:	MOTOR_STEP1_4_12();break;
		case 13:	MOTOR_STEP1_4_13();break;
		case 14:	MOTOR_STEP1_4_14();break;
		case 15:	MOTOR_STEP1_4_15();break;
		case 16:	MOTOR_STEP1_4_16();timer=0;break;
	}
}
void	Motor_Rev1_4(void)
{
	static	timer=17;

	timer--;
	switch(timer)
	{
		case 1:	MOTOR_STEP1_4_1();timer=17;break;
		case 2:	MOTOR_STEP1_4_2();break;
		case 3:	MOTOR_STEP1_4_3();break;
		case 4:	MOTOR_STEP1_4_4();break;
		case 5:	MOTOR_STEP1_4_5();break;
		case 6:	MOTOR_STEP1_4_6();break;
		case 7:	MOTOR_STEP1_4_7();break;
		case 8:	MOTOR_STEP1_4_8();break;
		case 9:	MOTOR_STEP1_4_9();break;
		case 10:	MOTOR_STEP1_4_10();break;
		case 11:	MOTOR_STEP1_4_11();break;
		case 12:	MOTOR_STEP1_4_12();break;
		case 13:	MOTOR_STEP1_4_13();break;
		case 14:	MOTOR_STEP1_4_14();break;
		case 15:	MOTOR_STEP1_4_15();break;
		case 16:	MOTOR_STEP1_4_16();break;		
	}
}

 main.c
 #include "system.h"
#include "key.h"
#include "motor.h"



sbit sw1 = P3^7;


extern	uchar flag_1ms;	   //在其他模块中寻找其定义。另外,extern也可用来进行链接指定。
static	unsigned int key_timer=0;
void main(void)			//程序的主函数
{	 
	Timer0_Init(); 定时器0函数调用
  	Motor_Active();
	while(1)  			//大括号里面的东西,被不停的循环执行
	{
		//1ms进入一次
		if(flag_1ms==1)	//加了我之后,我的大括号里面的东西,被定期的1ms执行一次,反复执行	 	
		{
		  	flag_1ms=0;

			if(sw1==0)
			{
				key_timer++;
				if(key_timer==100)
				{
					Motor_For();	
				}
				else if(key_timer==900)
				{
					Motor_For();
				}
				else if(key_timer>=910)
				{
					key_timer=899;
				}
			}
			else
			{
				key_timer=0;
			}
	  	}
	}
}
			


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值