📄 ic165.lst
字号:
C51 COMPILER V8.08 IC165 03/06/2008 13:48:04 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE IC165
OBJECT MODULE PLACED IN .\obj\IC165.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SRC\IC165.C BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\IC165.lst) OBJECT(.\obj\I
-C165.obj)
line level source
1 #if 1
2 #include "ic165.h"
3 #include "debug.h"
4 #include "comm.h"
5 #include "Key_process.h"
6
7 #define KEY_NONE 0
8 #define KEY_PRESS 1
9 #define KEY_HOLD 2
10 #define KEY_UP 3
11
12 #define _NEW_KEY_PRESS_TIME 1
13 #define _KEY_HOLD_TIME 12
14
15 //#define _SHORT_KEY_HOLD_TIME 10
16 #define _LONG_KEY_HOLD_TIME 10
17
18 extern uchar user_key;
19 static void proc_key_press(unsigned char key_value);
20 static void proc_key_hold(unsigned char key_value,unsigned int hold_time);
21 static void proc_key_up(unsigned char key_value,unsigned int hold_time);
22
23 typedef struct {
24 unsigned char key_value;
25 unsigned char key_mode;
26 }_PANEL_KEY,*_pPANEL_KEY;
27
28 enum
29 {
30 DECT_EXIT_KEY = 1,// ENTER_KEY, /*1*/ /*p 0.4 * p0.1*/
31 DECT_VOLUME_UP_KEY,
32 DECT_LEFT_KEY,///* VOLUME_DN_KEY,*/ /*3*/ /*p 0.4 * p0.3*/DOWN_KEY,
33 DECT_UP_KEY,///* VOLUME_UP_KEY,*/ /*4*/ /*p 0.5 * p0.1 */EXIT_KEY,
34 DECT_DOWN_KEY,//_POWER_KEY, /*5*/ /*p 0.5 * p0.2 */
35 DECT_RIGHT_KEY,///* UP_KEY,*/ /*6*/ /*p 0.5 * p0.3 */LEFT_KEY,
36 DECT_VOLUME_DN_KEY,
37 DECT__POWER_KEY,///* LEFT_KEY,*/ /*8*/ /*p 1.0 * p0.2*/UP_KEY,
38 DECT_ENTER_KEY,//RIGHT_KEY, /*9*/ /*p 1.0 * p0.2*/
39 DECT_EXTERN_KEY, /*JIAN ADD IN 08-03-06*/
40 };
41
42 #ifdef PANEL_KEY_4_2
#define key_init_state 0x3c
#define key1_effect (key_init_state&(~0x04))
#define key2_effect (key_init_state&(~0x08))
#define key3_effect (key_init_state&(~0x10))
#define key4_effect (key_init_state&(~0x20))
/******************************************************************
8个前控按键扫描
2×4
C51 COMPILER V8.08 IC165 03/06/2008 13:48:04 PAGE 2
******************************************************************/
unsigned char Scan_Panel_Key()
{
unsigned char port_vaule;
unsigned char key_vaule;
unsigned char scan_cnt;
for(scan_cnt = 0;scan_cnt<2;scan_cnt++)
{
if(scan_cnt == 0)
{
PORT_ROM1 = 0;
PORT_ROM2 = 1;
}
else
{
PORT_ROM1 = 1;
PORT_ROM2 = 0;
}
port_vaule = (P0&key_init_state); /*读p0口的四个IO口*/
if(port_vaule != key_init_state) /*当IO口有变化的时候*/
{
/*发现有两个键以上同时按下时,不做处理*/
if(key_vaule > 0)
{
key_vaule = 0;
break;
}
}
else
{
if(scan_cnt == 1)
key_vaule = 4;
}
switch(port_vaule&0xff)
{
case key1_effect:
key_vaule += 1;
break;
case key2_effect:
key_vaule += 2;
break;
case key3_effect:
key_vaule += 3;
break;
case key4_effect:
key_vaule += 4;
break;
default: /**/
key_vaule = 0;
break;
}
}
C51 COMPILER V8.08 IC165 03/06/2008 13:48:04 PAGE 3
// Scan_Key_init();
return key_vaule;
}
#else
124
125 /*
126 p 0.1
127 p 0.2
128 p 0.3
129 */
130 #define key_init_state 0x1c
131 #define key1_effect (key_init_state&(~0x04)) /*p0.2*/
132 #define key2_effect (key_init_state&(~0x08)) /*p0.3*/
133 #define key3_effect (key_init_state&(~0x10)) /*p0.4*/
134 //#define key4_effect (key_init_state&(~0x20))
135 /******************************************************************
136 8个前控按键扫描
137
138 3 * 3
139
140 ******************************************************************/
141 unsigned char Scan_Panel_Key()
142 {
143 1 unsigned char port_vaule;
144 1 unsigned char key_vaule;
145 1 unsigned char scan_cnt;
146 1 //static int cnt;
147 1 // PORT_LINE1 = 0;
148 1 #if 0
if(cnt != 500)
{
cnt ++;
}
else
{
cnt = 0;
return 0;
}
#endif
159 1 PORT_LINE1 = 1;
160 1 PORT_LINE2 = 1;
161 1 PORT_LINE3 = 1;
162 1
163 1 for(scan_cnt = 0;scan_cnt < 3; scan_cnt++)
164 1 {
165 2 //PORT_LINE2 = 1;
166 2
167 2 // tvbox_printf(" scan_cnt:", scan_cnt, 1);
168 2 if(scan_cnt == 0)
169 2 {
170 3 //PORT_LINE2 = 1;
171 3 PORT_ROM1 = 0;
172 3 PORT_ROM2 = 1;
173 3 PORT_ROM3 = 1;
174 3
175 3 }
176 2 else if(scan_cnt == 1)
177 2 {
178 3 PORT_ROM1 = 1;
C51 COMPILER V8.08 IC165 03/06/2008 13:48:04 PAGE 4
179 3 PORT_ROM2 = 0;
180 3 PORT_ROM3 = 1;
181 3 // PORT_LINE2 = 0;
182 3 }
183 2 else if(scan_cnt == 2)
184 2 {
185 3
186 3 PORT_ROM2 = 1;
187 3 PORT_ROM3 = 0;
188 3 PORT_ROM1 = 1;
189 3 }
190 2
191 2 // if(PORT_LINE2 == 0)
192 2 // {
193 2 // STANDBY_LED = ~STANDBY_LED;
194 2 // }
195 2 port_vaule = (P0&key_init_state); /*读p0口的四个IO口*/
196 2 // tvbox_printf("port_vaule:", port_vaule, 1);
197 2 if(port_vaule != key_init_state) /*当IO口有变化的时候*/
198 2 {
199 3 /*发现有两个键以上同时按下时,不做处理*/
200 3
201 3 /*当发现有两个按键,下键和上键同时按下的时候产生第十个键值*/
202 3 if(key_vaule > 0)
203 3 {
204 4 if(key_vaule == DECT_UP_KEY) /*检测到有第二个键按下的时候,前一个键是方向上键或是下
-键 ,再判断此时的按键是否是这两个键的另一个
205 4 如果条件满足就产生第十个键值,否则就不做处理
206 4 dect_up_key
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -