当前位置:
首页 >
单片机技术文章 >
51单片机 > 详细内容
- HT6221/2解码成标准的键值
- 发布时间:2009/6/29 阅读次数:2463 字体大小: 【小】 【中】【大】
四.应用实例
读者也许会问,只要解得遥控器的代码就可以了,转换成1~n标准值有什么优点呢?看了后面的简单实例,不难发现它有如下好处:
①. 在应用系统中,带遥控器的仪器,一般都带按键,而且二者功能相同,转换成标准值后,遥控按键散转表格可以与键盘散转表格复用,这样能节省一定的空间。
②. HT622 1/2最大可支持32或64个按键,一般系统只使用其中的一部分,这样可能会使遥控器按键的代码毫无规律,为了处理这样的代码,软件人员要么想方设法通过复杂的算法找出那些代码不是规律的规律,要么干脆不管那么多,排列一大堆“CJNE A,#DATA,NEXT”指令判断,使键值判断变得拖沓冗长。使用前述方法则清楚明了,简单易行。
③. 对于不同的遥控器,本程序只要改变代码转换表即可,对再开发大有益处。
1.实例电路
程序清单及说明:
KREM EQU P0.0
L1 EQU P1.0
L2 EQU P1.1
L3 EQU P1.2
L4 EQU P1.3
L5 EQU P1.4
L6 EQU P1.5
L7 EQU P1.6
L8 EQU P1.7
L9 EQU P3.4
L10 EQU P3.5
L11 EQU P3.6
L12 EQU P2.0
L13 EQU P2.1
L14 EQU P2.2
L15 EQU P2.3
L16 EQU P2.4
L17 EQU P2.5
L18 EQU P2.6
L19 EQU P2.7
L20 EQU P0.6
L21 EQU P0.5
;-----------------------------------------
ORG 0000H
AJMP START0
ORG 0030H
START0: MOV SP,#60H
START: ACALL YAO_KONG ;调用解码子程
JZ START
;----------------------------------------
RL A
MOV DPTR,#TAB_KEY
JMP @A+DPTR
;---------------------------------------
TAB_KEY: AJMP START
AJMP KEY1
AJMP KEY2
AJMP KEY3
AJMP KEY4
AJMP KEY5
AJMP KEY6
AJMP KEY7
AJMP KEY8
AJMP KEY9
AJMP KEY10
AJMP KEY11
AJMP KEY12
AJMP KEY13
AJMP KEY14
AJMP KEY15
AJMP KEY16
AJMP KEY17
AJMP KEY18
AJMP KEY19
AJMP KEY20
AJMP KEY21
;-------------------------------------
KEY1: ACALL CLEAR_IO
SETB L1
AJMP START
;-------------------------------------
KEY2: ACALL CLEAR_IO
SETB L2
AJMP START
;------------------------------------
KEY3: ACALL CLEAR_IO
SETB L3
AJMP START
;-----------------------------------
KEY4: ACALL CLEAR_IO
SETB L4
AJMP START
;----------------------------------
KEY5: ACALL CLEAR_IO
SETB L5
AJMP START
;----------------------------------
KEY6: ACALL CLEAR_IO
SETB L6
AJMP START
;----------------------------------
KEY7: ACALL CLEAR_IO
SETB L7
AJMP START
;----------------------------------
KEY8: ACALL CLEAR_IO
SETB L8
AJMP START
;----------------------------------
KEY9: ACALL CLEAR_IO
SETB L9
AJMP START
;----------------------------------
KEY10: ACALL CLEAR_IO
SETB L10
AJMP START
;----------------------------------
KEY11: ACALL CLEAR_IO
SETB L11
AJMP START
;----------------------------------
KEY12: ACALL CLEAR_IO
SETB L12
AJMP START
;----------------------------------
KEY13: ACALL CLEAR_IO
SETB L13
AJMP START
;----------------------------------
KEY14: ACALL CLEAR_IO
SETB L14
AJMP START
;----------------------------------
KEY15: ACALL CLEAR_IO
SETB L15
AJMP START
;----------------------------------
KEY16: ACALL CLEAR_IO
SETB L16
AJMP START
;----------------------------------
KEY17: ACALL CLEAR_IO
SETB L17
AJMP START
;----------------------------------
KEY18: ACALL CLEAR_IO
SETB L18
AJMP START
;----------------------------------
KEY19: ACALL CLEAR_IO
SETB L19
AJMP START
;----------------------------------
KEY20: ACALL CLEAR_IO
SETB L20
AJMP START
;----------------------------------
KEY21: ACALL CLEAR_IO
SETB L21
AJMP START
;----------------------------------
CLEAR_IO: MOV P0,#0
MOV P1,#0
MOV P2,#0
MOV P3,#0
RET
;------------------------------------
END
① 该程序是应用“HT6221解码成标准键值”的典型例子。KEY1、KEY2……KEY21分别表示不同的功能模块,也就是说根据解得的键值按照需要做具体的事。以示明显,。这里分别用L1、L2……L21共21个发光管代替程序要做的事,当不同的键按下时,对应的发光管亮,其余的管均灭。
② 如果读者有兴趣,不防一试。需要注意的是,实验前必须把你手上的遥控器的代码填在代码转换表的相应位置,代码的得来不难。在“代码识别”前设一断点,运行程序,按不同的键,程序运行到断点停下时,“1CH”单元的内容即为当前按键的代码。同时应该用1AH中的内容替换程序中的低8位地址“3”,1BH中的内容替换程序中高8位地址“0FCH”。如此做好后,便大功告成,这时有且只有你手上的遥控器可以控制发光管了。