找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13507|回复: 8
打印 上一主题 下一主题
收起左侧

基于51单片机NEC 红外遥控解码

  [复制链接]
跳转到指定楼层
楼主
ID:65608 发表于 2014-9-15 03:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我是陈滨。说到红外遥控,大家都使用过了,目前红外遥控器有两种格式,一种是飞利浦格式,一种是NEC格式,当然,牛逼的SONY也有自己的格式,这个不属于地球的厂家我就不说了啊,呵呵...但是使用最多的还是NEC格式,还是日本鬼子的,哎!如果可以,我希望是飞利浦的,因为我们依赖日本的技术方面太多了。说到题外话了,但是 希望每个中国人都要自己努力,希望我们的下一代能开发各种比日本更加先进的技术。嗯!下面开始讲解如何利用51单片机这个功能很弱的单片机进行红外解码。如果你对这个熟悉,那么你可以使用任何一个NEC格式的遥控对你家里的任何一切东西进行遥控,你的风扇,你的抽油烟机,甚至你的日光灯,通通都可以!红外线遥控由于成本低廉,抗干扰能力好,目前广泛使用在各种家用电器上。红外线遥控NEC协议是这样的,它是一个9ms的高电平和一个4.5ms的低电平作为接收的引导码,然后以一个560us的高电平和一个560us的低电平表示位0,以一个560us的高电平和一个1.685ms的低电平表示位1,前16位是用户码,后16位是按键码,每个16位分别是8位正码和8位反码,这样设计就是为了区分不同的设备以及抗干扰。当用户按下遥控某个按键时,遥控内部的编码器就会发送一组108ms组成的数据码,如果按住不放,接下来是9ms和2.5ms的连发码。下面是时序图,本人自己画的,画得不好看,不要见笑啊:
实际上,我们接收头收到的信号电平是跟遥控相反的,比如遥控发的是1,我们收到的实际上0,利用这个原理,为我们的51单片机解码提供好条件 。网上很多人大多利用中断和定时器中断来解码,甚至更笨的采用延时,这样的做法占用单片机资源是很严重的,而且程序很长,难懂。本人经过研究,发现51单片机其实有一个功能很好用,就是门控方式,利用单片机门控方式,在进入中断时自动关闭定时器,通过读取计数值就可以得知电平的宽度,从而识别0和1.这样的方法占用单片机资源少,效率高,准确性可靠。
下面是本人自己制作的一个遥控解码器:




上面第一个是收到的上面一个收到的是用户码和反码, 下面是按键码和反码 。大家发现规律没有?正码和反码刚加在一起刚好是15.好了,大家如果对这个有兴趣,可以加我QQ  具体keilc51源码请到
http://www.51hei.com/mcu/184.html 这里去下载

评分

参与人数 1黑币 +1 收起 理由
新手小苏 + 1

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:34185 发表于 2014-11-30 07:09 | 只看该作者
真是不错的资料
回复

使用道具 举报

板凳
ID:34185 发表于 2014-12-3 18:06 | 只看该作者
很有用谢谢学习了!!!
回复

使用道具 举报

地板
ID:69860 发表于 2014-12-6 10:18 | 只看该作者

谢谢楼主,下载学习学习。
回复

使用道具 举报

5#
ID:95047 发表于 2015-12-25 21:16 | 只看该作者
真心不错
回复

使用道具 举报

6#
ID:78363 发表于 2015-12-26 16:57 | 只看该作者
赞一下楼主!!!!
回复

使用道具 举报

7#
ID:79544 发表于 2015-12-26 17:30 | 只看该作者
遗憾的是,是用汇编写的程序,看不懂
回复

使用道具 举报

8#
ID:74784 发表于 2020-6-13 22:07 | 只看该作者
我正需要汇编的解码代码呢。
谢谢楼主!
回复

使用道具 举报

9#
ID:1064915 发表于 2026-5-11 17:11 | 只看该作者
    ORG   0000H
MAIN:  MOV   SP,#60H
    MOV   P0,#0FFH
    MOV   P1,#0FFH
    MOV   P2,#0FFH
    MOV   P3,#0FFH
    JNB   P3.2,$    ;等待遥控信号出现
    MOV   R6,#10
SB:   ACALL  YS1      ;调用882微秒延时子程序
    JB   P3.2,MAIN   ;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
    DJNZ  R6, SB    ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
               ;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
    JNB   P3.2, $    ;等待高电平避开9毫秒低电平引导脉冲
    ACALL  YS2      ;延时4.74毫秒避开4.5毫秒的结果码
    MOV   R1,#1AH    ;设定1AH为起始RAM区
    MOV   R2,#4
PP:   MOV   R3,#8
JJJJ:  JNB   P3.2,$    ;等待地址码第一位的高电平信号
    LCALL  YS1      ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
    MOV   C,P3.2    ;将P3.2引脚此时的电平状态0或1存入C中
    JNC   UUU      ;如果为0就跳转到UUU
    JB   P3.2,$    ;如果为1就等待高电平信号结束
UUU:   MOV   A,@R1     ;将R1中地址的给A
    RRC   A       ;将C中的值0或1移入A中的最低位
    MOV   @R1,A     ;将A中的数暂时存放在R1中
    DJNZ  R3,JJJJ    ;接收地址码的高8位
    INC   R1      ;对R1中的值加1,换成下一个RAM
    DJNZ  R2,PP     ;接收完16位地址码和8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH的RAM中
               ;以下对代码是否正确和定义进行识别
    MOV   A,1AH     ;比较高8位地址码
    XRL   A,#00000000B ;判断1AH的值是否等于00000000,相等的话A为0
    JNZ   MAIN     ;如果不相等说明解码失败退出解码程序
    MOV   A,1BH     ;比较低8位地址
    XRL   A,#11111111B ;再判断高8位地址是否正确
    JNZ   MAIN     ;如果不相等说明解码失败退出解码程序
    MOV   A,1CH     ;比较数据码和数据反码是否正确?
    CPL   A
    XRL   A,1DH     ;将1CH的值取反后和1DH比较 不同则无效丢弃,核对数据是否准确
    JNZ   MAIN     ;如果不相等说明解码失败退出解码程序
    LCALL  SOUND     ;解码成功,声音提示
    MOV   A,1AH
    CPL   A
    MOV   P1,A     ;遥控码十六进制值通过P1口LED显示出来
;-------- 下面为0~9键码判断并在实验板的5位数码管中显示键值 --------
JZPD:  MOV   A,1AH
IRD0:  CJNE  A,#00H,IRD1  ;按键"0"判断显示
    MOV   P0,#0C0H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD1:  CJNE  A,#01H,IRD2  ;按键"1"判断显示
    MOV   P0,#0F9H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD2:  CJNE  A,#02H,IRD3  ;按键"2"判断显示
    MOV   P0,#0A4H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD3:  CJNE  A,#03H,IRD4  ;按键"3"判断显示
    MOV   P0,#0B0H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD4:  CJNE  A,#04H,IRD5  ;按键"4"判断显示
    MOV   P0,#99H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD5:  CJNE  A,#05H,IRD6  ;按键"5"判断显示
    MOV   P0,#92H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD6:  CJNE  A,#06H,IRD7  ;按键"6"判断显示
    MOV   P0,#82H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD7:  CJNE  A,#07H,IRD8  ;按键"7"判断显示
    MOV   P0,#0F8H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD8:  CJNE  A,#08H,IRD9  ;按键"8"判断显示
    MOV   P0,#80H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD9:  CJNE  A,#09H,IRDOR  ;按键"9"判断显示
    MOV   P0,#90H
    MOV   P2,#11100000B
    AJMP  MAIN
IRDOR: MOV   P2,#0FFH     ;关闭数码管使能。"0~9"以外的非数字功能按键键值不采用数码管显示,直接从P1口输出键值
    AJMP  MAIN
YS1:   MOV   R4,#19 ;延时子程序1
D1:   MOV   R5,#18
    DJNZ  R5,$
    DJNZ  R4,D1
    RET
YS2:   MOV   R4,#10 ;延时子程序2
D2:   MOV   R5,#216
    DJNZ  R5,$
    DJNZ  R4,D2
    RET
SOUND: MOV   R7,#228 ;音效延时子程序
SDL1:  CPL   P3.7
    MOV   R6,#0FFH
SDL0:  DJNZ  R6,SDL0
    DJNZ  R7,SDL1
    RET
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表