您的位置 首页 方案

怎么选用51单片机读出红外遥控器的按键码

如何采用51单片机读出红外遥控器的按键码-关键程序如下 :(在这里我想鼓励下大家 不要一想到程序就是完整的 可以直接烧进去 看结果的 其实 我上个帖子也说过 你能看程序 看到关键的核心代码 那么说明你已经进步了 能找出其中的关键代码 其他比如SM0038的接口 数码管显示的接口 等等 自己加上去就行了 这段程序 的结果是最终把 脉冲波的个数 和每个高低电平的时间数 放在寄存器里 那么既然你要做的就是 用自己手边的单片机 把寄存器的值显示到 数码管上把数据记录下来 然后分析找出规律 得出你想要的结果 在这个过程中我相信反是喜欢搞砖研的 都会享受这个过程 )

在这儿我仅把一些要害的带出来关于硬件电路那么抛开那么多文字介绍终究意思便是说 你家里的遥控板 也便是发射部分 是把全部的封装好了的 比方键盘矩阵、编码调制、LED红外发送器 等等那么承受部分 SM0038 3个脚 一个脚地 一个脚电源一个脚信号脚 接到单片机随意个P口上(此处是P3。6) OK 硬件部分就搞定了当然还有数码管显现,这些必定不必说你都能搞定吧,这些东东都有,所以就不必自己去搭电路那么麻烦了),那么 咱们想 咱们按一下遥控板 咱们看到 有个灯闪了一下 然后OVER 那么 咱们现在要做的便是在灯闪了那一下之后让 单片机来读它的键码 然后不同的键码来干不同的事,本文 是向咱们解说一种办法 当然假如你知道遥控器的编码 那么 我想写解码程序应该是很简略的事 而我的意思是说咱们现在从0开端 拿到任何一种遥控板 那怕不知道它的类型 可是 咱们想 即便它什么类型都没写 可是按一下不同的键 它的发射的脉冲 必定不相同 无非便是引导码 然后 地址码 键码验证码 由于不同的遥控板 它所界说的规矩不相同 (这儿说一点题外话 其实在读出波型后 咱们就能够看出这个遥控板最开端规划时的人的意思 或许说考虑 它的这个规划办法是否是最好的 是否安稳 是否具有通用性 或许说 日本的和我国的规划师 在规划时他们所考虑的 名牌和 杂牌的 他们在规划时所考虑的 等等 这些其实也是件很有意思的事 就像窃视到一个人的内心世界相同 扯远了。)

下面咱们来说说本文使用51单片机软件解密的办法,编码无非便是低电平高电平。可是咱们知道一点 它必定是有规则的(这儿声明一下 假如你能找到它的PDF 上面写好了它的波形 或许你在网上找到了前人把某类型的遥控器的波形现已剖析出来了那么你彻底能够把这篇帖子当水贴 越过 我这儿的意图是想通过一种办法 一种 完好的剖析办法 就像医师拿起手术刀 解开它的内部 看常人所不能看到的东西 终究能把一种很通用的东西 把它的内部原理能够彻底的了解全部从简略学起 做起 今后但凡涉及到 这种 类型的东西 信任你会愈加自傲 而不是只满意做一个课程规划 一个教师安置的作业扯远了。。 )

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

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

现在举 实践的比方

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

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

单片机上电 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

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部