红外解码程序
- 格式:doc
- 大小:31.50 KB
- 文档页数:6
//51单片机 11.0592兆晶振 接收到低电平0.56ms 高电平1.69为1
#include
#include
#include
#include "CaoZuo_5110.h"
#include
#define uint32 unsigned long int
#define uchar unsigned char
#define uint unsigned int
uchar bitnum,startflag , irdate[33];
uchar m=0;
uint ircode[4];//必须为int型 因为%x发送的是整数
char a[12]=0;
uchar ok=0,reok=0;
char lian1,lian2;
void irchuli();
void comsend(void )
{ uchar i;
TI=1; //不要放在for里面
for(i=0;i<4;i++)
{
// SBUF=ircode[i];
// while(TI==0);
// TI=0;
printf("%x",ircode[i]);
}
TI=0; //不要放在for里面
}
void main()
{
EA = 1;//总中断允许开
EX0=1;//外中断0允许中断
IT0=1;
TMOD=0x22; //定时器T0工作方式2
TH0=0x9c;
TL0=0x9c;
//自动重载
TH1=0xfd;
TL1=0xfd;
ET0=1;
TR0=1;
// ET1=1;
SCON=0X58;
PCON=0;
TR1=1;
LCD_init(); //初始化液晶
LCD_clear();
LCD_write_english_string(0,0,"THE CODE IS :");
while(1)
{
if(ok==1)
{
irchuli();
sprintf(a,"%x%x%x%x",ircode[0],ircode[1],ircode[2],ircode[3]);
LCD_write_english_string(0,3,a);
comsend();
ok=0;
}
}
}
void irchuli()
{
uchar k,i,j;
uchar value=0;
k=1;
for(j=0;j<4;j++)
{for(i=0;i<8;i++)
{
value=value>>1;
if(irdate[k]>18)
{
value|=0x80;
}
k++;
}
ircode[j]=value;
}
reok=1;
}
void Time0() interrupt 1
{
m++;
}
void EX_0() interrupt 0
{
if(startflag)
{
if(m>90)
{
bitnum=0;
}
irdate[bitnum] =m;
m=0;
bitnum++;
if(bitnum==33)
{
bitnum=0;
ok=1;
}
}
else { startflag=1;m=0; }
}