📄 keypad.lst
字号:
C51 COMPILER V7.50 KEYPAD 07/03/2006 14:17:08 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE KEYPAD
OBJECT MODULE PLACED IN ..\..\OUTPUT\NTSC_SOUTH\Keypad.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ..\..\KERNEL\Keypad.c OPTIMIZE(9,SIZE) BROWSE ORDER INCDIR(..\..\INC\;..\..
-\UI\NTSC_SOUTH\) DEFINE(PABLO,MCU_MTV412M,OLGA) DEBUG OBJECTEXTEND PRINT(..\..\OUTPUT\NTSC_SOUTH\Keypad.lst) OBJECT(..\.
-.\OUTPUT\NTSC_SOUTH\Keypad.obj)
line level source
1 /******************************************************************************
2 Copyright (c) 2003 MStar Semiconductor, Inc.
3 All rights reserved.
4
5 [Module Name]: Keypad.c
6 [Date]: 31-Dec-2003
7 [Comment]:
8 Keypad control subroutines.
9 [Reversion History]:
10 *******************************************************************************/
11
12 #define _KEYPAD_C_
13
14 // System
15 #include <intrins.h>
16
17 // Common
18 #include "define.h"
19 #include "mcu.h"
20 #include "global.h"
21
22 // External
23 #include "common.h"
24 #include "uart.h"
25 #include "userpref.h"
26 #include "ir.h"
27
28 // Internal
29 #include "keypad.h"
30
31 ///////////////////////////////////////////////////////////////////////////////
32 // <Function>: keyScanStatus
33 //
34 // <Description>: Scan key status.
35 //
36 // <Returns> : Key Status.
37 ///////////////////////////////////////////////////////////////////////////////
38 #define KeyRange 15
39
40
41 XDATA BYTE g_ucKeyCode;
42 XDATA BYTE g_ucPreKeyCode;
43 bit g_bKeyScanEnable = 0;
44 void keyScanStatus(BYTE KeyPad)
45 {
46 1 BYTE tmp;
47 1
48 1 if (!g_bKeyScanEnable)
49 1 return;
50 1
51 1 tmp = MADC;
52 1
53 1 if (KeyPad == Key_AD0)
C51 COMPILER V7.50 KEYPAD 07/03/2006 14:17:08 PAGE 2
54 1 {
55 2 //g_ucKeyCode=IRMAX;
56 2 if ((0x88 - KeyRange) < tmp && tmp < (0x88 + KeyRange)) // AD0 OK
57 2 {
58 3 g_ucKeyCode = IRKEY_VOL_UP;
59 3 g_bKeyDetect = TRUE;
60 3 return ;
61 3 }
62 2 else if ((0x59 - KeyRange) < tmp && tmp < (0x59 + KeyRange)) // AD0 OK
63 2 {
64 3 g_ucKeyCode = IRKEY_VOL_DOWN;
65 3 g_bKeyDetect = TRUE;
66 3 return ;
67 3 }
68 2 else if ((0xC7 - KeyRange) < tmp && tmp < (0xC7 + KeyRange)) // AD0 OK
69 2 {
70 3 g_ucKeyCode = IRKEY_INPUT;
71 3 g_bKeyDetect = TRUE;
72 3 return ;
73 3 }
74 2 }
75 1 else//Key_AD1
76 1 {
77 2 if ((0xE3 - KeyRange) < tmp && tmp < (0xE3 + KeyRange)) // AD1 OK
78 2 {
79 3 g_ucKeyCode = IRKEY_POWER;
80 3 g_bKeyDetect = TRUE;
81 3 return ;
82 3 }
83 2 else if ((0x24 - KeyRange) < tmp && tmp < (0x24 + KeyRange)) // AD1 OK
84 2 {
85 3 g_ucKeyCode = IRKEY_CH_UP;
86 3 g_bKeyDetect = TRUE;
87 3 return ;
88 3 }
89 2 else if ((0x64 - KeyRange) < tmp && tmp < (0x64 + KeyRange)) // AD1 OK
90 2 {
91 3 g_ucKeyCode = IRKEY_CH_DOWN;
92 3 g_bKeyDetect = TRUE;
93 3 return ;
94 3 }
95 2 else if ((0xAC - KeyRange) < tmp && tmp < (0xAC + KeyRange)) // AD1 OK
96 2 {
97 3 g_ucKeyCode = IRKEY_TVMENU;
98 3 g_bKeyDetect = TRUE;
99 3 return ;
100 3 }
101 2 }
102 1 }
103
104 /////////////////////////////////////////
105 // delay 10 microsecond.
106 //
107 // Arguments: wValue - delay counter
108 ////////////////////////////////////////
109 #ifdef DVDENABLE
void Delay10us(WORD wValue)
{
WORD wCount; // loop counter
while (wValue--)
{
C51 COMPILER V7.50 KEYPAD 07/03/2006 14:17:08 PAGE 3
wCount = DELAY_1MS_PERIOD / 100; // reset loop counter
while (wCount--) ;
} // while
}
#endif
121 ///////////////////////////////////////////////////////////////////////////////
122 // <Function>: keyDetectHandler
123 //
124 // <Description>:
125 ///////////////////////////////////////////////////////////////////////////////
126 void keyDetectHandler(void)
127 {
128 1 g_bKeyScanEnable = 1;
129 1
130 1 if (!_testbit_(g_bKeyDetect))
131 1 {
132 2 g_ucPreKeyCode = IRMAX;
133 2 g_ucKeyReleaseCounter = 0;
134 2 g_bKeyScanEnable = 1;
135 2 return;
136 2 }
137 1 else
138 1 {
139 2 //printf("\r\nKeyCode=%x",g_ucKeyCode);
140 2 if (g_ucKeyReleaseCounter > 0xE000 && g_ucKeyReleaseCounter < 0xEE00)
141 2 {// key successfully received before and repeat
142 3 //putstr(">");
143 3 g_bIrDetect = TRUE;
144 3 g_IrCodeParam[5] = TRUE;
145 3 g_ucIrCode = g_ucKeyCode;
146 3 if (g_ucIrCode == IRKEY_INPUT)
147 3 g_ucKeyReleaseCounter = 0xFFFF;
148 3 else if (g_ucIrCode == IRKEY_TVMENU)
149 3 g_ucKeyReleaseCounter = 0xFFFF;
150 3 else//volume channel
151 3 g_ucKeyReleaseCounter = 0xEE00;
152 3 }
153 2 else if (g_ucKeyReleaseCounter == 0)
154 2 {// NEW KEY PRESSED
155 3 //putstr("-");
156 3 if (g_ucPreKeyCode == IRMAX)
157 3 {
158 4 g_bIrDetect = TRUE;
159 4 g_ucIrCode = g_ucKeyCode;
160 4 g_IrCodeParam[5] = TRUE;
161 4 if (g_ucKeyCode == IRKEY_POWER )
162 4 g_ucKeyReleaseCounter = 0x100;
163 4 else if (g_ucIrCode == IRKEY_TVMENU)
164 4 g_ucKeyReleaseCounter = 0xFFFF;
165 4 else if (g_ucIrCode == IRKEY_INPUT)
166 4 g_ucKeyReleaseCounter = 0xFFFF;
167 4 else//volume chanel input
168 4 g_ucKeyReleaseCounter = 0xEF80;
169 4 }
170 3 }
171 2 else if (g_ucKeyReleaseCounter > 0x200 && g_ucKeyReleaseCounter < 0xE000)
172 2 {
173 3 g_ucPreKeyCode = IRMAX;
174 3 g_ucKeyReleaseCounter = 0;
175 3 g_bKeyScanEnable = 1;
176 3 }
177 2 }
C51 COMPILER V7.50 KEYPAD 07/03/2006 14:17:08 PAGE 4
178 1 g_ucPreKeyCode = g_ucKeyCode;
179 1 g_bKeyScanEnable = 1;
180 1 }
181
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 320 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 2 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -