红外解码程序

  • 格式: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; }

}