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

📄 motor.c

📁 5项步进电机驱动程序C96语言
💻 C
字号:
#define  IN_MOTOR
#pragma model(KB)
#include <fpal96.H>
#include <math.h>
#include <MAIN.H>
#include <LED.H>
#include <KEY.H>
#include <MEASURE.H>
#include <MOTOR.H>
#include <TIMER.H>
#include <PASSWORD.H>
#include <RUN.H>
#include <CALCU.H>
#include <PRINTER.H>
#include <kb_sfrs.h>
#include <kb_funcs.h>
#ifdef FIVE_STEP			
const unsigned char motor_zz_code[50] =
{
	0x20,0x21,0x02,0x03,0x04, //AB
	0x20,0x21,0x22,0x03,0x04, //ABC
	0x00,0x21,0x22,0x03,0x04, //BC
	0x00,0x21,0x22,0x23,0x04, //BCD
	0x00,0x01,0x22,0x23,0x04, //CD
	0x00,0x01,0x22,0x23,0x24, //CDE
	0x00,0x01,0x02,0x23,0x24, //DE
	0x20,0x01,0x02,0x23,0x24, //DEA
	0x20,0x01,0x02,0x03,0x24, //EA
	0x20,0x21,0x02,0x03,0x24  //EAB
};
const unsigned char motor_fz_code[50] =
{
	0x20,0x21,0x02,0x03,0x24, //EAB
	0x20,0x01,0x02,0x03,0x24, //EA
	0x20,0x01,0x02,0x23,0x24, //DEA
	0x00,0x01,0x02,0x23,0x24, //DE
	0x00,0x01,0x22,0x23,0x24, //CDE
	0x00,0x01,0x22,0x23,0x04, //CD
	0x00,0x21,0x22,0x23,0x04, //BCD
	0x00,0x21,0x22,0x03,0x04, //BC
	0x20,0x21,0x22,0x03,0x04, //ABC
	0x20,0x21,0x02,0x03,0x04  //AB
};
#else
const unsigned char motor_zz_code[50] =
{
	0x20,0x01,0x02,0x03, //A
	0x20,0x21,0x02,0x03, //AB
	0x00,0x21,0x02,0x03, //B
	0x00,0x21,0x22,0x03, //BC
	0x00,0x01,0x22,0x03, //C
	0x00,0x01,0x22,0x23, //CD
	0x00,0x01,0x02,0x23, //D
	0x20,0x01,0x02,0x23  //DA
};
const unsigned char motor_fz_code[50] =
{
	0x20,0x01,0x02,0x23, //DA
	0x00,0x01,0x02,0x23, //D
	0x00,0x01,0x22,0x23, //CD
	0x00,0x01,0x22,0x03, //C
	0x00,0x21,0x22,0x03, //BC
	0x00,0x21,0x02,0x03, //B
	0x20,0x21,0x02,0x03, //AB
	0x20,0x01,0x02,0x03  //A
};
#endif
/************************************************************************************
************************************************************************************/
void top_swith_check(void)
{
	ioport2=ioport2|TOP_SWITH_SET;
	if (TOP_SWITH_ON)
	{
		step_maxnum=0;
		motor_state=MOTRO_CLEAR;
	}
}
/************************************************************************************
************************************************************************************/
void motor_start(void)
{
	disable();
	motor_setp=0;
	hso_command=0x38;
	hso_time=timer1+MOTRO_START_TIME;
	enable();
}
/************************************************************************************
************************************************************************************/
#pragma interrupt  (motor_step_set=5)
void motor_step_set(void)
{
	disable();
	switch (motor_state)
	{
		case MOTRO_CLEAR:
			hso_command=0x06;
			hso_time=timer1+0x03;
			hso_command=0x07;
			hso_time=timer1+0x06;
			hso_command=0x04;
			hso_time=timer1+0x09;
			motor_state=MOTRO_MUTE;
			if((machine_state==MACHINE_WAIT)
				||(machine_state==MACHINE_CLEAR))
			     machine_state=MACHINE_READY;
			break;
		case MOTRO_SLOW_DOWN1:
		case MOTRO_SLOW_DOWN2:
		case MOTRO_SLOW_DOWN3:
		case MOTRO_SLOW_DOWN4:
			step_maxnum++;
		case MOTRO_DOWN_FAST:
#ifdef FIVE_STEP			
			hso_command=motor_zz_code[motor_setp*5];
			hso_time=timer1+0x03;
			hso_command=motor_zz_code[motor_setp*5+1];
			hso_time=timer1+0x06;
			hso_command=motor_zz_code[motor_setp*5+2];
			hso_time=timer1+0x09;
			hso_command=motor_zz_code[motor_setp*5+3];
			hso_time=timer1+0x0c;
			hso_command=motor_zz_code[motor_setp*5+4];
			hso_time=timer1+0x0f;
#else
			hso_command=motor_zz_code[motor_setp*4];
			hso_time=timer1+0x03;
			hso_command=motor_zz_code[motor_setp*4+1];
			hso_time=timer1+0x06;
			hso_command=motor_zz_code[motor_setp*4+2];
			hso_time=timer1+0x09;
			hso_command=motor_zz_code[motor_setp*4+3];
			hso_time=timer1+0x0c;
#endif
			break;
		case MOTRO_SLOW_UP1:
		case MOTRO_SLOW_UP2:
		case MOTRO_UP_FAST:
#ifdef FIVE_STEP
			hso_command=motor_fz_code[motor_setp*5];
			hso_time=timer1+0x03;
			hso_command=motor_fz_code[motor_setp*5+1];
			hso_time=timer1+0x06;
			hso_command=motor_fz_code[motor_setp*5+2];
			hso_time=timer1+0x09;
			hso_command=motor_fz_code[motor_setp*5+3];
			hso_time=timer1+0x0c;
			hso_command=motor_fz_code[motor_setp*5+4];
			hso_time=timer1+0x0f;
#else
			hso_command=motor_fz_code[motor_setp*4];
			hso_time=timer1+0x03;
			hso_command=motor_fz_code[motor_setp*4+1];
			hso_time=timer1+0x06;
			hso_command=motor_fz_code[motor_setp*4+2];
			hso_time=timer1+0x09;
			hso_command=motor_fz_code[motor_setp*4+3];
			hso_time=timer1+0x0c;
#endif			
			if (step_maxnum==0)motor_state=MOTRO_CLEAR;
			else
			{
				step_maxnum--;
				top_swith_check();
			}
			break;
		case MOTRO_MUTE:
		default:
			break;
	}
#ifdef FIVE_STEP			
	if (motor_setp<9)motor_setp++;
#else
	if (motor_setp<7)motor_setp++;
#endif	
	else motor_setp=0;
	switch (motor_state)
	{
		case MOTRO_MUTE:
			motor_setp=0;
			break;
		case MOTRO_SLOW_DOWN1:
			hso_command=0x38;
			hso_time=timer1+SLOW_DOWN1_TIME;
			break;
		case MOTRO_SLOW_DOWN2:
			hso_command=0x38;
			hso_time=timer1+SLOW_DOWN2_TIME;
			break;
		case MOTRO_SLOW_DOWN3:
			hso_command=0x38;
			hso_time=timer1+SLOW_DOWN3_TIME;
			break;
		case MOTRO_SLOW_DOWN4:
			hso_command=0x38;
			hso_time=timer1+SLOW_DOWN4_TIME;
			break;
		case MOTRO_DOWN_FAST:
			hso_command=0x38;
			hso_time=timer1+FAST_DWON_TIME;
			break;
		case MOTRO_SLOW_UP1:
			hso_command=0x38;
			hso_time=timer1+SLOW_UP1_TIME;
			break;
		case MOTRO_SLOW_UP2:
			hso_command=0x38;
			hso_time=timer1+SLOW_UP1_TIME;
			break;
		case MOTRO_CLEAR:
		case MOTRO_UP_FAST:
			hso_command=0x38;
			hso_time=timer1+FAST_UP_TIME;
			break;
		default:
			break;

	}
	enable();
 }
/************************************************************************************
************************************************************************************/
void motor_init(void)
{
	motor_state=MOTRO_MUTE;
}

⌨️ 快捷键说明

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