ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:356.44KB ,
资源ID:16209095      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16209095.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(红外接收程序讲解Word格式文档下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

红外接收程序讲解Word格式文档下载.docx

1、下图为一个发射波形对应的编码方法:I 4.ehs n n n n n_n n _n n4 引导码 k I 0 I 1 I I IIS控陽的u0 w W *这种编码具有以下特征:以脉宽为 0.565ms、间隔0.56ms、周期为1.125ms的组合表 示二进制的“0;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制 的“ 1。3、红外接收原理 a)波形红外接收头将38K载波信号过虑,接收到的波形刚好与发射波形相反:innri nn inn放大,位定义0和位定义1波形如下:4、解码原理及算法注:代码宽度算法:16位地址码的最短宽度:1.12 x 16=18ms位地址码

2、的最长宽度: 2.24ms x 16=36ms可以得知8位数据代码及其8位反代码的宽度和不变:(1.12ms+2.24ms) x 8=27ms所有32位代码的宽度为(18ms+27ms)(36ms+27ms)对于红外线遥控对于很多电子爱好者来讲,都感觉到非常神奇,看不到,摸不着,但 能实现无线遥控,其实控制的关键就是我们要用单片机芯片来识别红外线遥控器发出 红外光信号,即我们通常所说的解码。单片机得知发过来的是什么信号,然后再做出 相应的判断与控制,如我们按电视机遥控器的频道按钮,则单片机会控制更换电视频 道,如按的是遥控器音量键,则单片机会控制增减音量。解码的关键是如何识别 “ 0和“ 1”

3、 !从位的定义我们可以发现 “0 “ 1均以0.56ms的低电平开始,不同的是高电平的宽度不同!, “0为0.56ms, “伪1.68ms,所以必须根据高电平的宽度区别 “0和“ 1。如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“ 0,”反之则为“1,”为了可靠起见,延时必须比 0.56ms长些,但又不能超过1.12ms,否则如果该位为 “0;读到的已是下一位的高电平,因此取( 1.12ms+0.56ms) /2=0.84ms最为可靠,一般取0.84ms左右均可。根据码的格式,应该等待 9ms的起始码和4.5ms的结果码完成后才能读码。5、实例代码:注

4、意一下几点:1.从上面红外接收头与单片机连接原理图”来看,红外接收头的型号脚是与 51的into相连,所以需要使用INTO(外部中断0).2由于解码过程中涉及到延时,为精确起见,我们选择使用定期时 1来计时实例代码:C+ view pla in copy1.#include2.#i nclude3.3./函数原型4.void SystemI nit(void);5.void Delay_840us(void);6.void Delay_2400us(void);7.void LedDisp();8.unsigned char GetCode(void); 获得码9.void delay(uns

5、igned char loop);11.10./位变量11.sbit IRIN = P3A2;12.sbit BEEP = PM6;13.sbit swch = P1A7;16.14.II变量15.unsigned char KeyValue; II机器码16.unsigned char MaValue; II 键值码;17.unsigned char disbuf4; II 数码管显示缓冲18.unsigned char scan4=0x04,0x08,0x10,0x20; p2 位选择19.unsigned char code table16 = II 共陰碼20.0x3f,0x06,0x

6、5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7C,0x39,0x5E,0x79,0x724.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.* 延时*/void delay(unsigned char loop)unsigned char i;for(i=0;i8);TR1=1;while(!TF1);TF1=0;TR1=0;* 延时 9msvoid Delay_9000us(void)TL1 = 153.6;TH1

7、= 223.6;TR1 = 1;TF1 = 0;TR1 = 0;* 延时 4.5ms*/ void Delay_4500us(void)55. 56.TH1= 239.8;57.TL1 =2O4.8;58.TR1= 1;59.while(!6O.TF1O;61.= O;62. 63.64./*65.* 系统初始化66.*/67. void SystemInit(void)68.69.IRIN = 1;70.ITO = 1; /INTO负跳变触发71.TMOD = 0x10; /定时器 1 工作在方式 172.EA = 1;73.EXO = 1;74.75.75./*76.* 读码77.*/78

8、.unsigned char GetCode()79.80.unsigned char n;82.83.static temp = O;84.85. for( n = O; n 1); / 1while(IRIN); / 等待跳变成低电平 else temp=(0x00|(temp / 0return temp;/* 数码管显示void LedDisp() for(i=0;i4)&0x0f)127.disbuf1=KeyValue&0x0f;128.disbuf2=(MaValue&0x0f);129.disbuf3=MaValue&130.LedDisp();131.132.133.134.

9、135.void interr_ir( void) interrupt 0136.137.138.* 用户码和机器码139.140.unsigned char addrl,addrh,num1,num2;141.142.EA = 0; /先关闭外部中断 0143.144.Delay_9000us(); / 检测 9ms 开始码145.146.if (IRIN) / 检测是否为干扰信号147.EA = 1; /重新开启外部中断 0148.149.150.151.152.153.154.155.156.157.158.159.160.161.162.163.164.165.166.167.168.

10、169.170.171.172.173.174.175.176.177.return ; / 退出解码 / 等待跳为高电平Delay_4500us(); / 检测 4.5ms 结果码 /重新开启外部中断 0 return ;/ 读码addrl=GetCode(); / 用户编码高位 addrh=GetCode(); / 用户编码低位 num1=GetCode(); / 机器码 num2=GetCode(); / 机器码反码/校验是否为错码if(num1!=num2)KeyValue=14;EA=1;KeyValue=num2;MaValue=addrh;178. 代码分析(只分析关键部位):1

11、.系统初始化Systemlnit()系统初始化时,我们设置IRIN为高电平,同时把ITO设置成1,即下降沿(负跳变)触 发中断。这是用于接收波形的引导码是从低电平开始的(如上面接收波形所示)。这 样,当按下按键时,红外接收到信号, IRIN则发生从预先设置的高电平跳为低电平,从而产生中断。2.解码-中断程序 interr_ir(void)首先,第一步把EXO关中断,这步至关重要,因为一个接收波形许多的下降沿,这样 会产生干扰中断。接下来,使用定期时0延时9ms,跳过开始码。注意,延时后,需要检测一下干扰信 号。下一步,while(!等待4.5ms高电平的到来,再延时 4.5ms,跳过结果。引导

12、码过后, 开始读码,执行 GetCode():32位数据码,分4次读取,所以执行4次GetCode(),读取一个字节数据过程如下:1.un sig ned char GetCode()2.3.un sig ned char n;4.4.static temp = 0;6.5.for ( n = 0;6.7.while (! /等待高电平,开始解码10.11. Delay_840us();12.13.if(IRIN) / 若仍然为高电平,则为 1,否则为 014.15.temp = (0x80|(temp16.while(IRIN); / 等待跳变成低电平17.18. else 19.temp=(0x00|(temp20.21.22.23. return temp;24. 1.从上述位定义看,位 0和位1都是0.56ms的低电平过后,高电平开始延时。所以, 读码的第一步 while(!是等待这个0.56ms的低电平之后的高电平。2.从高定平到后开始延时 0.84ms3.判断0.84ms的波形高电平还是低电平。若仍然是高电平证明,该位为 “1,”否则为“ 0。”到这里读码结束。3.校验由于 32 位数据码中,后两个字节是键数据码和健数据反码。可以通过这两个字节数来 实行校验。即,把前一个字节去反判读是否等于后一字节。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1