51单片机分别控制两个步进电机

1.能通过按键分别实现电机正反转以及停机
2.能通过按键分别控制让其旋转3个不同角度。(角度没有要求)

1单片机分别控制两个步进电机
1.能通过按键分别实现电机正反转以及停机
2.能通过按键分别控制让其旋转3个不同角度。(角度没有要求)

额aw大的1单片机分别控制两个步进电机
1.能通过按键分别实现电机正反转以及停机
2.能通过按键分别控制让其旋转3个不同角度。(角度没有要求)

可以通过按键分别实现电机正反转以及停机
或者通过按键分别控制让其旋转3个不同角度

写三个函数不就可以了....甚至不用50行

实现如下。


#include <reg51.h>

// 定义步进电机引脚连接的端口和引脚
sbit motor1_A = P1^0;
sbit motor1_B = P1^1;
sbit motor2_A = P1^2;
sbit motor2_B = P1^3;

// 定义按键连接的端口和引脚
sbit button1 = P2^0;
sbit button2 = P2^1;
sbit button3 = P2^2;

// 定义电机控制状态
#define STOP 0
#define FORWARD 1
#define REVERSE 2

// 定义电机当前状态和目标状态
unsigned char motor1_state = STOP;
unsigned char motor2_state = STOP;
unsigned char motor1_target_state = STOP;
unsigned char motor2_target_state = STOP;

// 定义角度计数器和目标角度
unsigned int angle_counter = 0;
unsigned int target_angle = 0;

// 延时函数
void delay(unsigned int ms) {
    unsigned int i, j;
    for (i = 0; i < ms; i++) {
        for (j = 0; j < 120; j++) {
        }
    }
}

// 电机控制函数
void controlMotors() {
    // 控制电机1
    if (motor1_state != motor1_target_state) {
        motor1_state = motor1_target_state;
        switch (motor1_state) {
            case STOP:
                motor1_A = 0;
                motor1_B = 0;
                break;
            case FORWARD:
                motor1_A = 1;
                motor1_B = 0;
                break;
            case REVERSE:
                motor1_A = 0;
                motor1_B = 1;
                break;
        }
    }
    
    // 控制电机2
    if (motor2_state != motor2_target_state) {
        motor2_state = motor2_target_state;
        switch (motor2_state) {
            case STOP:
                motor2_A = 0;
                motor2_B = 0;
                break;
            case FORWARD:
                motor2_A = 1;
                motor2_B = 0;
                break;
            case REVERSE:
                motor2_A = 0;
                motor2_B = 1;
                break;
        }
    }
}

void main() {
    // 初始化按键和电机状态
    button1 = 1;
    button2 = 1;
    button3 = 1;
    
    motor1_state = STOP;
    motor2_state = STOP;
    
    while (1) {
        // 检测按键1
        if (button1 == 0) {
            delay(20);  // 延时去抖动
            
            if (button1 == 0) {
                // 切换电机1的状态
                switch (motor1_target_state) {
                    case STOP:
                        motor1_target_state = FORWARD;
                        break;
                    case FORWARD:
                        motor1_target_state = REVERSE;
                        break;
                    case REVERSE:
                        motor1_target_state = STOP;
                        break;
                }
                
                // 等待按键释放
                while (button1 == 0);
            }
        }
        
        // 检测按键2
        if (button2 == 0) {
            delay(20);  // 延时去抖动
            
            if (button2 == 0) {
                // 切换电机2的状态
                switch (motor2_target_state) {
                    case STOP:
                        motor2_target_state = FORWARD;
                        break;
                    case FORWARD:
                        motor2_target_state = REVERSE;
                        break;
                    case REVERSE:
                        motor2_target_state = STOP;
                        break;
                }
                
                // 等待按键释放
                while (button2 == 0);
            }
        }
        
        // 检测按键3
        if (button3 == 0) {
            delay(20);  // 延时去抖动
            
            if (button3 == 0) {
                // 增加目标角度
                target_angle += 120;
                if (target_angle >= 360) {
                    target_angle = 0;
                }
                
                // 等待按键释放
                while (button3 == 0);
            }
        }
        
        // 更新角度计数器
        angle_counter += 10;
        if (angle_counter >= 360) {
            angle_counter = 0;
        }
        
        // 根据目标角度确定电机状态
        if (angle_counter < target_angle) {
            motor1_target_state = FORWARD;
            motor2_target_state = REVERSE;
        } else {
            motor1_target_state = STOP;
            motor2_target_state = STOP;
        }
        
        // 控制电机
        controlMotors();
    }
}

1.能通过按键分别实现电机正反转以及停机
2.能通过按键分别控制让其旋转3个不同角度。(角度没有要求)