用增强型51实验板实现红外线遥控
[09-14 01:30:23] 来源:http://www.88dzw.com 电子制作 阅读:8685次
文章摘要:学习板上的一体化红外接收头一共有3个脚,分别是“地”、“电源”、“数据”,其“数据”脚与51单片机的“INTO”脚,整个过程可以分成两步,第一步是读取并判断引导码是否正确,如果不是则直接返回并初始化检测参数;第二步是连续4次,按照每次8bit读取4个字节的后续数据,其中,检测过程里对“O”和“1”的判断必须是在开启计时之后,以减少因为程序执行而导致的测量时间长度上误差。解码过程关键是使用单片机的定时器,我们可以用引导码的下降沿来
用增强型51实验板实现红外线遥控,标签:电子小制作,http://www.88dzw.com学习板上的一体化红外接收头一共有3个脚,分别是“地”、“电源”、“数据”,其“数据”脚与51单片机的“INTO”脚,整个过程可以分成两步,第一步是读取并判断引导码是否正确,如果不是则直接返回并初始化检测参数;第二步是连续4次,按照每次8bit读取4个字节的后续数据,其中,检测过程里对“O”和“1”的判断必须是在开启计时之后,以减少因为程序执行而导致的测量时间长度上误差。
解码过程关键是使用单片机的定时器,我们可以用引导码的下降沿来触发单片机的定时器开始计时处理,这样就可以获得电平的时间长度了,一般的遥控器编码在长按按键的时候,会连续发数据,可能是同样的数据,也有可能是个特定的所谓的重复帧,但大致上15ms之内没有信号收到就表示当前的数据帧已经接收完毕。
解码部分程序代码如下:
unsigned char uPD6121_read_code_8(void){unsigned char temp=0;unsigned char i;for(i=0;<8;i++){temp=temp》1:
while(ir_receive==0);//等待高电平测试结束TR1=0;//高电平测试结束,停止计时high_level_time=TH1*256+TL1;//保存高电平的数据TH1=0;TL1=0;TR1=1;//启动对低电平的测试while(ir_receive==1){if(TH 1>0x4e) {decode_error=1;return 0;} //超时出错,返回}
TR1=0; //低电平测试结束Iow_level_time=TH1*256+TL1;//保存低电平的数据TH1=O;TL1=O;TR1=1;//如果电平长度不在合理的范围内,则认为出错if((high_level_time<400)II(high_level_time>700)II(Iow_level_time<400)II(Iow_level—time>1900)){decode_error=1;return O;}
if ((Iow_level_time>400)&&(Iow_level_time<700))temp=temp&0x7f;if ((Iow_level_time>1400)&&(Iow_level_time<1900))temp=temp1ox80;} return temp;} nsigned char uPD6121_decode(void)//解码出错返回1,对则返回OTR1=1://开始测量引导码(或重复码)的高电平宽度while(ir_receive==0);//等待电平变高,不需要超时监测TR1=0;//高电平(对发射电路而言)测试结束high_level_time=TH1*256+TL1://保存高电平的数据//————————————————————TH1=O;TL1=O;TR1=1;//启动对低电平的测试while(ir_receive==1)//在对高电平进行查询时,计超时。大于20ms出错{if(TH1>0x4e)return 1://测试超时后直接初始化相关变量,开始下次测试}
TR1=0://低电平(对发射电路而言)测试结束Iow_level_time=TH1*256+TL1:
//保存低电平的数据TH1=0;TL1=0;TR1=1;//为增加计时的准确性,数据的处理都是在计时过程里//判断引导码(或重复码)是否正确,如果不正确,则设置出错标志位,并退出中断程序if((high_level_time<8500)II(high_level_time>9500)II(Iow_level_time<1000)II(Iow_level_time>5000)){return 1://因是引导码出错,所以直接初始化后重新开始测试}
//——————————————————//对是引导码还是重复码进行判断。如果是重复码,就跳过后面数据的读取if((Iow_level—time>1000)&&(Iow_level_time<3500))repeat_code_detected=1:
if((Iow_level_time>4000)&&(Iow_level_time<5000))Ioad_code_detected=1;if(repeat_code_detected==1)return1;//直接结束,temp1=uPD6121_read_code_8();//读后面的系统、按健等数据,temp2=uPD6121_read_code_8();teMP3=uPD6121_read_code_8();temp4=uPD6121_read_code_8();TR1=0:
if(decode_error==1)return 1://无论是哪部分解码出错,都是重新开始if ((temp1!=Ntemp2)II (temp3 !
- 上一篇:一款实用的锂电池充电器的制作
《用增强型51实验板实现红外线遥控》相关文章
- › 用增强型51实验板实现红外线遥控
- 在百度中搜索相关文章:用增强型51实验板实现红外线遥控
- 在谷歌中搜索相关文章:用增强型51实验板实现红外线遥控
- 在soso中搜索相关文章:用增强型51实验板实现红外线遥控
- 在搜狗中搜索相关文章:用增强型51实验板实现红外线遥控
编辑推荐
- · 自制教室照明节电控制器
- · 双色音乐彩灯的制作
- · 三相交流电机缺相保护器
- · 声光控节能灯的制作
- · 同线电话转呼及互通器电路
- · 超低频信号发生器的制作
- · 自制热转印电路板
- · 警笛发声生器电路
- · 一款节能电路
- · 利用太阳能充电的旅行充电器