
/***************************************************************************************************
函数名:步进电机正反转一步
调 用:MOTOR()
参 数:Mot=0,电机反转一步 ,Mot=1电机正转
返回值:无
结 果:电机坐标 Motor 自动加一或减一,电机走一步
***************************************************************************************************/
void MOTOR(void){ //步进电机正反转一步子程序
code unsigned char MOTOR_DB[]={0x00,0xb0,0x90,0xd0,0x50,0x70,0x60,0xe0,0xa0,0x00}//定义电机输出编码
unsigned char i
MOIC=0 //开电机电流
i=0 //电机输出编码初值设00
CBB=10 //设减小电机电流时间设为10
if(Mot==1)Mo_data++
else{if(Mo_data!=0)Mo_data--}//如果电机反转,并且当前电机坐标不小于1时,坐标减一
while(1)
{
if(Mot)Motor_t ++//当前电机输出编码加一指向下一编码
else Motor_t --//电机输出编码减一
i=MOTOR_DB[Motor_t]//取电机输出编码
if(i!=0)break
else{
if(Mot)Motor_t=0
else Motor_t=9
}
}
i=i&0xf8//屏蔽低3位,高5位不变
M_data=M_data&0x07//屏蔽P1口的高5位,低3位不变
M_data=M_data|i//高5位送P1口,P1口的低3位不变
}
把函数写到 函数列表。根据 序号 获取函数指针,然后执行。
#include <stdio.h>#include <string.h>
#define FUNC_MAX 0xFF
typedef void (*FUNC_TEST)(int , int )
// 函数列表
FUNC_TEST func_list[FUNC_MAX]
void reg(int id, FUNC_TEST fun){ // 注册到函数列表
if(id<0) return
func_list[id]=fun
}
void exe(int id, int a,int b){ // 根据ID执行
if(id<0||id>=FUNC_MAX) return
FUNC_TEST f=func_list[id]
f(a, b)
}
// 测试函数
void CAA(int a,int b){
printf("This is CAA %d %d!\n", a,b)
}
void CBB(int a,int b){
printf("This is CBB %d %d!\n", a,b)
}
// 实例
int main(){
// 初始化函数列表
memset(func_list,1,FUNC_MAX)
// 注册函数
reg(0xAA, CAA)
reg(0xBB, CBB)
// 根据ID执行
int a= 0xAA
exe(a, 1, 2)
exe(0xBB, 2, 3)
return 0
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)