#include <stc12C5A60S2.h> #include <intrins.h> typedef unsigned char u8; typedef unsigned int u16; sbit ADJ = P1^4; //电位器 sbit TCRT1 = P1^5; //避障识别 sbit TCRT2 = P1^6; //颜色识别 sbit buzzer = P1^7; //蜂鸣器 u16 white = 0; u16 black = 0; u16 speed = 0; float targetAngle = 45.000; // 目标转动角度为45度 float currentAngle = 0.000; // 当前已转动角度为0 u8 code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //逆时针旋转相序表 u8 code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正时针旋转相序表 void IO_Init() //单片机串口初始化,为准双向口模式 { P0M1 = 0; P0M0 = 0; P1M1 = 0; P1M0 = 0; P2M1 = 0; P2M0 = 0; } void delay(unsigned int time) { unsigned int i, j; for (i = 0; i < time; i++) { for (j = 0; j < 10; j++); } } void buzzer_Init() { buzzer = 1; } void forward() { u16 i; for(i=0;i<8;i++) { P2=(P2 & 0xF0) | CW[i]; delay(200); } } void back(){ u16 i; for(i=0;i<8;i++) { P2=(P2 & 0xF0) | CCW[i]; delay(200); } } void stop(){ P2=P2&0xF0; } void Motor_Ctrl_Angle(int direction, int angle) { u16 j; if(direction == 1) { for(j=0;j<64*angle/45;j++) { forward();//正转 } stop();//停止 } else { for(j=0;j<64*angle/45;j++) { back();//反转 } stop();//停止 } } void main() { //IO_Init(); buzzer_Init(); if(TCRT1 == 1 && TCRT2 == 1) //避障识别到棋子且该棋子为黑子 { Motor_Ctrl_Angle(1,45); //Motor_Ctrl_Angle(0,0); } else if(TCRT1 == 1 && TCRT2 == 0) { Motor_Ctrl_Angle(1,45); delay(20); } else{ buzzer = 0; delay(2000); buzzer = ~buzzer; } } 以上代码,如何修改,可以使步进电机转动45度并停住
时间: 2024-04-09 08:32:48 浏览: 21
要使步进电机转动45度并停止,可以按照以下方式修改代码:
1. 在程序开始处,添加延时函数的声明和定义:
```c
void delay(unsigned int time) {
unsigned int i, j;
for (i = 0; i < time; i++) {
for (j = 0; j < 10; j++);
}
}
```
2. 在 `Motor_Ctrl_Angle` 函数中,在循环内部添加延时函数来控制转动速度:
```c
void Motor_Ctrl_Angle(int direction, int angle) {
u16 j;
if (direction == 1) {
for (j = 0; j < 64 * angle / 45; j++) {
forward(); // 正转
delay(200); // 延时200个单位时间
}
stop(); // 停止
} else {
for (j = 0; j < 64 * angle / 45; j++) {
back(); // 反转
delay(200); // 延时200个单位时间
}
stop(); // 停止
}
}
```
3. 在 `main` 函数中,调用 `Motor_Ctrl_Angle` 函数来控制步进电机转动45度并停止:
```c
void main() {
// IO_Init();
buzzer_Init();
Motor_Ctrl_Angle(1, 45); // 控制步进电机正转45度并停止
}
```
在以上修改后的代码中,通过添加延时函数,在每次转动步进电机时都会有一个200个单位时间的延时,从而控制转动速度。调用 `Motor_Ctrl_Angle` 函数时,将参数设置为 `1` 和 `45`,即步进电机正转45度,并在转动完成后停止。