Programación por infrarrojos de monitores LCD
# incluir & ltintrins.h & gt
#Definir carácter uchar sin signo
#Definir uint entero sin signo
#define ulong tipo largo sin firmar
# define Nop(){ _ Nop _(); ();}
código IR ulong volátil = 0x 00000000; //código clave de 32 bits
código ird ulong volátil = 0x 00000000;
código personalizado uint volátil = 0x0000//16 código de usuario
tiempo uint volátil _ us = 0x0000//tiempo entre dos flancos descendentes
tiempo uchar volátilH, timeL //Guarda el valor de TH1 TL.
uchar Lcustomcode//código de usuario bajo de 8 dígitos
uchar Hcustomcode//altura 8
código de datos uchar //código de datos clave de 8 dígitos
uchar mycode
uchar Rdatacode//complemento de datos clave de 8 bits
uchar UC 1 ms
uchar UC 10 ms; p >
uchar uc3ms
uchar ucDispTime
uchar ucDispOrder
uchar ucDispCon
uchar ucSpeakerTime
Ninguno Código de carácter de símbolo LedData[16] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};
Ninguno Código de carácter de símbolo LedCon[2] = {0x8f, 0x4f};
Carácter sin firmar UC dispdata[2]; //Datos de visualización de almacenamiento
sbit led 1 = p3^7;
sbit led 2 = p3^6;
sbit power=p1^0; //Interruptor de encendido
sbit pitido = p2^1;
bit new ircode = 0; //Indica que al procesar códigos de 32 bits, habrá un nuevo código de control remoto.
Peso de datos de bits = 0; // Cuando es 1, los datos se leen correctamente.
Bit bSampleOk
Bit b muestra
Bit b 10ms int
Bit b 1 msint; >bKeySound bit;
Bit b 1ms main;
Bit IR_E; //Indica que los datos de escaneo se actualizarán cuando haya un nuevo botón del control remoto.
bit b3msint
void senddatodispdevice();
void Ir_process();
void display();
void beep();
/* * * * *El oscilador de cristal es de 12 MHz * * * * * */
/* *El tiempo máximo del temporizador es 1,12 MHZ 65,53 ms***/
// -
inicialización nula()
{
IP = 0x09// Temporizador 1, interrupción externa 0 tiene alta prioridad.
TMOD = 0x 11; // Temporizador 0, modo de trabajo 1; Temporizador 1, modo de trabajo 1
TCON = 0x 01 // La interrupción externa comienza desde el flanco descendente de 0; Disparador (incluido TR1=0, TR0=0)
TH0 = 0xff//Inicializa el temporizador 0, temporización 0,2 ms.
TL0 = 0x47
th 1 = 0x 00; //Inicializar temporizador 1
TL 1 = 0x 00;
EA = 1; //Activar interrupción completa
ET0 = 1; //Activar interrupción T0
et 1 = 1 //Activar interrupción T1
EX0 = 1; //abrir INT0
tr 1 = 0;
TR0 = 1
}
// -
Programa de tiempo no válido (no válido)
{
b 1 msmain = b 1 msint
b 1ms main = 0 ; p>
b 10ms int = 0;
if(b1msInt == 1)
{
b 1ms principal = 1;
if(++uc10ms == 10)
{
UC 10ms = 0
b 10ms int = 1; p> if(bKeySound==1)
{beep();
bkey sound = 0;
}
}< / p>
}
}//void TimeProg(void)
// -Interrupción 0 -
void IR _ ISR()interrupción 0 usando 1//Función de procesamiento de interrupción de control remoto
{
Uchar estático cn
tr 1 = 0;
timeH = th 1 ;
tiempoL = TL 1;
th 1 = 0
TL 1 = 0
tr 1 = 1; / Iniciar interrupción del temporizador 1
time _ us =(unsigned int)timeH
time _ us = time _ us & lt& lt8;
time _ us; = time_us | timeL
if(time_us>12200.&time_us<13000){cn=1;IRcode=0;}//Cuando encuentre el código de inicio, cambie cn y se borrará el código IR.
//La duración del tiempo del código piloto es 9 ms+4,5 ms.
if(cn & lt;34)
{
if(time _ us & gt; 950 & amp& amptime _ us & lt1120) //0
{
código IR = código IR | 0x00000000
if(cn<33)códigoIR = código IR>>1;
}
else if(time_us>1920. & amptime_us<2120)//1t>1950.
&t & lt2150
{
código IR = código IR | 0x80000000
if(cn <33)códigoIR = código IR >>1; p>
}
//else if(time_us>10000.&time_us<11000){ird code = IRcode;cn=34}//Se encontró un código duplicado
//cn se utiliza para registrar el bits de datos recibidos.
}
cn++;
if (cn==34)
{ nuevo código ir=1;
tr 1 = 0;
Irdcode = IRcodecn = 0;
}//Después de leer el código de 32 bits, genera un nuevo código.
}
// - timer_ISR -
Voidtimer0 _ ISR() usa 2//La función de interrupción del temporizador 0 interrumpe 1
{
TR0 = 0;
TH0 = 0xff//Inicializa el temporizador 0, temporización 0,2 ms, oscilador de cristal 11,0592 MHZ.
TL0 = 0x47
TR0 = 1;
if(++uc1ms == 5)
{
UC 1ms = 0;
b 1 msint = 1;
if(++uc3ms==8)
{
uc3ms = 0;
B3 msint = 1;
senddatodispdevice(); //n* ms enviar pantalla.
}
}
}//void Timer0IntProg() interrupción 1 usa 1
void timer 1 _ ISR() interrupción 3 usando 3//función de interrupción del temporizador 1
{
tr 1 = 0;
th 1 = 0x 00 //Inicializa el temporizador 1
TL 1 = 0x 00;
tr 1 = 1;
}
//-senddatodispdevice-
void SendDataToDispDevice ()
{
Carácter sin firmar n;
//Watchdog();
if(++ucDispOrder >= 2 )UC disporder = 0;//Siguiente guía de visualización
//El siguiente es el control de bits para enviar datos de control.
if(ucDispOrder==0)
{ led 1 = 0
led 2 = 1
nop();
nop();
}
if(b3msint==1)
{if(ucDispOrder==1) p> p>
{ led 2 = 0
led 1 = 1
nop(); >
}
}
//Lo siguiente es enviar los datos de visualización.
n = datos LED[ucDispData[ucDispOrder]];
P0 = n
} //void SendDataToDispDevice()
// - principal() -
void main()
{
init();
beep();< / p>
mientras(1)
{
tiempo Prog();
IR _ proceso();
mostrar ();
}
}
void Ir_process()
{
If(NewIRcode= = 1) //Si hay un nuevo código de control remoto por aprender,
{
new ircode = 0 //Se borra después de la lectura, lo que indica que se ha leído el nuevo código. .
código personalizado =(ird code>>16);//Obtiene el botón en el código de infrarrojos.
//Obtén el código de usuario inferior de 8 dígitos.
Lcustomcode = customcode & gt& gt8;//Toma los 8 bits inferiores y presiona la tecla de código.
datacode=(unsigned Character)(customcode & amp0x 00 ff); //Toma los 8 bits superiores y presiona la tecla de código.
Rdatacode = Lcustomcode//El código inverso bajo de 8 dígitos de la clave del código.
if(~código RDA!=código de datos)
{ derecho de datos = 0
código ird = 0; code = rdata code = 0;
}//Verificar código de usuario, anti-código.
Otro
{ derecho de datos = 1;
IR _ E = 1
mycode = código de datos}
if(datos correctos = = 1){ bKeySound = 1; datos correctos = 0;}
}
}
Pantalla vacía() p>
{
/*Carácter sin firmar a[2];
a[0]= mi código & gt& gt4;
a[1]= mi código & 0x0f
ET0 = 0;
UC dispdata[0]= a[0 ]; p>
UC dispdata[1]= a[1];
ET0 = 1;*/
if(IR_E==1)
{
ET0 = 0;
Datos de visualización de UC[0]= mi código & 0x0f
mycode = mycode & gt& gt4; p>UC dispdata[1]= mi código & 0x0f
IR _ E = 0
ET0 = 1
}
}
/************************************ **** *********************/
Retraso no válido (carácter x sin firmar)//x * 0,14 milisegundos
{
Carácter sin firmar a;
while(x -)
{
for(a = 0; a<13;a++){; }
}
}
/************************ * *****************************************/
Bip no válido()
{
Caracteres sin firmar I;
for(I = 0;i<100;i++)
{ p>
Retraso(4);
Bip=! Beep; //Bip invertido
}
Beep = 1;
//Apaga el timbre
}