图文详情
产品属性
相关推荐
HT6221 遥控器芯片简介
一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.引脚图
-20 DIP/SOP
HT6221
HT6222
-24 DIP/SOP
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),
三解码方法及软件说明
0.56ms
data period(1.12ms)
1
0.56ms
data period(2.24ms)
2.5ms
9ms
32 (4.5ms~63ms)
(A0~A15+D0~D7+D0~D7)
4.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左右均可
2,根据码的格式应该等待9ms的起始码和4.5ms的结果码完成后才能读码
3从上述两点我们可得到解码程序的流程图,这样接收到的仅仅是普通的代码,要得到标准的键值还必须进行代码识别和代码,转换下面是从代码接收到获得标准值的子程
KREM
与接收头相连的I/O
口
1AH,1BH,1CH,1DH
存放代码的4
个连续单元
YAO_KONG: CLR EA
JNB KREM,REMOT1
SJMP REM_BAK
平时KREM
为高电平
所以当KREM=1
时
表示无键按下,应立即返回
REMOT1: JNB KREM,$
等待9ms
的起始码发送完
MOV R2,#32 32
表示代码共32位,也可以送24
这样
KREM=0
Y
9ms
6ms,
N
Y 6ms
0.9ms
( ),
32
N
接收到的24位码将不包括数据代码的反代码
;-----------------------------------------
代码接收
BYTE1: MOV R3,#250
BYTE2: MUL AB
延时约6ms
可以稍长或稍短但不能小于4.5ms也不能太长,太长连击时将影响程序运行速度
JNB KREM,BYTE3;
DJNZ R3,BYTE2 ;
由于结果码为4.5ms,如果小于4.5ms结果码未发送完读得的码值将出错
˝
BYTE3: JNB KREM,$ ;
等待高电平,保证读每一位的起点一致
˝
;-----------------------------------------------
MOV R3,#150
DJNZ R3,$ ;
延时0.9ms
延时范围为0.56ms~1.12ms
;----------------------------------------
MOV C,KREM
MOV R3,#4
MOV R0,#1DH
BYTE4: MOV A,@R0
RLC A
MOV @R0,A
DEC R0
DJNZ R3,BYTE4
DJNZ R2,BYTE1
;
至此32位代码已全部接收完成,并存放在1AH~1DH中,依次为低8位地址码,高8位地址码8位数据码,8位数据的反代码
;----------------------------------------------------
˝ ;
代码识别
MOV A,1AH
XRL A,#03 ;3
为地址低8位的值对于不同的遥控器有不同的地址值
JNZ REM_BAK
MOV A,1BH
XRL A,#0FCH ;FCH
为地址高8
位的值
JNZ REM_BAK
MOV A,1CH
CPL A
XRL A,1DH
如果地址码不对或接收到的数据码两单元不反向均当错码本程序当无键按下处理
JNZ REM_BAK
;--------------------------------------------
代码转换
MOV R2,#21 21
为遥控器面板按键数
MOV DPTR,#TAB_REMOT
LOOKUP_1: MOV A,R2
MOVC A,@A+DPTR
XRL A,1CH
JZ REM_BAK0
DJNZ R2,LOOPUP_1
REM_BAK0: MOV A,R2 R2
中的值即为标准的键值
SJMP END_YK
REM_BAK: CLR A
END_YK: SETB EA
RET
;=====================================================================
代码转换表表中的值为面板上相应键的代码,对于不同的遥控器表中的值应做相应的改变
TAB_REMOT:
DB 00H
; VCD DVD AUX TUNER ST/M TSV-4 6
DB 0C0H, 0D0H, 0E8H, 0F0H, 0E0H, 0C8H
; UP DOWN FM/AM MEMORY A/B 11
DB 00H, 20H, 48H, 68H, 58H
; 6 17
DB 0D8H, 0F8H, 40H, 60H, 50H, 70H
; AUTO VOL+ VOL- MUTE 21
DB 28H , 10H , 30H , 78H
;=================================================================
说明:
此程序可在需要的地方任意调用LCALL YA0_KONG返回后,累加器中的值即为标准的键值,如果A=0则不予处理,可能原因有无键按下错码或非本机所用的遥控器的操作,程序中的延时均以4MHz的晶振为准若用不同的晶振,只需改变相应值符合注释中的延时时间即可
4从上述解码过程我们不难发现对于连发代码,解码得的值1AH~1DH,全为0FFH,所以软件如果需要处理连击,我们只须在代码识别前判断1AH~1DH是否全为0FFH,是则有连击现象这样建一个连击标志再返回,软件根据这个标志,结合上一次读得的键值便可进行相应的连击操作,直到按键松开连击标志才被清除,具体操作如下
在代码识别前插入
MOV A,1AH
ANL A,1BH
ANL A,1CH
ANL A,1DH
XRL A,#0FFH
JNZ DAN_JI
SETB FLAG_LIANJI ;
建连击标志
SJMP END_YK
DAN_JI: NOP
另外子程的最后几条指令改成
REM_BAK0: MOV A,R2
SJMP END_YK0
REM_BAK: CLRA
END_YK0: CLR FLAG_LIANJI ;
清连击标志
END_YK: SETB EA
RET
四应用实例
读者也许会问只要解得遥控器的代码就可以了转换成1~n标准值有什么优点呢?看了后面的简单实例不难发现它有如下好处,在应用系统中带遥控器的仪器一般都带按键而且二者功能相同,转换成标准值后,遥控按键散转表格可以与键盘散转表格复用。这样能节省一定的空间,HT622 1/2最大可支持32或64个按键,一般系统只使用其中的一部分,这样可能会使遥控器按键的代码毫无规律为了处理这样的代码。软件人员要么想方设法通过复杂的算法找出那些代码不是规律的规律,要么干脆不管那么多排列,一大堆CJNE A #DATA NEXT指令判断,使键值判断变得拖沓冗长,使用前述方法则清楚明了简单易行,对于不同的遥控器,本程序只要改变代码转换表即可,对再开发大有益处 。
HT6221
HT