本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit ir=P3^2; //红外端口
sbit shuru=P1^0;
sbit yiwei=P1^1;
sbit suocun=P1^2;
uchar code table[]={0x81,0xf3,0x49,0x61,0x33,0x25,0x05,0xf1,0x01,0x21};
uchar count,keycode;
uchar IR_dat[2];
void out_disp(uchar) ;
void display();
void init();
void delay(uchar);
void ir_code();
void main(void)
{
ir=1;
init();
while(1)
{
ir_code();
display();
delay(10);
}
}
void init(void)
{
EA=1; //开总中断
TMOD=0x01; //定时器0,模式2,8位自动装载模式
TH0=(65536-50)/256; //定时50us
TL0=(65536-50)%256;
ET0=1; //允许定时器中断
TR0=1;
}
void time0(void) interrupt 1
{
TH0=(65536-50)/256; //定时50us
TL0=(65536-50)%256;
count++;
}
void ir_code()
{
uchar i,j;
while(ir); //1
for(i=0;i<2;i++)
{
for(j=0;j<8;j++)
{
count=0;
while(!ir); //0 0.25ms
while(ir); //1 0.75ms-0/1.75ms-1
if((count>35)&&(count<45)) //1的脉冲宽度2ms
{
count=0;
IR_dat[i]=IR_dat[i]|0x01;
IR_dat[i]<<=1;
} //1
else if((count>15) && (count<25)) //0的脉冲宽度1ms
{
count=0;
IR_dat[i]<<=1;
}
}
if(i==1)
{
while(!ir);//0
keycode=IR_dat[1];
}
if(IR_dat[0]!=0xe2)
break;
//错误处理,引导码是否正确引导码C0~C7由1110XX10组成
}
IR_dat[0]=0;
IR_dat[1]=0;
}
void out_disp(uchar num)
{
uchar i,k;
for (i=0;i<8;i++)
{
k=num&0x80;
shuru=k;
num=num<<1; //左移
yiwei=1; //移位
delay(1);
yiwei=0;
}
}
/*键值*/
void display()
{
switch(keycode)
{
case 0x00:out_disp(table[1]);
break;
case 0x10:out_disp(table[2]);
break;
case 0x08:out_disp(table[3]);
break;
case 0x18:out_disp(table[4]);
break;
case 0x04:out_disp(table[5]);
break;
case 0x14:out_disp(table[6]);
break;
case 0x0c:out_disp(table[7]);
break;
case 0x1c:out_disp(table[8]);
break;
case 0x80:out_disp(table[9]);
break;
case 0x90:out_disp(table[0]);
break;
}
}
void delay(uchar n)
{
uchar i,j;
for(i=0;i<n;i++)
for(j=0;j<121;j++) ;
} |