3779
- 收藏
- 点赞
- 分享
- 举报
方便的遥控器数据提取器
方便的遥控器数据提取器以前发表了一些和红外遥控器有关的文章,都是采用的普通成品遥控器,有电视机、VCD、DVD、CD、功放等。由于没有加入按键自定义功能,因此读者不得不采用作者提供的遥控器型号进行制作。加上很多地方买不到同样型号的遥控器,许多读者的制作也就半途而废。
本文采用一个AT89C51来对普通的遥控器进行软件解码,并且通过RS232串口将提取的遥控器数据(地址码和数据码)送到电脑进行显示,同时也可通过自带的LED数码管进行显示。
一、硬件电路
整机电路见图5。为了简化电路,将AT89C51的P0、P2口直接与两个共阳数码管连接,数码管的共阳公共端串联一个限流电阻R2、R3,阻值大小可以根据实际的数码管亮度在50欧到1K间调整。LED1显示每一个8位代码的高4位,LED2显示低4位。由于只有2位数码管,因此显示做如下安排:LED1、LED2先显示遥控器的低8位地址码,等待1秒钟后再显示遥控器的数据码(正码)。遥控器的高位地址和数据码反码可以根据显示的值取反得到,这里不再显示。如果要显示全部代码,读者可增加数码管,并对程序进行修改。电路中晶体J1使用11.0592MHz 。
IC2为一体化的红外接收头,可根据实际情况选用一种,但要注意3个引脚的定义随着接收头型号会有所不同。
虚线框中的Q1、Q2以及相应的电阻电容构成RS-232与TTL电平的转换电路,其具体原理不再赘述。有条件的读者可以用专用的转换芯片MAX232等代替
二、红外解码软件说明
在大多数的电视机、VCD、DVD、CD、功放等产品上面,菲利普公司的编码格式占大多数,空调器一般采用的是NEC的编码格式,不能用本方案进行数据提取。菲利普公司编码格式定义为:当一个键按下超过36ms,振荡器使芯片激活,如果这个键按下且延迟大约108ms,这108ms发射代码由一个起始码(9ms),一个结束码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms)也是低8位地址码的反码,8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。代码格式(以红外接收头接收的代码为准,接收代码与发射代码反向)定义如下
①编码格式定义
数据“0”的编码
0.56ms
1.12ms
数据“1”的编码
0.56ms
2.24ms
②单发代码格式
[table=98%][tr][td]
[/td][/tr][/table]
4.5ms
9ms
③连发代码格式
2.5ms
9ms
解码方案:
解码采用简单的查询判断的方法来进行。解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。
注意:通过电脑接收到的数据是实际接收到的32bit数据,没有进行数据的校验,这样可以更加清楚的知道所接收到的编码情况以及出错的位置。
三、汇编程序以及电脑软件
该红外线遥控器译码程序,所支持的遥控器应该是32位码的,接收的低8位地址放在1AH,高8位放在1BH,数据放在1CH,数据反码放在1DH。数据发送到电脑是采用9600波特率,一位起始位,一位停止位,无校验的格式。串口接收程序可以用网上广为使用的“串口调试助手”,注意将参数设置在对应的值。显示格式要选择“HEX”显示。
IRF_IN
BIT
P1.7
;定义红外线的输入引脚,读者可根据自己所接的管脚修改
ORG
0000H
AJMP
MAIN
ORG
0030H
MAIN:
MOV
P0,#0c0H
;开机后显示00
MOV
P2,#0c0H
MOV
TMOD,#20H
MOV
SCON,#50H
MOV
TL1,#0FDH
MOV
TH1,#0FDH
SETB
TR1
LOOP:
JB
IRF_IN,$
MOV
R6,#10
;10个882微秒-->9毫秒
SB:
ACALL YS1
JB
IRF_IN,LOOP
;判断9毫秒低电平是否连续
DJNZ
R6, SB
JNB
IRF_IN, $
;等待高电平避开9毫秒低电平引导脉冲
ACALL YS2
;延时4.74毫秒判断是否有后续脉冲
JB
IRF_IN,LOOP
MOV
R1,#1AH
;将32位代码分别放在1AH/1BH/1CH/1DH中
MOV
R2,#4
PP:
MOV
R3,#8
JJ:
JNB
IRF_IN,$
LCALL YS1
MOV
C,IRF_IN
JNC
KK
JB
IRF_IN,$
KK:
MOV
A,@R1
RRC
A
MOV
@R1,A
DJNZ
R3,JJ
INC
R1
DJNZ
R2,PP
LCALL DATAOUT
;在这里将接收到的编码发送到电脑,即使数据出错也发送
;---------------- compare --------------
MOV
A,1CH
;进行代码识别校验
CPL
A
XRL
A,1DH
;将1CH的值取反后和1DH比较 不同则是无效数据,丢弃
JZ
EXIT
MOV
P0,#0FFH
;数据出错时清除先前的显示内容并返回到接收状态
MOV
P2,#0FFH
AJMP
LOOP
EXIT:
lcall
dsp
;显示相应的代码数据
AJMP
LOOP
;--------------------delay-----------------------
YS1:
MOV
R4,#19
;延时880微秒
D1:
MOV
R5,#19
DJNZ
R5,$
DJNZ
R4,D1
RET
YS2:
MOV
R4,#10
;延时4740微秒
D2:
MOV
R5,#218
DJNZ
R5,$
DJNZ
R4,D2
RET
;----------------------RS232----------------------
DATAOUT:CLR
TI
MOV
A,1AH
MOV
SBUF,A
JNB
TI,$
CLR
TI
MOV
A,1BH
MOV
SBUF,A
JNB
TI,$
CLR
TI
MOV
A,1CH
MOV
SBUF,A
JNB
TI,$
CLR
TI
MOV
A,1DH
MOV
SBUF,A
JNB
TI,$
CLR
TI
RET
;--------------------------display---------------------
DSP:
MOV
DPTR,#TAB1
;将1AH(地址低8位)的值通过数码管显示出来
MOV
A,1AH
ANL
A,#0F0H
SWAP A
MOVC A,@A+DPTR
MOV
P0,A
MOV
A,1AH
ANL
A,#0FH
MOVC A,@A+DPTR
MOV
P2,A
MOV
R1,#0
DEL1S:ACALL YS2
DJNZ R1,DEL1S
;延时1S左右
MOV
A,1CH
;将1CH(数据码)的值显示出来
ANL
A,#0F0H
SWAP A
MOVC A,@A+DPTR
MOV
P0,A
MOV
A,1CH
ANL
A,#0FH
MOVC A,@A+DPTR
MOV
P2,A
RET
;---------------------------------------------------------
;LED数码管显示表(0-F) TAB1
TAB1:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0A7H,0A1H,86H,8EH
END
图5
电路图
本文采用一个AT89C51来对普通的遥控器进行软件解码,并且通过RS232串口将提取的遥控器数据(地址码和数据码)送到电脑进行显示,同时也可通过自带的LED数码管进行显示。
一、硬件电路
整机电路见图5。为了简化电路,将AT89C51的P0、P2口直接与两个共阳数码管连接,数码管的共阳公共端串联一个限流电阻R2、R3,阻值大小可以根据实际的数码管亮度在50欧到1K间调整。LED1显示每一个8位代码的高4位,LED2显示低4位。由于只有2位数码管,因此显示做如下安排:LED1、LED2先显示遥控器的低8位地址码,等待1秒钟后再显示遥控器的数据码(正码)。遥控器的高位地址和数据码反码可以根据显示的值取反得到,这里不再显示。如果要显示全部代码,读者可增加数码管,并对程序进行修改。电路中晶体J1使用11.0592MHz 。
IC2为一体化的红外接收头,可根据实际情况选用一种,但要注意3个引脚的定义随着接收头型号会有所不同。
虚线框中的Q1、Q2以及相应的电阻电容构成RS-232与TTL电平的转换电路,其具体原理不再赘述。有条件的读者可以用专用的转换芯片MAX232等代替
二、红外解码软件说明
在大多数的电视机、VCD、DVD、CD、功放等产品上面,菲利普公司的编码格式占大多数,空调器一般采用的是NEC的编码格式,不能用本方案进行数据提取。菲利普公司编码格式定义为:当一个键按下超过36ms,振荡器使芯片激活,如果这个键按下且延迟大约108ms,这108ms发射代码由一个起始码(9ms),一个结束码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms)也是低8位地址码的反码,8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。代码格式(以红外接收头接收的代码为准,接收代码与发射代码反向)定义如下
①编码格式定义
数据“0”的编码
0.56ms
1.12ms
数据“1”的编码
0.56ms
2.24ms
②单发代码格式
[table=98%][tr][td]
32位编码
[/td][/tr][/table]
4.5ms
9ms
③连发代码格式
2.5ms
9ms
解码方案:
解码采用简单的查询判断的方法来进行。解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。
注意:通过电脑接收到的数据是实际接收到的32bit数据,没有进行数据的校验,这样可以更加清楚的知道所接收到的编码情况以及出错的位置。
三、汇编程序以及电脑软件
该红外线遥控器译码程序,所支持的遥控器应该是32位码的,接收的低8位地址放在1AH,高8位放在1BH,数据放在1CH,数据反码放在1DH。数据发送到电脑是采用9600波特率,一位起始位,一位停止位,无校验的格式。串口接收程序可以用网上广为使用的“串口调试助手”,注意将参数设置在对应的值。显示格式要选择“HEX”显示。
IRF_IN
BIT
P1.7
;定义红外线的输入引脚,读者可根据自己所接的管脚修改
ORG
0000H
AJMP
MAIN
ORG
0030H
MAIN:
MOV
P0,#0c0H
;开机后显示00
MOV
P2,#0c0H
MOV
TMOD,#20H
MOV
SCON,#50H
MOV
TL1,#0FDH
MOV
TH1,#0FDH
SETB
TR1
LOOP:
JB
IRF_IN,$
MOV
R6,#10
;10个882微秒-->9毫秒
SB:
ACALL YS1
JB
IRF_IN,LOOP
;判断9毫秒低电平是否连续
DJNZ
R6, SB
JNB
IRF_IN, $
;等待高电平避开9毫秒低电平引导脉冲
ACALL YS2
;延时4.74毫秒判断是否有后续脉冲
JB
IRF_IN,LOOP
MOV
R1,#1AH
;将32位代码分别放在1AH/1BH/1CH/1DH中
MOV
R2,#4
PP:
MOV
R3,#8
JJ:
JNB
IRF_IN,$
LCALL YS1
MOV
C,IRF_IN
JNC
KK
JB
IRF_IN,$
KK:
MOV
A,@R1
RRC
A
MOV
@R1,A
DJNZ
R3,JJ
INC
R1
DJNZ
R2,PP
LCALL DATAOUT
;在这里将接收到的编码发送到电脑,即使数据出错也发送
;---------------- compare --------------
MOV
A,1CH
;进行代码识别校验
CPL
A
XRL
A,1DH
;将1CH的值取反后和1DH比较 不同则是无效数据,丢弃
JZ
EXIT
MOV
P0,#0FFH
;数据出错时清除先前的显示内容并返回到接收状态
MOV
P2,#0FFH
AJMP
LOOP
EXIT:
lcall
dsp
;显示相应的代码数据
AJMP
LOOP
;--------------------delay-----------------------
YS1:
MOV
R4,#19
;延时880微秒
D1:
MOV
R5,#19
DJNZ
R5,$
DJNZ
R4,D1
RET
YS2:
MOV
R4,#10
;延时4740微秒
D2:
MOV
R5,#218
DJNZ
R5,$
DJNZ
R4,D2
RET
;----------------------RS232----------------------
DATAOUT:CLR
TI
MOV
A,1AH
MOV
SBUF,A
JNB
TI,$
CLR
TI
MOV
A,1BH
MOV
SBUF,A
JNB
TI,$
CLR
TI
MOV
A,1CH
MOV
SBUF,A
JNB
TI,$
CLR
TI
MOV
A,1DH
MOV
SBUF,A
JNB
TI,$
CLR
TI
RET
;--------------------------display---------------------
DSP:
MOV
DPTR,#TAB1
;将1AH(地址低8位)的值通过数码管显示出来
MOV
A,1AH
ANL
A,#0F0H
SWAP A
MOVC A,@A+DPTR
MOV
P0,A
MOV
A,1AH
ANL
A,#0FH
MOVC A,@A+DPTR
MOV
P2,A
MOV
R1,#0
DEL1S:ACALL YS2
DJNZ R1,DEL1S
;延时1S左右
MOV
A,1CH
;将1CH(数据码)的值显示出来
ANL
A,#0F0H
SWAP A
MOVC A,@A+DPTR
MOV
P0,A
MOV
A,1CH
ANL
A,#0FH
MOVC A,@A+DPTR
MOV
P2,A
RET
;---------------------------------------------------------
;LED数码管显示表(0-F) TAB1
TAB1:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0A7H,0A1H,86H,8EH
END
图5
电路图
我来回答
回答0个
时间排序
认可量排序
暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2008-07-06 19:02:51
-
2016-03-21 15:51:54
-
2008-07-15 18:22:15
-
2016-10-08 17:17:05
-
2017-08-08 12:45:49
-
02013-08-27 16:28:22
-
2021-01-14 15:55:37
-
2013-12-01 23:38:10
-
2016-06-29 07:00:55
-
2012-11-30 14:12:25
-
12013-09-16 00:22:27
-
12015-05-10 20:00:27
-
2017-09-25 16:59:41
-
2018-03-14 11:23:49
-
2020-11-25 12:21:16
-
2020-11-29 16:11:39
-
2019-08-09 10:51:31
-
2013-12-13 16:50:00
-
2019-07-30 15:08:20
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认