Buscando el programa fuente C para el microcontrolador 51 para controlar el motor de CC a través de L298N
#include
#define uchar unsigned char
#define uint unsigned int
uint t; p>
p>
uint flag1,flag1s;/*Cuando flag1=1, el chasis gira a la izquierda, cuando flag1&flag2=1, el chasis gira a la derecha*/
uint flag2;/* Stop flag*/
uint flag3,flag3s;/*Cuando flag3=1, se levanta el brazo derecho, cuando flag3&flag2=1, se baja el brazo derecho*/
uint flag4 ,flag4s;/* Cuando flag4=1, el brazo izquierdo está levantado, cuando flag4&flag2=1, el brazo izquierdo está bajado*/
uint flag5;/*Cuando flag5=1, demostración automática*/
//Control de semáforo
sbit hong=P3^0;
sbit huang=P3^1;
sbit lv=P3 ^2;
//Control del brazo izquierdo (sube cuando zb1 es 0, sube cuando zb2 es 1, en caso contrario bájalo)
sbit zb1=P2^0; //P2= 0x02 levanta el brazo izquierdo
sbit zb2=P2^1; //P2=0x01 Baja el brazo izquierdo
//Control del brazo derecho (levántalo cuando yb1 sea 0 y yb2 es 1, de lo contrario déjalo)
sbit yb1=P2^2; //P2=0x08 Levanta el brazo derecho
sbit yb2=P2^3; //P2=0x04; Levante el brazo derecho
/ /Control del chasis del robot (gire a la izquierda cuando dp1 sea 0, gire a la izquierda cuando dp2 sea 1, de lo contrario gire a la derecha)
sbit dp1=P2^4; /P2=0x20 el chasis gira a la izquierda
sbit dp2=P2^5; //P2=0x10 el chasis gira a la derecha
//Control del chasis solar (gira a la izquierda cuando tdp1 es 0, tdp2 es 1, de lo contrario gire a la derecha)
sbit tdp1=P2^6; //P2=0x80 El chasis solar gira a la izquierda
sbit tdp2=P2^7; //P2=0x40 Solar chasis gira a la derecha
//Control remoto
sbit yk1=P1^0;//control remoto 1
sbit yk2=P1^1;//remoto control 2
sbit yk3=P1^2;/ /control remoto 3
sbit yk4=P1^3;//control remoto 4
sbit yk5= P1^4;//control remoto 5
void init() ;
void delay(uint);
void zidong();
void teclascan();
/**** ************************* Función principal*** ********************* ****/
void main()
{
init();
while(1)
{
zidong();
keyscan();
if(flag5==1)
zidong() ;
if(flag1==1)
P2=0x20;//Chasis gira a la izquierda
más
>
P2=0x00;
if(flag1s==1)
P2=0x10;//Chasis gira a la derecha
else
P2=0x00;
if(flag3==1)
P2=0x08;//Levanta el brazo derecho
else
P2=0x00;
if(flag3s==1)
P2=0x04;//Pon tu brazo derecho
else
P2=0x00;
if(flag4==1)
P2=0x02;//Levanta el brazo izquierdo
else
P2=0x00;
if(flag4s==1)
P2=0x01;//Pon el brazo izquierdo
else
P2 =0x00;
}
}
/********************* ********** ****Función de inicialización******************************/
void init()
{
bandera1=0;
bandera1s=0;
bandera2=0;
bandera3=0;
bandera3s=0;
bandera4=0;
bandera4s=0;
flag5=0;
TMOD=0x11;//Establecer el temporizador 0 como modo de trabajo
TH0=(65536-10000)/256;
TL0= (65536-10000)%256;
TH1=(65536-20000)/256;
TL1=(65536-20000)%256;
EA =1;//Habilitar interrupción total
ET0=1;//Habilitar interrupción del temporizador 0
ET1=1;
TR0=1;//Iniciar temporizador 0
TR1=1
}
/*********************; *********Utilice el temporizador 1, controle la rotación del chasis solar***************************/
void time0() interrupción 1//Sincronización de la base solar, transferencia una vez cada 5 minutos
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
t++;
if(t==6000)
{ t=0;
P2=0x80;//Chasis solar gira a la derecha
delay(1);
P2=0x00;
}
}
/**** *********************** Función de escaneo de teclado******* ***************** *****/
anular teclascan()
{
si (yk1==1&yk2==0)
{
retraso1(1);
si(yk1==1&yk2==0)
>
bandera1=1;
}
else bandera1=0;
if(yk2==1&yk1==0&yk3==0&yk4==0 )
{
retraso1(1);
si(yk2==1&yk1==0&yk3==0&yk4==0)
bandera2=1;
bandera1=0;
bandera3=0;
bandera4=0;
bandera5=0; /Borrar todo a 0
flag1s=0;
flag3s=0;
flag4s=0;
}
if(yk3==1&yk2==0)
{
retraso1(1);
if(yk3==1&yk2==0)
{
bandera3=1
}
más bandera3=0;
}
if(yk4==1&yk2==0)
{
retraso1(1);
if(yk4==1&yk2==0 )
{
bandera4=1
}
más bandera4=0;
} p >
if(yk5==1)
{
retraso1(1);
if(yk5==1)
{
bandera5=1
}
más bandera5=0;
}
if (yk1==1&yk2==1)
{
retraso1(1);
if(yk1==1&yk2==1)
{
bandera1s=1
}
más bandera1s=0; > if(yk3==1&yk2==1)
{
retraso1(1);
if(yk3==1&yk2==1) p >
{
flag3s=1;
}
else flag3s=0;
}
if(yk4==1&yk2==1)
{
retraso1(1);
if(yk4==1&yk2==1)< / p>
{
bandera4s=1
}
<p> else flag4s=0;
}
}
/********************* ***** ******** Función de demostración automática******************************/
void zidong ()
{
while(1)
{
P3=0xfd;//El amarillo la luz está encendida
P2=0x08;//Levanta el brazo derecho
delay(66);
P2=0x00;//Hacia el norte
P2=0x00; p>
delay(200);
P2=0x04;//Pon tu brazo derecho
delay(54);
P2=0x00;
P3=0xfe;/ /Luz roja encendida
P2=0x02;//Levantar brazo izquierdo
delay(52);
P2=0x00;
delay(200);
P2=0x01;//Pon tu brazo izquierdo
delay(50);
P2=0x00;
P2=0x20;//Chasis gira a la izquierda
retardo(260);
P2=0x00;
delay(800);
P2=0x08; //Levanta el brazo derecho
delay(66);
P2=0x00; // Hacia el norte
delay(200);
P2=0x04;//Pon tu brazo derecho
delay(54);
P2=0x00;
P3=0xfb; //La luz verde está encendida
P2=0x02;//Levanta el brazo izquierdo
delay(52 );
P2=0x00;
delay(200);
P2=0x01;//Pon tu brazo izquierdo
delay (50);
P2=0x00;
delay(500);
P2=0x20;//Chasis gira a la izquierda
delay(260);
P2=0x00;
delay(500);
P3=0xfb;//La luz amarilla está encendida
P2=0x08;//Levanta el brazo derecho
delay(66);
P2=0x00; //Hacia el norte
delay( 200);
P2=0x04;//Mete el brazo derecho
delay(54);
P2=0x00;
P3=0xfe;//Luz roja encendida
P2=0x02;//Levantar brazo izquierdo p>
delay(52);
P2=0x00; p>
delay(200);
P2=0x01;//Pon brazo izquierdo
delay(50);
P2=0x00;
delay(500);
P2=0x10;//Chasis gira a la derecha
delay(250);
P2=0x00;
delay(500);
P2=0x08;//mover brazo derecho
delay(66);
P2=0x00 ; //Hacia el norte
retraso(200);
P2=0x04;//Pon tu brazo derecho
delay(54);
P2=0x00;
P3=0xfb;//La luz verde está on//Hacia el Oeste
P2=0x02;//Levantar el brazo izquierdo
delay(52);
P2=0x00;
demora(200 );
P2=0x01;//Pon tu brazo izquierdo
demora(50);
P2=0x00;
retardo( 500);
P2=0x10;//Chasis gira a la derecha
retardo(250);
P2=0x00;
retraso (500);
P3=0xfd;//La luz amarilla está encendida
P2=0x08;//Levanta el brazo derecho
delay(66);
P2=0x00; //Al norte
delay(200);
P2=0x04;//Pon a tu derecha armado
retardo(54 );
P2=0x00;
P3=0xfe;//Luz roja encendida
P2=0x02 ;//Levantar brazo izquierdo
delay(52);
P2=0x00;
delay(200);
P2= 0x01;//Pon brazo izquierdo
delay(50);
P2=0x00;
P2=0x00;
P2= 0x10;//girar el chasis a la derecha
retardo(250);
P2=0x00;
retardo(800);
P2=0x08;//Levantar el brazo derecho
delay(66);
P2=0x00; //Hacia el norte
delay(200);
P2=0x04;//Poner brazo derecho
delay(54);
P2=0x00;
P3=0xfb;//verde luz encendida
P2=0x02 ;//Levantar brazo izquierdo
delay(52);
P2=0x00;
delay( 200);
P2= 0x01;//Pon brazo izquierdo
delay(50);
P2=0x00;
delay (500);
P2 =0x10;//Chasis gira a la derecha
delay(250);
P2=0x00;
P3=0xfb;//Luz amarilla encendida
P2=0x08; //Levantar el brazo derecho
delay(66);
P2=0x00; Hacia el norte
delay(200) ;
P2=0x04;//Mete el brazo derecho
delay(54);
P2=0x00;
P3=0xfe ;//Luz roja encendida
P2=0x02;//Levantar brazo izquierdo
delay(52); p>
P2=0x00;
delay(200);
P2=0x01;//Pon tu brazo izquierdo
delay(50);
P2=0x00;
delay(500);
P2=0x20;//Chasis gira a la izquierda
delay(260);
P2=0x00;
P2=0x08;//Levanta el brazo derecho
delay(66);
P2=0x00; //Al norte
demora(200);
P2=0x04;//Pon tu brazo derecho
demora(54 );
P2=0x00;
P3=0xfb;//La luz verde está encendida
P2=0x02;//Levanta el brazo izquierdo p>
delay( 52);
P2=0x00;
delay(200);
P2=0x01;//Pon el brazo izquierdo
retardo (50);
P2=0x00;
retardo(500);
P2=0x20;//Giros del chasis izquierda
retraso(260);
P2=0x00;
retraso(5);
}
}
/****************************** Función de retardo de 1 s******* *************** *************/
retraso nulo (uint z)
{
uint x,y;
for(x=z*62;x>0;x--) //Cuando z es 100, retrasa 1 segundo
for(y=20;y>0;y-- );
}