电子元器件采购网

广告

您的位置 首页 产品

具体介绍用51单片机解密任何红外遥控器

详细介绍用51单片机解密任何红外遥控器-下面我们来说说本问利用51单片机软件解密的方法 首先大家看了我刚才贴出来的连接 应该知道了 编码无非就是低电平高电平。

下面咱们来说说本问使用51单片机软件解密的办法 首要咱们看了我方才贴出来的衔接 应该知道了 编码无非便是低电平高电平。

具体咱们怎样记载这种规则 很简单 咱们用守时器把每个凹凸电平的时刻记下来 然后显现在数码管上 设置2秒显现一个数据 然后用EXCLE记载下来

再用铅笔 或许 随意什么画图软件 把它的波形画出来 标上 低电平 高电平 再比照下不同的键的差异 全部就恍然大悟了

现在举 实践的比方

全能遥控板咱们应该都知道吧

此主题相关图片如下:图片 04.jpg

具体介绍用51单片机解密任何红外遥控器

随意去那都能买到 几块钱 左右 安上电池 设置好类型(这儿比方设置的是长虹 假如用家里的遥控板 那么不必设置了 )

单片机上电 SM0038接好

要害程序如下 :(在这儿我想鼓舞下咱们 不要一想到程序便是完好的 能够直接烧进去 看成果的 其实 我上个帖子也说过 你能看程序 看到要害的中心代码 那么阐明你现已前进了 能找出其间的要害代码 其他比方SM0038的接口 数码管显现的接口 等等 自己加上去就行了 这段程序 的成果是终究把 脉冲波的个数 和每个凹凸电平的时刻数 放在寄存器里 那么已然你要做的便是 用自己手边的单片机 把寄存器的值显现到 数码管上 把数据记载下来 然后剖析 找出规则 得出你想要的成果 在这个进程中 我信任反是喜爱搞砖研的 都会享用这个进程 )

mov r5,#0 ;用于记载保存的时刻值的个数

mov r1,#bmhcq ;凹凸电平宽度值缓冲区

dec r1

jb p3.6,$ ;等候变低 , 即等候按键

next: setb tr1 ;发动守时器1

jnb p3.6,$ ; 等候变高,以丈量低电平时刻宽度

clr tr1 ;封闭守时器1 ;1US

inc r5 ;时刻值个数加1 ;1

inc r1 ;1

mov @r1,th1 ;存低电平时刻值 ,先存高8位,后存低8位 ;2US

inc r1 ;1

mov @r1,tl1 ;2

mov th1,#0 ;重赋初值 ;2

mov tl1,#13 ;13为中止T1到重启T1经过的时刻 ;2

setb tr1 ;重新发动守时器 ;1

jb p3.6,$ ;等候变低

clr tr1 ;封闭守时器1 ;1

inc r5 ;1

inc r1 ;1

mov @r1,th1 ;存高电平时刻值 ;2

inc r1 ;1

mov @r1,tl1 ;2

mov th1,#0 ;重赋初值 ;2

mov tl1,#15 ;15为中止T1到重启T1经过的时刻 ;2

ajmp next ;循环检测,直到T1在遥控器无键按下时溢出时发生中止 ;2

ajmp $

;-----------------------------------------

;守时器1中止程序

;在遥控器无键按下时发生中止,便顺次将BMHCQ中的凹凸电平时刻值转化为BCD码并显现出来

;-----------------------------------------

t1zd:

setb tr0 ;发动T0

clr tr1 ;封闭T1

setb et0 ;T0开中止

mov a,r5

mov r2,a

mov r3,#0

lcall hextoxcq

lcall display

jb yszt,$ ;延时一段时刻,以便记载显现的时刻值

setb yszt

mov r0,#bmhcq

dispnext: mov a,@r0 ;从BMHCQ中顺次取出时刻值(16位)调BTOD子程序将其转化为5位BCD码并放入XCQ中再调显现子程序显现

mov r3,a ;取高8位

inc r0

mov a,@r0

mov r2,a ;取低8位

inc r0

;lcall BtoD ;将高电平或低电平时刻值转为BCD码放于XCQ中

lcall HEXtoXCQ ;将高电平或低电平时刻值转为十六进制的LED码放于XCQ中

lcall display ;显现

cpl p2.5 ;改动指示灯的状况,以此阐明显现内容的改动

jb yszt,$ ;延时,以便抄写时刻值

setb yszt

djnz r5,dispnext ;获取的时刻值没显现完则持续

sjmp $ ;显现完毕,在此踏步

reTI

HEXtoXCQ:

push 00h

mov r0,#xcq

mov a,r2

anl a,#0fH

mov dptr,#LED

movc a,@a+dptr

mov @r0,a

inc r0

mov a,r2

swap a

anl a,#0fH

mov dptr,#LED

movc a,@a+dptr

mov @r0,a

inc r0

mov a,r3

anl a,#0fH

mov dptr,#LED

movc a,@a+dptr

mov @r0,a

inc r0

mov a,r3

swap a

anl a,#0fH

mov dptr,#LED

movc a,@a+dptr

mov @r0,a

inc r0

mov @r0,#7eh

inc r0

mov @r0,#7eh

pop 00H

ret

led: db 7eh,30h,6dh,79h,33h,5bh,5fh,70h,7fh,7bh,77h,1fh,4eh,3dh,4fh,47h

;---------------------------------------------

;将存于R3R2中高电平或低电平时刻值转为BCD码放于XCQ中

;---------------------------------------------

BtoD:

push 00h

mov r0,#BCD

mov r4,#3

bd0: mov @r0,#0 ;BCD缓冲区清0

inc r0

djnz r4,bd0

mov r6,#16

bd1: clr c ;将R3R2中的16位二进制值转化为三字节BCD码存入BCD缓冲区中

mov a,r3

rlc a

mov r3,a

mov a,r2

rlc a

mov r2,a

mov r4,#3

mov r1,#bcd

BD3: mov a, @r1

addc a,@r1

da a

mov @r1,a

inc r1

djnz r4,bd3

djnz r6,bd1

mov r0,#xcq ;将转化成果从BCD缓冲中存入XCQ中

mov r1,#bcd

mov r4,#3

bd4: mov a,@r1

xchd a,@r0

inc r0

swap a

xchd a,@r0

inc r0

inc r1

djnz r4,bd4

pop 00h

ret

经过上面的程序咱们读出了按下一个键后的编码的实质的东西

那么动手把 图像下来 找规则 解码

我把我比方长虹解码后的波形图 发出来

此主题相关图片如下:01.jpg

具体介绍用51单片机解密任何红外遥控器

01。JPG 是脉冲开端时一切键前8个彻底相同的凹凸脉冲

此主题相关图片如下:02.jpg

具体介绍用51单片机解密任何红外遥控器

02。JPG 咱们留意看按不同的键 中心仅仅有3个脉冲在改动 是EXCLE的 W列-AC列 而这3位数值便是咱们解码的要害 01。JPG 中8位数 咱们应该看出 一切键都是相同的11100010 后边02。JPG中咱们把键码整理出来便是

按1键 00000000 00H

按2键 00010000 10H

按3键 00001000 08H

按4键 00011000 18H

按5键 。。。。。

后边就不写了

为了咱们清晰可见 我把画出的最终的波形图03。JPG 贴出来 咱们看下规则

此主题相关图片如下:03.jpg

具体介绍用51单片机解密任何红外遥控器

然后咱们 来剖析应该怎样解码 我信任到了这一步应该很简单了吧 比方在这个比方中 咱们发现 后边的键码改动的部分彻底是重复 那么为什么彻底能够不去读后边的码 只读前面的16位的脉冲 放在寄存器中 再用比较指令 跳转 下面是针对这个波形图的解码程序 信任咱们现已能用自己手中的利器 把它搞定了

写到这儿 我觉得很疑问 感觉自己没能把具体问题简单化 许多东西仍是要*咱们自己去消化理解了

程序看不懂。?那么OK 去翻指令 查书 一条一条看吧 程序我敢确保都是 编译经过的

下面是解码程序的要害代码 :

DYKJZ: JB P3.6,$

LCALL YKJM ;中心解码代码子程序

cpl a

jz no ;判别是否为错误代码(0FFH)

cpl a

AJMP JZPD

NO: LJMP DYKJZ

RET

JZPD: CJNE A,#09H,JZ1 ;键码为09H吗?

AJMP KAIS ;键码为09H 转开端程序()

JZ1: ;不为09H 转最开端 等候下一次遥控器按键到来

AJMP DYKJZ

RET

KAIS: ;放你需求履行的代码

;比方 点亮一个灯 给单片机接上串口 用单片机操控电脑的翻开 放音乐。等等

;这些不属于本问评论的规模 有爱好的能够自己扩展

RET

;-----------------------

;中心解码代码子程序

;------------------------

YKJM:

PUSH PSW

PUSH 02H

PUSH 06H

PUSH 07H

PUSH B

MOV B,#0FFH

JNB TF1,JMCW ;经过T1从0开端守时到溢出来避开遥控器的重发码 ,也便是说在读了一个遥控按键后

CLR TF1 ;到少要比及T1从0开端守时到溢出才干读取第二个按键

;引导码正确时履行以下代码

; CLR YKBZ ;遥控标志清0

JM21:

MOV R2,#16 ;每次循环读8位码

MOV R6,#0 ;寄存16位码中的低8位

MOV R7,#0 ;寄存16位码中的高8位

JM3:

JNB P3.6,$ ;等候低电平完毕,不论其宽度,由于是经过高电平的宽度来区别0(约为0.5ms)和1(约为1.6ms)

MOV TH1,#0

MOV TL1,#0

SETB TR1 ;发动T1,计算高电平的宽度

JB P3.6,$

CLR TR1

MOV A,TH1

CJNE A,#2,JM4 ;若高电平宽度值大于2,则阐明此高电平为宽脉冲(1),不然为窄脉冲(0)

JM4: CPL C ;当TH1的值大于2时,C=0,小于2时,C=1

MOV A,R7

RRC A

MOV R7,A

MOV A,R6

RRC A

MOV R6,A

DJNZ R2,JM3 ;连读16位,先读的为低位,后读的为高位,高8位(数据码)存于R7中,低8位(地址码)存于R6中

MOV A,R6

CJNE A,#47H,JMCW ;判别地址码是否为47H,不是转犯错回来

MOV A,R7 ;若地址码正确,则R7中便为数据码

mov r1,#jzh

mov @r1,A

LJMP JMFH

JMCW: MOV A,B

JMFH: CLR TF1 ;T1的溢出标志清0

MOV TH1,#0 ;为T1设定初值并发动它

MOV TL1,#0 ;以此来防止对同一按键读两次(避开遥控器的重发代码)

SETB TR2

POP B

POP 07H

POP 06H

POP 02H

POP PSW

RET ;此刻,若引导码、地址码、键值码和键值反码中有一个有问题,A中便为错误代码,不然,A中便为所按键之键值码。

文章写完了。期望能对咱们有少量的协助 觉得有用就拿去研讨。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/347675.html
电子元器件采购网

广告

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部