当前位置:   article > 正文

一、红外遥控介绍(NEC协议)_红外nec协议

红外nec协议

目录

1.1、红外线的介绍

1.2、红外遥控器的工作原理

1.3、NEC协议的介绍

1.引导码的组成

2.地址码

3.数据码

4.反码

5.连发码

1.4、红外接受装置

1.在数码管显示红外解码遥控器的按键值:


1.1、红外线的介绍

        红外是红外线的简称,它是一种电磁波人的眼睛可见光按照波从长到短排列,红,黄,绿,青,蓝,紫。比紫光短的叫紫外线,比红光长的叫红外线。红外线遥控就是利用他的波长(760nm~ 1mm)。

1.2、红外遥控器的工作原理

        红外遥控有无线,非接触控制的原理。抗干扰能力强,抗干扰强,简单实现,的特点在家里的各个地方都有广泛应用例如:遥控器,空调遥控。一般有红外发射装置和红外接受设备组成,发射装置一般为红外遥控器,由键盘电路、红外编码电路、电源电路和红外发射电路(元件:红外发光二极管,特殊的发光二级管)组成。红外发光二极管特殊的二极管可发射红外线。 通常为防止信号干扰等,红外遥控器的信号通常使用的载波 方式传输二进制的编码。常用的载波频率为38千HZ,发射端常使用的晶振频率为455千HZ,对其整数的分频除12,为38k。红外遥控的载波频率和遥控的外部晶振有关。所以通常的红外遥控将脉冲信号进行二进制的编码,放到载波上传输

        如上图遥控器的红外发光二极管发射脉冲信号(用了一个三极管)高电平出去低电平接受,在接受端的接受二极管解码。 二进制编码的形式我们用MEC的PWM 的脉冲宽度调制。要开发红外接受设备一定要知道红外遥控的编码方式和编码方式,才能更好解码,这里用NEC解码。

1.3、NEC协议的介绍

        我是用的红外遥控为NEC协议的,NEC码的位定义:一个脉冲对应的是560us 的连续载波,一个逻辑 1 传输需要 2.25 ms (560us 脉冲+1680us 的低电平),一个逻辑0 的传输需要 1.125ms(560us 脉冲+ 560us低电平)。

        由前文可知在接收端(上图),逻辑1是560us 的低电平和1680us 的高电平,逻辑0 是560us的低电平和560us 的高电平。正好和发射端相反。

 

        这就是一帧数据 。

NEC协议是红外通信的协议之一, 单次发送由引导码+地址码+地址码反码+数据码+数据码反码+结束码6部分组成.8位码:(地址码,地址反码,控制码,控制反码)反码是检验正确性,取反。

1.引导码的组成

引导码由9ms的低电平和4.5ms的空闲(即高电平)组成.

如果我们规定一拍是562.5us, 那么引导码就是16拍的红外发射+8拍的空闲.

2.地址码

感觉可以理解成品牌码, 比如海信电视遥控器的地址码是1, 长虹电视遥控器的地址码是2这样(瞎编的). 一个遥控器的地址码是固定的.

3.数据码

是遥控器上的按键对应的码, 每一个按键对应一个数据码, 接收端根据数据码来判断接收的按键是哪个.

4.反码

是校验用的, 保证数据传输准确. 实际编程解码时也可以不校验.

5.连发码

由9ms(0)+2.5ms(1)+0.56ms(1)+97.96ms(1),对遥控器连续操作一个按键长时间(一帧数据发送后)不松开就发送连发码。 

1.4、红外接受装置

        红外接受装置是由红外接受电路,红外解码、电源和应用电路组成。主要作用是将红外发射装置发过来的红外线转换成电信号,再经过放大,限幅,检波,和整型形成遥控指令脉冲传输到微控制器当中,市场大多使用成品的红外接收头。铁皮和塑料封装都是一体化,(红外接受电路,红外解码、电源和应用电路组成。)都已经封装到里面直接用。 共有三个引脚vot(传出解码数据),GND,VCC。没有脉冲时高电平。接受后判断高电平时间(由上文可知),时间的不同来判断高低电平。

1.在数码管显示红外解码遥控器的按键值:

主要显示控制码:

解码:没接受到前高电平,接收后为低电平通过外部中断下降沿一到判断是否为9ms,然后判断书否有4.5ms,然后接收32位码,从第三个字节显示。

  1. #include "reg52.h"
  2. #include "smg.h"//数码管头文件
  3. #include "dlay.h"
  4. void ired_init(void);
  5. u8 gired_data[];//红外接受的数据
  6. sbit IRED=P3^2;//定义管脚
  7. void main()
  8. {
  9. u8 ired_buf[3];//存储按键值16进制
  10. ired_init();/初始化
  11. while(1)
  12. {
  13. ired_buf[0]=gsmg_data[gired_data[2]/16];//高位转换成段码数据
  14. ired_buf[1]=gsmg_data[gired_data[2]%16];//低位
  15. ired_buf[2]=0x76;
  16. smg_display(ired_buf,6);送入数码管,调用
  17. }
  18. }
  19. void ired_init(void)//配置为下降沿触发
  20. {
  21. ITO=1;//判断下降沿
  22. EX0=1;//打开定时器中断0
  23. EA=1;
  24. IRED=1;//付初始值
  25. }
  26. void ired() interrupt 0//中断配置
  27. {
  28. u16 time_cnt=0;
  29. u8 ired_high_time=0;//高电平的时间
  30. u8 i=0,j=0
  31. if(IRED==0)//判断是不是低电平
  32. {
  33. time_cnt=1000;
  34. while((!IRED)&&(time_cnt))//判断是不是9.5ms低电平
  35. {
  36. delay_10us(1);//判断是不是引导信号
  37. time_cnt--;
  38. if(time_cnt==0return;//不再操作
  39. }
  40. if(IRED==1
  41. {
  42. time_cnt=500;
  43. while(IRED&&time_cnt)//判断4.5高电平
  44. {
  45. delay_10us(1);
  46. time_cnt--;
  47. if(time_cnt==0) return;
  48. }
  49. //四个字节的读取
  50. for(i=0,i<4,i++)//接受哪一个字节
  51. {
  52. for(j=0,j<8,j++)//根据高电平的时间判断01
  53. {
  54. time_cnt=600;//560us
  55. while(IDRE==0&&time_cnt)
  56. {
  57. delay_10us(1);
  58. time_cnt--;
  59. if(time_cnt==0) return;
  60. }
  61. time_cnt=20;
  62. while(IDRE)
  63. {
  64. delay_10us(10);//100微秒一次
  65. ired_high_time++;
  66. if(time_cnt>20) return;
  67. }
  68. gired_data[i]>>=1;//右移
  69. if(time_cnt>=8) //高电平1的判断560us+560us,并存入;
  70. gired_data[i]|=0x80//每一次接受存入,红外接受先读低位再
  71. ired_high_time =0//读高位符合输入1,不符合输入0
  72. }
  73. }
  74. }
  75. if(gired_data[2]!=~gired_data[3])//控制码不等于控制反码
  76. {
  77. for(i=0;i<4;i++)
  78. {gired_data[i]=0;}
  79. return;
  80. }
  81. }
  82. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/332842
推荐阅读
相关标签
  

闽ICP备14008679号