51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > 51单片机 > 详细内容
HT6221/2解码成标准的键值
发布时间:2009/6/29  阅读次数:2464  字体大小: 【】 【】【
  
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,这样
;接收到的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
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号