内容发布更新时间 : 2025/3/10 6:07:05星期一 下面是文章的全部内容请认真阅读。
具体操作:启动系统,默认步进电机正转。此时按下sw2,切换到反转;按下sw1可切换回正转;每按一次sw3,就加速一次,直至上限速度;按一次sw4,就减速一次,直到下限速度。 5.2 源程序代码
运行Keil中文版,参照电路图和流程图编写程序
#include
static int speedlevel; 步进电机转速参数,数值越大速度越慢,最小值为1,速度最快
static int spcount; 步进电机转速参数计数
void delay(unsigned int endcount); 延时函数,延时为endcount*0.5毫秒 void gorun(); 步进电机控制步进函数 void main(void) {
count = 0; step_index = 0; spcount = 0; stop_flag = 0; P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0;
EA = 1; 允许CPU中断 TMOD = 0x11; 设定时器0和1为16位模式1 ET0 = 1; 定时器0中断允许
TH0 = 0xFE;
TL0 = 0x0C; 设定时每隔0.5ms中断一次 TR0 = 1; 开始计数 turn = 0; speedlevel = 2; delay(10000); speedlevel = 1; do{
speedlevel = 2; delay(10000); speedlevel = 1; delay(10000); stop_flag=1; delay(10000); stop_flag=0; Turn=!turn; }while(1); }
定时器0中断处理
void timeint(void) interrupt 1 {
TH0=0xFE;
TL0=0x0C; 设定时每隔0.5ms中断一次 count++; spcount--;
if(spcount<=0) {
spcount = speedlevel; gorun(); } }
void delay(unsigned int endcount) {
count=0;
do{}while(count
void gorun() {
if (stop_flag==1) {
P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0; return; }
switch(step_index) { case 0: 0 P1_0 = 1;
P1_1 = 0; P1_2 = 0; P1_3 = 0; break; case 1: 0、1 P1_0 = 1; P1_1 = 1; P1_2 = 0; P1_3 = 0; break; case 2: 1 P1_0 = 0; P1_1 = 1; P1_2 = 0; P1_3 = 0; break; case 3: 1、2 P1_0 = 0; P1_1 = 1; P1_2 = 1; P1_3 = 0; break; case 4: 2 P1_0 = 0; P1_1 = 0;