永发信息网

51单片机红外解码来实现任意一个遥控器上的任意一个键进行绑定,只有绑定的键可以控制小灯亮灭

答案:2  悬赏:0  手机版
解决时间 2021-02-20 11:46
#include "reg52.h"
typedef unsigned char UINT8;
typedef unsigned int UINT16;
UINT8 IRDATABUF[4];
UINT8 IRDATABUF1[4];
UINT16 TimeBUF[33];
UINT16 TimeCount = 0;
sbit key1=P3^4;
sbit led=P1^0;
sbit led1=P1^5;
sbit IR=P3^2;
sbit sda=P2^0;//24c02设定
sbit scl=P2^1;//24c02设定
UINT8 startflag;
//UINT8 startflag1;
int aa=0;

void DelayMs( UINT16 Ms )
{
UINT8 i,m;
for ( i = Ms; i>0; i-- )
for(m=114;m>0;m--);

}
void keyscan()
{
if(key1==0)
{
DelayMs(10);
if(key1==0)
{
startflag=1;

while(key1==0);
}
}

}

void IRDecode( void ) interrupt 0

{
EX0 = 0;
TR0 = 0;

if( TH0 != 0 || TL0 != 0 )
{
TimeBUF [ TimeCount++ ] = (((UINT16)TH0) << 8) | TL0;
}

TH0 = 0;
TL0 = 0;

if( TimeCount == 33 )
{
EX0 = 0;
}
else
{
EX0 = 1;
TR0 = 1;
}

}

void Time0( void ) interrupt 1
{
TR0 = 0;
TH0 = 0;
TL0 = 0;
TimeCount = 0;
}
void InitTimer( void )
{
TMOD = 0x01;
TH0 = 0;
TL0 = 0;
ET0 = 1; /
}
void InitInt0( void )
{
IT0 = 1;
EX0 = 1;
EA = 1;
}
void main(void)
{
UINT8 i,j,k;
UINT8 IRDATA = 0;
IRDATABUF[1]=0x06;
//k=1;
DelayMs(100);
InitTimer();
InitInt0();
IR = 1;
while (1)
{
keyscan();
if( TimeCount == 33 )
{
TR0 = 0;
TH0 = 0;
TL0 = 0;
TimeCount = 0;
//led=0;
if(startflag==1)
{
for( i = 0; i < 4; i++ )
{
for( j = 1 ; j < 9; j++ )
{
IRDATA >>= 1;

if( TimeBUF[ i * 8 + j ] >= 1800 )
{
IRDATA |= 0x80;
}
}
IRDATABUF[ i ] = IRDATA;
IRDATA = 0;
startflag=0;
led=0;

}
}
else
{
IRDATABUF1[1]=0;
for( i = 0; i < 4; i++ )
{
for( j = 1 ; j < 9; j++ )
{
IRDATA >>= 1;

if( TimeBUF[ i * 8 + j ] >= 1800 )
{
IRDATA |= 0x80;
}
}
IRDATABUF1[ i ] = IRDATA;
//led1=0;
IRDATA = 0;

}
}
//EX0 = 1;
for(k=1;k<5;k++)
{
if(IRDATABUF[ k ]==IRDATABUF1[ k ])
{
aa++;
}
if(aa==4)
{
led1=~led1;
aa=0;
}

}
EX0=1;
}

}
}
现在同一个遥控器不是绑定的按键要按两下才会亮灯,如果是不同型号的遥控器就要按四次亮灯,我设定的程序应该是只有绑定的键才能亮灯,其他的不可以,这是为什么?

上面程序的24c02没有用到。我想实现的目标是按下独立键盘,选取遥控器一个按键按下保存,如果保存成功,led亮,然后再随便按一个键,四个数组进行比对,如果是原来保存的键,那么led1亮,如果不是原来保存的键,则不能控制led1亮灭。现在的问题是我选取了一个键保存,当我按这个键的时候,控制正常。但当我按遥控器的其他键的时候按两次竟然就可以控制led1亮,如果换另一型号的遥控器则要按四次就可以控制led1亮。正常的来说,如果我按的不是我保存的键,不管我按什么都应该没反应才对,现在按同一遥控器不同的键(不是保存的)两下就会点亮led1,不同型号遥控器就要四次。求大神解决!!!
最佳答案
按键程序错误,你可以写一个简单的,告诉你方法实现:主程序按键查询, 中断定时 松手执行动作。百试百灵(除矩阵型按钮)
全部回答
一。 1、红外遥控器发出的红外编码的定义都是一样的,有32bit(即4byte)数据。 2、byte1、byte2、byte3、byte4分别是地址码,地址反码,数据码,数据反码。 3、反码就是把码倒过来写,举个例子,10001000的反码就是00010001。 4、这四个字节中,地址码用来区别设备,数据码用来区别按键。数据反码跟地址反码分别用来校验数据码跟地址码。 二。 carmp3遥控器 1 2 3 4 …9 0的键码即32bit编码中的数据码(byte3),由生厂商自己定义,可查相关手册,否则只能写程序把它读出来。 三。 例程上网搜单片机红外解码程序就有啦。需要注意的是你搜到的程序对应是用多大的晶振写的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
恩施市恩施军复康健康理疗体验馆这个地址怎么
张睿真正的老婆图片
DNF纯堆力量或者智力的职业
苏果购物广场王明口店在哪里啊,我有事要去这
打耳洞2天之后拿掉耳钉流水了,一个可以带进
如何在苹果手机上同时看视频和小说
刚刚页眉还是正确的,等下再看页眉就自动改变
平方数是2 4 8 16
人教版第十五章 功和机械能 复习提纲 一.功 1
中国建设银行手机版用无线打不开用流量能打开
客厅墙面灰蓝色好不好
根据《信托公司治理指引》,我国信托公司的公
手机开不了机怎么可以把照片导出来
年轮片头曲叫什么名字
手机连接不上无线网,是什么情况,同样是一个
推荐资讯
买了个苏泊尔的电压力锅 CYSB50YC6A 100 请问
60个有关动物的成语及解释
以“珍惜拥有”为话题的800字作文 要有提纲
一个成语 什么众长?
Sims3房租的问题
为什么我玩CS晚一会肚子就难受啊
我家里有无线网络在异地怎么用
哪个品牌的墙纸最好
世界可以忽然什么都没有
兴江茶业专卖地址在什么地方,想过去办事
学习欧体字用什么笔最好???
英语翻译用双鹰的中文音.音翻译出英文.是中文
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?