#include<reg51.h>
#include"lcd.h"
sbit IRIN=P3^2;
unsigned char code CDIS1[16]={" ZZY 1003020134 "};
unsigned char code CDIS2[16]={" RED/CODE: -- H "};
unsigned char IrValue[6];
unsigned char Time;
void IrInit();
//void getch();
void DelayMs(unsigned int );
unsigned char a;
void initmpu(void)//??????????????
//11.0592MH???,???9600,?????
{
TMOD=0x21;//???1?????2
TL1=0xf3; //??????
TH1=0xf3;
SCON=0x50; //????????1,?????
PCON=0x80;//????????
IE=0x90;//????,?????
TR1=1;//?????1
}
/*******************************************************************************
* º¯ÊýÃû : main
* º¯Êý¹¦ÄÜ : Ö÷º¯Êý
* ÊäÈë : ÎÞ
* Êä³ö : ÎÞ
*******************************************************************************/
void main()
{
unsigned char i;
initmpu();
IrInit();
LcdInit();
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(CDIS1
);
}
LcdWriteCom(0x80+0x40);
for(i=0;i<16;i++)
{
LcdWriteData(CDIS2);
}
while(1)
{
IrValue[4]=IrValue[2]>>4; //¸ßλ
IrValue[5]=IrValue[2]&0x0f; //µÍλ
if(IrValue[4]>9)
{
LcdWriteCom(0xc0+0x0b); //ÉèÖÃÏÔʾλÖÃ
LcdWriteData(0x37+IrValue[4]); //½«Êýֵת»»Îª¸ÃÏÔʾµÄASCIIÂë
IrValue[4]=IrValue[4]+0x37;
SBUF=IrValue[4];
DelayMs(10);
}
else
{
LcdWriteCom(0xc0+0x0b);
LcdWriteData(IrValue[4]+0x30); //½«Êýֵת»»Îª¸ÃÏÔʾµÄASCIIÂë
IrValue[4]=IrValue[4]+'0';
SBUF=IrValue[4];
DelayMs(10);
}
if(IrValue[5]>9)
{
LcdWriteCom(0xc0+0x0c);
LcdWriteData(IrValue[5]+0x37); //½«Êýֵת»»Îª¸ÃÏÔʾµÄASCIIÂë
IrValue[5]=IrValue[5]+0x37;
SBUF=IrValue[5];
DelayMs(10);
}
else
{
LcdWriteCom(0xc0+0x0c);
LcdWriteData(IrValue[5]+0x30); //½«Êýֵת»»Îª¸ÃÏÔʾµÄASCIIÂë
IrValue[5]=IrValue[5]+'0';
SBUF=IrValue[5];
DelayMs(10);
}
}
}
/*******************************************************************************
* º¯ÊýÃû : DelayMs()
* º¯Êý¹¦ÄÜ : ÑÓʱ
* ÊäÈë : x
* Êä³ö : ÎÞ
*******************************************************************************/
void DelayMs(unsigned int x) //0.14msÎó²î 0us
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++)
{}
}
}
/*******************************************************************************
* º¯ÊýÃû : IrInit()
* º¯Êý¹¦ÄÜ : ³õʼ»¯ºìÍâÏß½ÓÊÕ
* ÊäÈë : ÎÞ
* Êä³ö : ÎÞ
*******************************************************************************/
void IrInit()
{
IT0=1;//ϽµÑØ´¥·¢
EX0=1;//´ò¿ªÖжÏ0ÔÊÐí
EA=1; //´ò¿ª×ÜÖжÏ
IRIN=1;//³õʼ»¯¶Ë¿Ú
}
/*******************************************************************************
* º¯ÊýÃû : ReadIr()
* º¯Êý¹¦ÄÜ : ¶ÁÈ¡ºìÍâÊýÖµµÄÖжϺ¯Êý
* ÊäÈë : ÎÞ
* Êä³ö : ÎÞ
*******************************************************************************/
void ReadIr() interrupt 0
{
unsigned char j,k;
unsigned int err;
Time=0;
DelayMs(70);
if(IRIN==0) //È·ÈÏÊÇ·ñÕæµÄ½ÓÊÕµ½ÕýÈ·µÄÐźÅ
{
err=1000; //1000*10us=10ms,³¬¹ý˵Ã÷½ÓÊÕµ½´íÎóµÄÐźÅ
/*µ±Á½¸öÌõ¼þ¶¼ÎªÕæÊÇÑ»·£¬Èç¹ûÓÐÒ»¸öÌõ¼þΪ¼ÙµÄʱºòÌø³öÑ»·£¬ÃâµÃ³ÌÐò³ö´íµÄʱ
ºî£¬³ÌÐòËÀÔÚÕâÀï*/
while((IRIN==0)&&(err>0)) //µÈ´ýÇ°Ãæ9msµÄµÍµçƽ¹ýÈ¥
{
DelayMs(1);
err--;
}
if(IRIN==1) //Èç¹ûÕýÈ·µÈµ½9msµÍµçƽ
{
err=500;
while((IRIN==1)&&(err>0)) //µÈ´ý4.5msµÄÆðʼ¸ßµçƽ¹ýÈ¥
{
DelayMs(1);
err--;
}
for(k=0;k<4;k++) //¹²ÓÐ4×éÊý¾Ý
{
for(j=0;j<8;j++) //½ÓÊÕÒ»×éÊý¾Ý
{
err=60;
while((IRIN==0)&&(err>0))//µÈ´ýÐźÅÇ°ÃæµÄ560usµÍµçƽ¹ýÈ¥
{
DelayMs(1);
err--;
}
err=500;
while((IRIN==1)&&(err>0)) //¼ÆËã¸ßµçƽµÄʱ¼ä³¤¶È¡£
{
DelayMs(1);//0.14ms
Time++;
err--;
if(Time>30)
{
EX0=1;
return;
}
}
IrValue[k]>>=1; //k±íʾµÚ¼¸×éÊý¾Ý
if(Time>=8) //Èç¹û¸ßµçƽ³öÏÖ´óÓÚ565us£¬ÄÇôÊÇ1
{
IrValue[k]|=0x80;
}
Time=0; //ÓÃÍêʱ¼äÒªÖØÐ¸³Öµ
}
}
}
if(IrValue[2]!=~IrValue[3])
{
return;
}
}
}
这是一个红外解码程序