完整的源代碼下載:http://www.zg4o1577.cn/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;
}