Coche inteligente basado en control por microcontrolador pic
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char zkb1=0 ;
//**El ciclo de trabajo del motor izquierdo**//
unsigned char zkb2=0
//**El ciclo de trabajo del motor derecho Relación nula**//
unsigned chart t=0
//**Contador de interrupciones del temporizador**//
sbit LSEN1; =P2^ 0;
bit LSEN2=P2^1;
bit MSEN1=P2^2;
bit RSEN1=P2^3;
bit RSEN2=P2^4;
//**sensor***/
bit IN1=P1^0;
bit IN2; =P1^ 1;
bit IN3=P1^2;
bit IN4=P1^3
bit ENA=P1^4; >
sbit ENB=P1^5;
//************¿Temporizador de inicialización?
void init()
{
TMOD=0x01
TH0=(65536-100)/256; >
TL0=(65536-100)%256;
EA=1;
ET0=1;
TR0=1; >
}
//************función de interrupción + modulación de ancho de pulso******************//
void timer0() interrupción 1
{
if(t ENA=1 más ENA =0 if(t ENB=1 más ENB=0; t++; si(t>=50) {t=0;} //******** **********Sigue recto******************// void qianjin() { zkb1=30 zkb2=30; } / /************ ****Pequeña función de giro a la izquierda******************// void turn_left1 () { zkb1=10; zkb2=25 } //******; ***********Función de giro grande a la izquierda***** **********// void turn_left2() { zkb1=5; zkb2=25; } //Función de giro a la izquierda en *********** ******************// ya d turn_left3() { zkb1=10 zkb2=20 } //******; *********Función de giro pequeño a la derecha******************// void turn_right1() { zkb1 =25; zkb2=10; } //**************** **Gran función de giro a la derecha ***************// void turn_right2() { zkb1=25; zkb2=5 ; } //Función de giro a la derecha en ********************** ******** **// void turn_right3() { zkb1=20 zkb2=10; } //******************Función de seguimiento******************// void xunji() { bandera uchar if((RSEN1==1)&&(RSEN2==1) &&(MSEN1==0) &&(LSEN1==1)&&(LSEN2==1)) { flag=0 } //****** Siga recto***** **// else if((RSEN2==0)&&(RSEN1==1)&&(LSEN1==1)&&( LSEN2==1)&&( MSEN1==1)) { flag=1;} //***Izquierda 1, pequeño giro a la derecha***// else si((RSEN1==1)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==0)&&(MSEN1==1)) { flag=2 } //*** Desviación derecha 1, pequeño giro a la izquierda *** // else if((RSEN1==1)&&(RSEN2 ==1)&&( LSEN1==0)&&(LSEN2==1)&&(MSEN1==1)) { flag=3 } //*** Desviación derecha 2, izquierda grande; girar***// else if((RSEN2==1)&&(RSEN1==0)&&(LSEN1==1)&&(LSEN2==1) &&(MSEN1==1 )) { flag=4;} //***Izquierda 2, gran giro a la derecha***// else if(( RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==0)&&(MSEN1==1)) { bandera=5 ; } //* **Salga a la derecha 3, gire a la izquierda en el centro***// else i f((RSEN1==0)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==1)&&(MSEN1==1)) { bandera=6 } //***Izquierda 3, gira a la derecha***// cambiar (bandera) { case 0: qianjin(); p> ruptura; caso 1: turn_right1(); ruptura caso 2: turn_left1(); ruptura; caso 3: turn_left2(); ruptura; caso 4: turn_right2(); descanso; caso 5: turn_left3(); p> romper; caso 6: turn_right3(); romper; predeterminado: romper } } //******************Programa principal*************** ** **// void main() { init() zkb1=30 zkb2=30; ; while(1) { IN1=1; //******Encienda el motor y arranque******// IN2=0; IN3=1; IN4=0; ENA=1; ; while(1) { xunji() //**********Traza****; ******** *// } } }