Red de conocimientos turísticos - Información de alquiler - Requisitos para que una microcomputadora de un solo chip controle motores paso a paso: botones de aceleración, desaceleración, parada, avance y retroceso. El motor es un sistema de cuatro fases y cinco cables que controla dos motores paso a paso, programa en lenguaje C.

Requisitos para que una microcomputadora de un solo chip controle motores paso a paso: botones de aceleración, desaceleración, parada, avance y retroceso. El motor es un sistema de cuatro fases y cinco cables que controla dos motores paso a paso, programa en lenguaje C.

He controlado un motor paso a paso antes, que escribí antes. Simplemente haga modificaciones a sus requisitos en el siguiente programa:

#include

#define uchar unsigned char

#define uint unsigned int

//uchar table[]={0x18,0x30,0x60,0x48,0x48,0x60,0x30,0x18 }; //excitación bifásica

uchar table[]={0x08,0x10,0x20,0x40,0x40, 0x20,0x10,0x08}; //excitación monofásica

uchar num =0,maichong,zhengfan;

sbit add_key=P3^2; //tecla de aceleración

sbit reduce_key=P3^3; //tecla de reducción

sbit zhengfan_key=P3^4; //tecla de avance/retroceso

void delay(uint z) //retraso 1ms

{

uint x, y;

for(x=z;x>0;

for(y=114;y>0;y- -);

}

void only_key() //manejo de claves

{

static uchar flag; //definido como estático solo definido una vez

if( zhengfan_key= =0) //detecta si se presiona tecla positiva o negativa

{

delay(5);

if(zhengfan_key= =0 )

{

flag=~flag; //Invertir

if(flag==0)

zhengfan= 0; /Rotación hacia adelante, toma los primeros cuatro dígitos de la matriz

else

zhengfan=4 //Reversa, toma los últimos cuatro dígitos de la matriz p>

while(!zhengfan_key);

}

}

if(add_key==0) // Compruebe si la clave para agregar es presionado

{

delay(5);<

if(add_key==0) // Reducir la fluctuación

{

num++; // Presione la tecla del acelerador, la marca de velocidad aumenta en 1

if(num==4) // Se ha alcanzado el valor máximo de 3

núm=3;

mientras(! add_key);

}<

}

if(reduce_key==0) //Detecta si se presiona la tecla de reducción

{

demora(5);

if(reduce_key==0)

{

if(num!=0)

num--; //Presiona la tecla de desaceleración, la marca de velocidad disminuye en 1

else

num=0 //Reduzca la velocidad a 0 y manténgala; < /p

>

while(!reduce_key);

}

}

}

}

nulo reparto() //Procesamiento de datos basado en bandera de velocidad

{

switch(num)

{

caso 0: P0= 0x06; // La canalización de datos muestra 1

maichong=5; //La velocidad más lenta

se rompe;

caso 1: P0=0x5b; la canalización muestra 2

maichong=4;

break;

caso 2: P0=0x4f //La canalización de datos muestra 3

maichong=3;

break;

caso 3: P0=0x66; //La canalización de datos muestra 4

maichong=2;

break;

}

}

void start() // Velocidad del motor y procesamiento de control de avance y retroceso

{

uchar i,j;

for(i=zhengfan;i<4+ zhengfan;i++)

{

P1=table[i];

for(j=0;j

retraso( 2);

}

}

void main()

{

mientras(1)

{

only_key();

trato();

inicio();

}

}

}