Buscando el programa C de decodificación de infrarrojos e instrucciones detalladas
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); p>
{
irok=1
i=0
}
}
else
{
irtime=0;
startflag=1
}
} p>
}
/*----------------- ------------------ -------------
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) p>
{
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()
}
}
}