HE6221红外遥控发送芯片.docx

上传人:b****6 文档编号:4332341 上传时间:2022-11-29 格式:DOCX 页数:13 大小:40.37KB
下载 相关 举报
HE6221红外遥控发送芯片.docx_第1页
第1页 / 共13页
HE6221红外遥控发送芯片.docx_第2页
第2页 / 共13页
HE6221红外遥控发送芯片.docx_第3页
第3页 / 共13页
HE6221红外遥控发送芯片.docx_第4页
第4页 / 共13页
HE6221红外遥控发送芯片.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

HE6221红外遥控发送芯片.docx

《HE6221红外遥控发送芯片.docx》由会员分享,可在线阅读,更多相关《HE6221红外遥控发送芯片.docx(13页珍藏版)》请在冰豆网上搜索。

HE6221红外遥控发送芯片.docx

HE6221红外遥控发送芯片

HT6221/2解码成标准的键值

李奇刚

一.HT6221遥控器芯片简介

1.特征

*工作电压:

1.8V~3.5V

*Dout输出38KHz

*最小发射字:

一个字

*一个455KHz的陶瓷或晶体

*16位地址码

*8位数据码

*ppm代码方式

*最大活动键HT6221:

32键

HT6222:

64键

2.应用

*电视和录像录音机控制器

*夜盗警报系统

*烟火警报系统

*车门控制器

*汽车警报系统

*安全系统

*其它遥控系统

3.概述

HT6221/HT6222能编码16位地址码和8位数据码,HT6221/HT6222包含32键(K1~K32)和64键(K1~K64)

4.引脚图

5.方框图

6.引脚说明

引脚号

引脚名称

I/0

描述

1~6

R3~R8

输入

键盘行控制,高电平有效

7

DOUT

输出

串行数据输出引脚,38KHz发射频率

8

VDD

输入

1.8V~3.5V

9

DT

输入

最重要数据位(DT)代码设置

10

X2

输出

455KHz振荡器输出

11

X1

输入

455KHz振荡器输入

12

VSS

输入

13

LED

输出

发射输出

14~21

C8~C1

输入/输出

键盘列控制

22

AIN

输入

低8位地址码输入

23~24

R1~R2

输入

键盘行控制,高电平有效

7.内部连接应用电路

二.代码的特征

1.HT6221键码的形成

当一个键按下超过36ms,振荡器使芯片激活,如果这个键按下且延迟大约108ms,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。

如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。

2.代码格式(以接收代码为准,接收代码与发射代码反向)

①位定义

②单发代码格式

③连发代码格式

注:

代码宽度算法:

16位地址码的最短宽度:

1.12×16=18ms

16位地址码的最长宽度:

2.24ms×16=36ms

易知8位数据代码及其8位反代码的宽度和不变:

(1.12ms+2.24ms)×8=27ms

∴32位代码的宽度为(18ms+27ms)~(36ms+27ms)

三.解码方法及软件说明

1.解码的关键是如何识别“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左右均可。

2.根据码的格式,应该等待9ms的起始码和4.5ms的结果码完成后才能读码。

3.从上述两点,我们可得到解码程序的流程图。

这样接收到的仅仅是普通的代码,要得到标准的键值,还必须进行代码识别和代码转换,下面是从代码接收到获得标准值的子程。

KREM;与接收头相连的I/O口

1AH,1BH,1CH,1DH;存放代码的4个连续单元

YAO_KONG:

CLREA

JNBKREM,REMOT1

SJMPREM_BAK;平时KREM为高电平,所以当KREM=1时,

;表示无键按下,应立即返回

REMOT1:

JNBKREM,$;等待9ms的起始码发送完

MOVR2,#32;32表示代码共32位,也可以送24,这样

;接收到的24位码将不包括数据代码的

;反代码

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

;代码接收

BYTE1:

MOVR3,#250

BYTE2:

MULAB;延时约6ms,可以稍长或稍短,但不能

;小于4.5ms,也不能太长。

太长连击时

;将影响程序运行速度

JNBKREM,BYTE3;

DJNZR3,BYTE2;由于结果码为4.5ms,如果小于4.5ms,

;结果码未发送完,读得的码值将出错

BYTE3:

JNBKREM,$;等待高电平,保证读每一位的起点一致

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

MOVR3,#150

DJNZR3,$;延时0.9ms,延时范围为0.56ms~1.12ms

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

MOVC,KREM

MOVR3,#4

MOVR0,#1DH

BYTE4:

MOVA,@R0

RLCA

MOV@R0,A

DECR0

DJNZR3,BYTE4

DJNZR2,BYTE1

;至此32位代码已全部接收完成,并存放在1AH~1DH中,

;依次为低8位地址码,高8位地址码,8位数据码,

;8位数据的反代码

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

;代码识别

MOVA,1AH

XRLA,#03;3为地址低8位的值,对于不同的遥控器

;有不同的地址值

JNZREM_BAK

MOVA,1BH

XRLA,#0FCH;FCH为地址高8位的值

JNZREM_BAK

MOVA,1CH

CPLA

XRLA,1DH;如果地址码不对或接收到的数据码两单元

;不反向均当错码,本程序当无键按下处理

JNZREM_BAK

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

;代码转换

MOVR2,#21;21为遥控器面板按键数

MOVDPTR,#TAB_REMOT

LOOKUP_1:

MOVA,R2

MOVCA,@A+DPTR

XRLA,1CH

JZREM_BAK0

DJNZR2,LOOPUP_1

REM_BAK0:

MOVA,R2;R2中的值即为标准的键值

SJMPEND_YK

REM_BAK:

CLRA

END_YK:

SETBEA

RET

;=====================================================================

;代码转换表,表中的值为面板上相应键的代码

;对于不同的遥控器,表中的值应做相应的改变

TAB_REMOT:

DB00H

;VCDDVDAUXTUNERST/MTSV-46

DB0C0H,0D0H,0E8H,0F0H,0E0H,0C8H

;UPDOWNFM/AMMEMORYA/B11

DB00H,20H,48H,68H,58H

;12345617

DB0D8H,0F8H,40H,60H,50H,70H

;AUTOVOL+VOL-MUTE21

DB28H,10H,30H,78H

;=================================================================

说明:

此程序可在需要的地方任意调用(LCALLYA0_KONG),返回后,累加器中的值即为标准的键值,如果A=0则不予处理(可能原因有:

无键按下,错码或非本机所用的遥控器的操作),程序中的延时均以4MHz的晶振为准,若用不同的晶振,只需改变相应值,符合注释中的延时时间即可。

4.从上述解码过程我们不难发现,对于连发代码,解码得的值1AH~1DH全为0FFH,所以软件如果需要处理连击,我们只须在代码识别前判断1AH~1DH是否全为0FFH,是则有连击现象,这样建一个连击标志,再返回,软件根据这个标志,结合上一次读得的键值便可进行相应的连击操作,直到按键松开,连击标志才被清除。

具体操作如下:

在代码识别前插入

MOVA,1AH

ANLA,1BH

ANLA,1CH

ANLA,1DH

XRLA,#0FFH

JNZDAN_JI

SETBFLAG_LIANJI;建连击标志

SJMPEND_YK

DAN_JI:

NOP

另外子程的最后几条指令改成

REM_BAK0:

MOVA,R2

SJMPEND_YK0

REM_BAK:

CLRA

END_YK0:

CLRFLAG_LIANJI;清连击标志

END_YK:

SETBEA

RET

____

四.应用实例

读者也许会问,只要解得遥控器的代码就可以了,转换成1~n标准值有什么优点呢?

看了后面的简单实例,不难发现它有如下好处:

①.在应用系统中,带遥控器的仪器,一般都带按键,而且二者功能相同,转换成标准值后,遥控按键散转表格可以与键盘散转表格复用,这样能节省一定的空间。

②.HT6221/2最大可支持32或64个按键,一般系统只使用其中的一部分,这样可能会使遥控器按键的代码毫无规律,为了处理这样的代码,软件人员要么想方设法通过复杂的算法找出那些代码不是规律的规律,要么干脆不管那么多,排列一大堆“CJNEA,#DATA,NEXT”指令判断,使键值判断变得拖沓冗长。

使用前述方法则清楚明了,简单易行。

③.对于不同的遥控器,本程序只要改变代码转换表即可,对再开发大有益处。

______1.实例电路______

程序清单及说明:

KREMEQUP0.0

L1EQUP1.0

L2EQUP1.1

L3EQUP1.2

L4EQUP1.3

L5EQUP1.4

L6EQUP1.5

L7EQUP1.6

L8EQUP1.7

L9EQUP3.4

L10EQUP3.5

L11EQUP3.6

L12EQUP2.0

L13EQUP2.1

L14EQUP2.2

L15EQUP2.3

L16EQUP2.4

L17EQUP2.5

L18EQUP2.6

L19EQUP2.7

L20EQUP0.6

L21EQUP0.5

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

ORG0000H

AJMPSTART0

ORG0030H

START0:

MOVSP,#60H

START:

ACALLYAO_KONG;调用解码子程

JZSTART

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

RLA

MOVDPTR,#TAB_KEY

JMP@A+DPTR

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

TAB_KEY:

AJMPSTART

AJMPKEY1

AJMPKEY2

AJMPKEY3

AJMPKEY4

AJMPKEY5

AJMPKEY6

AJMPKEY7

AJMPKEY8

AJMPKEY9

AJMPKEY10

AJMPKEY11

AJMPKEY12

AJMPKEY13

AJMPKEY14

AJMPKEY15

AJMPKEY16

AJMPKEY17

AJMPKEY18

AJMPKEY19

AJMPKEY20

AJMPKEY21

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

KEY1:

ACALLCLEAR_IO

SETBL1

AJMPSTART

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

KEY2:

ACALLCLEAR_IO

SETBL2

AJMPSTART

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

KEY3:

ACALLCLEAR_IO

SETBL3

AJMPSTART

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

KEY4:

ACALLCLEAR_IO

SETBL4

AJMPSTART

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

KEY5:

ACALLCLEAR_IO

SETBL5

AJMPSTART

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

KEY6:

ACALLCLEAR_IO

SETBL6

AJMPSTART

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

KEY7:

ACALLCLEAR_IO

SETBL7

AJMPSTART

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

KEY8:

ACALLCLEAR_IO

SETBL8

AJMPSTART

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

KEY9:

ACALLCLEAR_IO

SETBL9

AJMPSTART

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

KEY10:

ACALLCLEAR_IO

SETBL10

AJMPSTART

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

KEY11:

ACALLCLEAR_IO

SETBL11

AJMPSTART

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

KEY12:

ACALLCLEAR_IO

SETBL12

AJMPSTART

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

KEY13:

ACALLCLEAR_IO

SETBL13

AJMPSTART

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

KEY14:

ACALLCLEAR_IO

SETBL14

AJMPSTART

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

KEY15:

ACALLCLEAR_IO

SETBL15

AJMPSTART

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

KEY16:

ACALLCLEAR_IO

SETBL16

AJMPSTART

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

KEY17:

ACALLCLEAR_IO

SETBL17

AJMPSTART

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

KEY18:

ACALLCLEAR_IO

SETBL18

AJMPSTART

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

KEY19:

ACALLCLEAR_IO

SETBL19

AJMPSTART

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

KEY20:

ACALLCLEAR_IO

SETBL20

AJMPSTART

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

KEY21:

ACALLCLEAR_IO

SETBL21

AJMPSTART

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

CLEAR_IO:

MOVP0,#0

MOVP1,#0

MOVP2,#0

MOVP3,#0

RET

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

END

①该程序是应用“HT6221解码成标准键值”的典型例子。

KEY1、KEY2……KEY21分别表示不同的功能模块,也就是说根据解得的键值按照需要做具体的事。

以示明显,。

这里分别用L1、L2……L21共21个发光管代替程序要做的事,当不同的键按下时,对应的发光管亮,其余的管均灭。

②如果读者有兴趣,不防一试。

需要注意的是,实验前必须把你手上的遥控器的代码填在代码转换表的相应位置,代码的得来不难。

在“代码识别”前设一断点,运行程序,按不同的键,程序运行到断点停下时,“1CH”单元的内容即为当前按键的代码。

同时应该用1AH中的内容替换程序中的低8位地址“3”,1BH中的内容替换程序中高8位地址“0FCH”。

如此做好后,便大功告成,这时有且只有你手上的遥控器可以控制发光管了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1