求大老帮写个代码,利用STC8g1k08-38i-tssop20与A4988做一个42步进电机驱动控制器
利用STC8g1k08-38i-tssop20与A4988做一个42步进电机驱动控制器,有一个正转开关,一个反转开关,开关点动模式,一个电位器调速开关。在线等高手下面这个代码只有正转和反转,没有调速,帮我加个调度也可以
#include <STC8G.H>
#include <intrins.h>
// 引脚定义(严格按需求分配)
sbit STEP = P3^2; // 第13脚:A4988 STEP
sbit DIR = P3^3; // 第14脚:A4988 DIR
sbit KEY_FWD= P3^5; // 第16脚:正转开关(低电平有效)
sbit KEY_REV= P3^4; // 第15脚:反转开关(低电平有效)
// 函数声明(修复:添加所有函数原型)
void Delay_us(unsigned int us);
void Delay_ms(unsigned int ms);
void GPIO_Init(void);
// 全局变量
unsigned int pulse_delay = 1000;// 固定速度1000us(可调)
void main()
{
// 初始化
GPIO_Init();
STEP = 0;
DIR = 0;
while(1)
{
// 点动控制逻辑
if(KEY_FWD == 0)
{
DIR = 0;// 正转方向
do {
STEP = 1;
Delay_us(50); // 50us脉冲宽度
STEP = 0;
Delay_us(pulse_delay);
} while(KEY_FWD == 0);
}
else if(KEY_REV == 0)
{
DIR = 1;// 反转方向
do {
STEP = 1;
Delay_us(50);
STEP = 0;
Delay_us(pulse_delay);
} while(KEY_REV == 0);
}
else
{
STEP = 0;// 停止
Delay_ms(10);
}
}
}
// GPIO初始化
void GPIO_Init(void)
{
P3M0 = 0x00;// P3口准双向模式
P3M1 = 0x00;
KEY_FWD = 1;// 启用内部上拉
KEY_REV = 1;
}
// 微秒延时函数(12MHz时钟优化)
void Delay_us(unsigned int us)
{
while(us--)
{
_nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_();
}
}
// 毫秒延时函数
void Delay_ms(unsigned int ms)
{
unsigned int i, j;
for(i = ms; i > 0; i--)
for(j = 1100; j > 0; j--);
}
51开源,步进电机驱动 程序, 直接驱动, 或驱动步进电机驱动器 一共8个程序 - 步进电机控制 国芯人工智能技术交流网站 - AI32位8051交流社区
神农鼎 发表于 2025-10-10 09:36
51开源,步进电机驱动 程序, 直接驱动, 或驱动步进电机驱动器 一共8个程序 - 步进电机控制 国芯人工智能 ...
那个好像没调速度开关,{:shuai:}
页:
[1]