RSS

HT6221遥控器芯片概述02

来源:网络 作者:佚名 时间:2008-07-15 Tag:HT6221   遥控器   芯片   点击:

REMOT1: JNB KREM,$ ;等待9ms的起始码发送完
MOV R2,#32 ;32表示代码共32位,也可以送24,这样
;接收到的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

; 1 2 3 4 5 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"指令判断,使键值判断变得拖沓冗长。使用前述方法则清楚明了,简单易行。
③. 对于不同的遥控器,本程序只要改变代码转换表即可,对再开发大有益处。

1.实例电路


1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
教程下载