红外解码程序_第1页
红外解码程序_第2页
红外解码程序_第3页
红外解码程序_第4页
红外解码程序_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、红外解码程序本篇介绍红外解码的原理和程序的写法。下面来看一下,红外线是如何编码的。下面来具体说一下,解码的原理,每按一下遥控器的一个按键,遥控器就会发出32个“0”“1”代码(当然是通过高低电平的占空比来判断是0还是1的),具体是0,1是如何编码的上面图片中有介绍,和一个引导码,引导码的作用是告诉处理器,接下来将要开始发送代码,我们在编写程序时,当检测到引导码时,就应该准备接受数据了。32位代码中的前16位是用户识别码,不同的遥控器不相同,防止互相干扰的,后16是8为数据码,和8位数据反码。接下来开始介绍如何解码程序的编写。程序中用到了两个中断,一个是定时器中断,一个是外部中断。定时器中断用来

2、准确计时,判断接受的代码是0还是1,外部中断用来准确确定定电平到来的时刻,然后开始计时。/*函数功能:红外解码,用八位数码管显示红外线的按键码,便于红外控制测试环境:hot51学习板编译环境:keil4整理人:张家越QQ:整理时间:2011-04-03*/#include#defineucharunsignedchar#defineuintunsignedintucharcodeseg_du=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5E,0x79,0x71;/0-f的段选码unsignedcharco

3、deseg_we=0,1,2,3,4,5,6,7;ucharirtime,startflag,bitnum,irreceok;ucharirdata33;ucharirprosok;uchardisplay8;ucharircode8;sbitled1=P01;sbitled2=P02;/*函数功能:延时函数,在数码管显示时使用,不需要很精确*/voiddelay_50us(uintt)ucharj;for(;t0;t-)for(j=19;j0;j-);/*函数的功能:定时器0的初始化*/voidtimer0init()TMOD=0x02;/设置定时器工作在方式2TH0=0x00;/TL0=0

4、x00;/设置定时器的初值ET0=1;/开定时器中断TR0=1;/打开定时器EA=1;/开总中断/*外部中断1的初始化*/voidint1init()IT1=1;/设置触发方式为上升沿EX1=1;/开外部中断1EA=1;/开总中断/*定时器0的功能函数,每中断一次irtime+,用于计时*/voidtimer0()interrupt1irtime+;/定时器中断一次irtime+,用于计时/*外部中断0的处理函数,每当有低电平数据过来时,中断一次,(使用次中断的前提是,信号线必需接在外部中断0上面,也就是P32口),函数功能是,把信号从高低电平变成时间的代码放入irdata【】中*/voidi

5、nt1()interrupt2if(startflag)if(irtime32)/一组代码检测完毕bitnum=0;irdatabitnum=irtime;/把检测到的时间送到数组irdata【】中去irtime=0;bitnum+;if(bitnum=33)/如果检测到bitnum=33,说明32位用户码已经检测完毕bitnum=0;/将bitnum清零以便重新计数irreceok=1;/接收完毕标志位置一else/(此函数先进入else语句,跳过引导码的检测)startflag=1;/将开始标志位置一irtime=0;/设置时间初值为零irreceok=1;/接收完毕标志位置一/*函数功能

6、:把irdata【】中的时间代码转换成二进制代码存放在ircode【】中*/voidirpros()uchark=1,value,j,i;for(j=0;j4;j+)for(i=0;i1;/右移7次(第一次是00,相当于没有移位)if(irdatak6)/循环8次value=value|0x80;k+;ircodej=value;irprosok=1;/*函数的功能是:将ircode【】中的二进制代码转换成为16进制代码便于在数码管上显示*/voidirwork()display0=ircode0/16;display1=ircode0%16;display2=ircode1/16;displ

7、ay3=ircode1%16;display4=ircode2/16;display5=ircode2%16;display6=ircode3/16;display7=ircode3%16;/*函数功能:用数码管显示解码结果*/voiddisplay1()uchari;for(i=0;i8;i+)P2=seg_wei;P0=seg_dudisplayi;delay_50us(40);voidmain()timer0init();/定时器初始化int1init();/外部中断初始化while(1)if(irreceok)/判断数据接收完毕(数组中存储的是高低电平的时间)irpros();/执行处理函数,将高低电平时间转化成16进制的0,1代码,存放在数组中irreceok=0;/标志清零if(irprosok)/处理函数执行完毕,irwork();/将存储的16进制代码分离,便于数码管显示irprosok=0;/标志清零display1();/在最后我再分析一下程序的编写思路,便于大家理解,一旦有按键按下,接受管接收到引导码,进入外部中断,并将高低电平的时间放入irdata【】数组中,接受完毕标志位置一,判断接受标志位,为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论