求单片机红外解码程序(c语言)

2024-11-28 00:13:01
推荐回答(3个)
回答(1):

放入数组中,之间读取数组中的3.4位即可

回答(2):

接受模块的信号输出端接INT0中断口。。。
P1.0,p1.1上接LED显示接受的情况。。。
用pt2262无线遥控器解码测试通过
#include
unsigned int tmp,t1=0;
unsigned char i9=0,t2;
char *dataTMP;
unsigned char dataTMP0,dataTMP1,dataTMP2,datacheck;
unsigned char bdata oeCON;
sbit UD0=oeCON^0;
sbit UD1=oeCON^1;
sbit OC0=oeCON^2;
sbit OC1=oeCON^3;
sbit p10=P1^0;
sbit p11=P1^1;
sbit p32=P3^2;
bit flagF=1,press;
void up_down();
void open_close();
void delay(unsigned char);
void main()
{ IT0=1;
EX0=1;
TMOD=0x09;
EA=1;
TR0=1;
P3=0xff;
UD0=1;
UD1=0;
OC0=1;
OC1=0;
while(1)
{ p10=p32;
if(datacheck==0xff)
{
/**********编码解析后执行代码*******************

***********************/
}
}
/*************************************************************
中断服务程序
通过探头flagF的值判断是否接收到sync信号
接收到的数据存入dataTMP的三个变量中
连续按键的确认:
等待i9的值变为0;
延时
再次检测i9的值是否为0;
是0则认为按键中止。
*************************************************************/
int0() interrupt 0
{
tmp=TH0*256+TL0;
TH0=0x0;
TL0=0x0;
if(flagF)
{
if(tmp>1295&&tmp<1300)
{p11=~p11;flagF=0;}
}
else
{
if(i9<9) dataTMP=&dataTMP0;
else
{dataTMP=i9<17?(&dataTMP1):(&dataTMP2);}
(*dataTMP)<<=1;
if(tmp>100&&tmp<150)
(*dataTMP)=(*dataTMP)|0x01;
else if(!(tmp>10&&tmp<100))
{
flagF=1;
i9=0;
}

if(i9==24)
{
if(datacheck!=dataTMP2)
datacheck=dataTMP2;
else
datacheck=0xff; /*按键确认*/
}
i9++;
}
}
/*******************
延时函数
时间:1-2s
*******************/
void delay(unsigned char k)
{unsigned char i;
for(i=0;ifor(tmp=0;tmp<10300;tmp++);
}

回答(3):

这个以前搞过,测试可运行。1602显示。已经发你QQ邮箱了,希望对你有帮助