Red de conocimiento informático - Conocimiento sistemático - Buscando el programa C de decodificación de infrarrojos e instrucciones detalladas

Buscando el programa C de decodificación de infrarrojos e instrucciones detalladas

#includelt; reg52.hgt; // Incluye el archivo de encabezado, que generalmente no necesita ser modificado. El archivo de encabezado contiene la definición del registro de función especial.

sbit IR=P3^2; banderas de interfaz infrarroja

#define DataPort P0 //definir DataPort En el programa, si se encuentra DataPort, use P0 en su lugar

sbit LATCH1=P2^6 //definir puerto de activación de pestillo; puerto de habilitación de pestillo de segmento DataPort en Cuando se encuentre en el programa, use P0 en su lugar

sbit LATCH1=P2^6 //defina el pestillo de segmento de puerto de habilitación de pestillo

sbit LATCH2=P2^7; ; // bloqueo de bits

/*------------------------------------ ------------ - -----

Declaración de variable global

--------------- ----------- ---------------------*/

//Código de carácter sin firmar dofly_DuanMa[10] ={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

unsigned char irtime; // variable global para IR

bit irpro_ok, irok;

ircord de caracteres sin firmar[4];

irdata de caracteres sin firmar[33];

/*----------- ---------- --------------------------

Declaración de función

------- -------- --------------------------------- */

void Ir_work(void);

void Ircordpro(void);

/*------------- --------- ------------ --------------

Procesamiento de interrupción del temporizador 0

----- ------------------------------------------ --------*/

void tim0_isr (void) usa 1

{

irtime //Se usa para calcular el tiempo entre dos bordes descendentes

}

/*------------------------------- ------------------- ----

Procesamiento de interrupción de interrupción externa 0

----- --- ------------------- ----------------------*/

nulo EX0_ISR (void) interrupción 0 //interrupción externa 0 función de servicio

{

static unsigned char i;//

Recibir procesamiento de señal infrarroja

bit estático startflag //Si comenzar a procesar el bit de bandera

if(startflag)

{

if( irtimelt;63amp;irtimegt;=33)//código de arranque Código de encabezado de TC9012, 9 ms 4,5 ms

i=0;

irdata[i]=irtime;//store la duración de cada nivel para luego determinar si es 0 o 1

irtime=0

i

if(i==33)

{

irok=1

i=0

}

}

else

{

irtime=0;

startflag=1

}

}

}

/*----------------- ------------------ -------------

Inicialización del temporizador/contador 0

------------------ ----------------------------------*//p>

void TIM0init(void )// Temporización /Inicialización del contador 0

{

TMOD=0x02; //Modo de trabajo 2 del temporizador0, TH0 es el valor de recarga, TL0 es el valor inicial

TH0=0x00 ; // Recargar valor

TL0=0x00; // Valor de inicialización

ET0=1 // Activar interrupción

TR0= 1;

}

/*------------------------------- ----- ------------

Inicialización de interrupción externa 0

--------------- ----- --------------------- -------*/

void EX0init(void)

{

IT0 = 1; //Especifica la interrupción externa 0 como disparador de flanco descendente, INT0 (P3.2)

EX0 = 1; /p>

EA = 1; //Interrupción total

}

/*------------------- ---- --------------------------

Procesamiento de valores clave

--- ----- ----------------------------------------*

void Ir_work (void)//Programa de dispersión de claves infrarrojas

{

/* switch(IRcord[2])// Determinar el tercer valor digital

{

case 0x0c: DataPort=dofly_DuanMa[1]; //1 muestra el valor clave correspondiente

case 0x18: DataPort=dofly_DuanMa[2]; /2

caso

0x5e: DataPort=dofly_DuanMa[3]; descanso; //3

caso 0x08.DataPort=dofly_DuanMa[4]; descanso; //4

caso 0x1c: DataPort=dofly_DuanMa[ 5]; romper; //5

caso 0x5a: DataPort=dofly_DuanMa[6]; romper; //6

caso 0x42: DataPort=dofly_DuanMa[7]; /7

caso 0x52: DataPort=dofly_DuanMa[8]; //8

caso 0x4a: DataPort= dofly_DuanMa[9];

predeterminado: break;

}*/

P1=IRcord[2];

irpro_ok=0 //Indicador de finalización del procesamiento

}

/*----------- ------------------------- - ------------

Procesamiento del valor del código IR

------------------- ----------------------------*//p>

void Ircordpro( void)//IR valor de código Función de procesamiento

{

char unsigned i, j, k

cord char unsigned, valor

k=1; ;

for(i=0;ilt;4;i) //procesando 4 bytes

{

for(j=1;jlt;=8 ;j ) //Procesa 1 byte de datos de 8 bits

{

cord=irdata[k];

if(cordgt; 7)// es mayor que Un cierto valor de 1 tiene una relación absoluta con el oscilador de cristal. Si se calcula usando 12M, este valor tendrá un cierto error

valor|=0x80;

Si ( jlt; 8)

{

valorgt;=1;

}

k; }

IRcord[i]=valor;

valor=0; <

}

irpro_ok=1; posición 1

}

/*------------------------------- -- ---------------

Función principal

------------ ----- ----------------------------------*/

void main(void)

{

EX0init(); //Inicializa interrupción externa

TIM0init(); //Inicializa temporizador

DataPort=0xfe; tome el código de bits Seleccione el primer dígito, que es "0".

e.Binario 1111 1110

LATCH2=1; //bloqueo de bits

LATCH2=0;

while(1)//bucle principal

{

if(irok) //si la recepción es buena, proceda al procesamiento de IR

{

Ircordpro();

irok=0;

}

if(irpro_ok) // Si el procesamiento es bueno, realice el procesamiento del trabajo, como mostrar el número correspondiente después de presionar la tecla correspondiente, etc.

{

Ir_work()

}

}

}