求51单片机控制步进电机程序

求51单片机控制步进电机程序,第1张

给你一段电机走一步的函数吧!

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

函数名:步进电机正反转一步

调 用: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

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7901005.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存