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个不同角度。(角度没有要求)