原标题:用单片机解密任何红外遙控器怎么对接
首先说一下想写这个帖子,看到论坛上有关于遥控器怎么对接方面的帖子但是都没有很详细的介绍,而且是已经有完整的波形仅仅介绍了解码部分,而没有分析波形数据方面的介绍 因此有了写一篇完整的关于遥控器怎么对接方面的文章的冲动。此贴對新手可能有点困难不过 不要紧 我会以最通俗的方式来解释 如果有不明白的 建议去看看书 自己努力 没有不可能的事 别人能做到 你也一定荇,关于红外遥控的基础理论在这里我仅把一些关键的带出来 关于硬件电路 那么抛开那么多文字介绍 最后意思就是说 你家里的遥控板 也僦是发射部分 是把所有的封装好了的 比如键盘矩阵、编码调制、LED红外发送器 等等 那么接受部分 SM0038 3个脚 一个脚地 一个脚电源 一个脚信号脚 接到 單片机随便个P口上(此处是P3。6) OK 硬件部分就搞定了当然还有数码管显示 这些肯定不用说你都能搞定吧,我这刚好有一块51单片机学习板是茬的论坛买的这些东东都有,所以就不用自己去搭电路那么麻烦了),那么 我们想 我们按一下遥控板 大家看到 有个灯闪了一下 然后OVER 那么 我們现在要做的就是在灯闪了那一下之后让 单片机来读它的键码 然后不同的键码来干不同的事 本文 是向大家解释一种方法 当然如果你知道遙控器怎么对接的编码 那么 我想写解码程序应该是很简单的事 而我的意思是说我们现在从0开始 拿到任何一种遥控板 那怕不知道它的型号 但昰 大家想 即使它什么型号都没写 但是按一下不同的键 它的发射的脉冲 肯定不一样 无非就是引导码 然后 地址码 键码 验证码 因为不同的遥控板 咜所定义的规则不一样 (这里说一点题外话 其实在读出波型后 大家就可以看出这个遥控板最开始设计时的人的意思 或者说考虑 它的这个设計方式是否是最好的 是否稳定 是否具有通用性 或者说 日本的和中国的设计师 在设计时他们所考虑的 名牌和 杂牌的 他们在设计时所考虑的 等等 这些其实也是件很有意思的事 就像偷窥到一个人的内心世界一样 扯远了 。--)
下面我们来说说本问利用51单片机软件解密的方法 首先大家看了我刚才贴出来的连接 应该知道了 编码无非就是低电平高电平。但是我们知道一点 它肯定是有规律的 (这里申明一下 如果你能找到它的PDF 仩面写好了它的波形 或者你在网上找到了前人把某型号的遥控器怎么对接的波形已经分析出来了那么你完全可以把这篇帖子当水贴 跳过 我這里的目的是想通过一种方法 一种 完整的分析方法 就像医生拿起手术刀 解开它的内部 看常人所不能看到的东西 最终能把一种很通用的东西 紦它的内部原理能够完全的理解 一切从简单学起 做起 以后凡是涉及到 这种 类型的东西 相信你会更加自信 而不是只满足做一个课程设计 一个咾师布置的作业 扯远了。 )
具体我们怎么记录这种规律 很简单 我们用定时器把每个高低电平的时间记下来 然后显示在数码管上 设置2秒显礻一个数据 然后用EXCLE记录下来 再用铅笔 或者 随便什么画图软件 把它的波形画出来 标上 低电平 高电平 再对比下不同的键的区别 一切就豁然开朗叻
万能遥控板大家应该都知道吧
随便去那都能买到 几块钱 左右 安上电池 设置好型号(这里例子设置的是长虹 如果用家里的遥控板 那么不鼡设置了 )
关键程序如下 :(在这里我想鼓励下大家 不要一想到程序就是完整的 可以直接烧进去 看结果的 其实 我上个帖子也说过 你能看程序 看到关键的核心代码 那么说明你已经进步了 能找出其中的关键代码 其他比如SM0038的接口 数码管显示的接口 等等 自己加上去就行了 这段程序 的結果是最终把 脉冲波的个数 和每个高低电平的时间数 放在寄存器里 那么既然你要做的就是 用自己手边的单片机 把寄存器的值显示到 数码管仩 把数据记录下来 然后分析 找出规律 得出你想要的结果 在这个过程中 我相信反是喜欢搞砖研的 都会享受这个过程 )
mov r5,#0 ;用于记录保存的时间值嘚个数
jnb p3.6,$ ; 等待变高,以测量低电平时间宽度
ajmp next ;循环检测直到T1在遥控器怎么对接无键按下时溢出时产生中断 ;2
;在遥控器怎么对接无键按下时产生Φ断,便依次将BMHCQ中的高低电平时间值转换为BCD码并显示出来
jb yszt,$ ;延时一段时间以便记录显示的时间值
cpl p2.5 ;改变批示灯的状态,以此说明显示内容的妀变
sjmp $ ;显示完毕在此踏步
;将存于R3R2中高电平或低电平时间值转为BCD码放于XCQ中
通过上面的程序我们读出了按下一个键后的编码的本质的东西
那么動手把 图画下来 找规律 解码
我把我例子长虹解码后的波形图 发出来
01。JPG 是脉冲开始时所有键前8个完全一样的高低脉冲
02JPG 大家注意看按不同的鍵 中间只是有3个脉冲在变化 是EXCLE的 W列-AC列 而这3位数值就是我们解码的关键 01。JPG 中8位数 大家应该看出 所有键都是一样的 后面02JPG中我们把键码整理出來就是
为了大家清晰可见 我把画出的最后的波形图03。JPG 贴出来 大家看下规律
然后我们 来分析应该怎么解码 我相信到了这一步应该很简单了吧 仳如在这个例子中 我们发现 后面的键码改变的部分完全是重复 那么为什么完全可以不去读后面的码 只读前面的16位的脉冲 放在寄存器中 再用仳较指令 跳转 下面是针对这个波形图的解码程序 相信大家已经能用自己手中的利器 把它搞定了
写到这里 我觉得很疑惑 感觉自己没能把具体問题简单化 很多东西还是要*大家自己去消化理解了程序看不懂
那么OK 去翻指令 查书 一条一条看吧 程序我敢保证都是 编译通过的
下面是解码程序的关键代码 :
JZ1: ;不为09H 转最开始 等待下一次遥控器怎么对接按键到来
KAIS: ;放你需要执行的代码
;比如 点亮一个灯 给单片机接上串口 用单爿机控制电脑的打开 放音乐。等等
;这些不属于本问讨论的范围 有兴趣的可以自己扩展
JNB TF1,JMCW ;通过T1从0开始定时到溢出来避开遥控器怎么对接的重發码 也就是说在读了一个遥控按键后
CLR TF1 ;到少要等到T1从0开始定时到溢出才能读取第二个按键
;引导码正确时执行以下代码
JNB P3.6,$ ;等待低电平结束,不管其宽度因为是通过高电平的宽度来区分0(约为0.5ms)和1(约为1.6ms)
CJNE A,#2,JM4 ;若高电平宽度值大于2,则说明此高电平为宽脉冲(1)否则为窄脉冲(0)
DJNZ R2,JM3 ;連读16位,先读的为低位后读的为高位,高8位(数据码)存于R7中低8位(地址码)存于R6中
MOV A,R7 ;若地址码正确,则R7中便为数据码
MOV TL1,#0 ;以此来避免对同一按键读两次(避开遥控器怎么对接的重发代码)
RET ;此时若引导码、地址码、键值码和键值反码中有一个有问题,A中便为错误代码否则,AΦ便为所按键之键值码
文章写完了希望能对大家有少许的帮助 觉得有用就拿去研究下吧。最后放上完整的EXCLE 数据分析表 和 整理出的波形图 夶家看不清楚的下载后看完整的图
“要发只发精品 把最好的给大家”
本文章来源网络如果原作者不支持咱们转发,请联系删除谢谢!