完整的源代码下载:http://www.51hei.com/f/有爱碗参考程序.zip
#include "hongwai.h"
#include <macroconst.h>
//程序由淘宝环宇电子提供,本参考程序只为学习交流,技术支持QQ372451298,
//程序难免有不足支持,欢迎更正指出!!!
uchar dat1[4]={0,0,0,0};
uchar code Disp_Tab[] = {0xfe,0xfd,0xfb,0xfc,0xfa,0xf9,0xf8};
bit flag=0;
uchar hongwainum=0;//开始led指示灯通过Disp_Tab[]赋值
void hongwai_initial() //红外初始化
{
TMOD=0x01; //定时器0工作方式1
EA=1; //开总中断
EX0=1; //开外部中断
}
/************主函数**********************/
void main(void )
{
hongwai_initial(); //红外初始化
while(1)
{
if(flag)
{
P1=Disp_Tab[hongwainum]; //到指定的led显示
flag=0; //关闭接收数据标志
}
}
}
void int0(void) interrupt 0
{
uchar i,j;
EX0=0; //关外部中断
i=10;
while(--i)
{
TH0=0xfc;
TL0=0xe7;
TR0=1;
while(!TF0); //延时860毫秒
TF0=0;
TR0=0;
if(irpot) {EX0=1; return ;}
}
while(!irpot);
TH0=0xf6;
TL0=0xff;
TR0=1;
while(!TF0);
TF0=0;
TR0=0; //延时2500毫秒
if(!irpot)
{
EX0=1; //开外部中断
return;
}
while(irpot);
for(i=0;i<4;i++) //依次存取四个数据,其中dat1[2]为所需数据
{
for(j=0;j<8;j++)
{
while(!irpot);
dat1[i]>>=1;
TH0=0xfc;
TL0=0xe7;
TR0=1;
while(!TF0);
TR0=0;
TF0=0; //延时860us
if(irpot)
{
dat1[i]|=0x80; //dat1[2]为所需数据
while(irpot);
}
}
}
switch(dat1[2]) //dat1[2]为所需数据
{
case 0x0c: hongwainum=0;break; // 1
case 0x18: hongwainum=1;break; // 2
case 0x5e: hongwainum=2;break; // 3
case 0x08: hongwainum=3;break; // 4
case 0x1c: hongwainum=4;break; // 5
case 0x5a: hongwainum=5;break; // 6
case 0x42: hongwainum=6;break; // 7
default:break;
}
flag=1; //接收数据标志位
EX0=1; //开外部中断
return;
}