📄 key.lst
字号:
C51 COMPILER V7.10 KEY 03/04/2008 11:51:09 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN .\key.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE ..\SourceFile\key.c BROWSE DEBUG OBJECTEXTEND PRINT(.\key.lst
-) OBJECT(.\key.obj)
line level source
1
2 /***************************************************************************************
3 ****************************************************************************************
4 * FILE : key.c
5 * Description : key process
6 *
7 * Copyright (c) 2003~2007 by WANG SHAOWEI. All Rights Reserved.
8 *
9 * History:
10 * Version Name Date Description
11 1.0 Wang Shaowei 2003/07/16 Initial Version (MCU System)
12 2.0 Wang Shaowei 2005/06/01 MS2
13 3.0 Wang Shaowei 2007/03/11 MS3
14
15 ****************************************************************************************
16 ****************************************************************************************/
17
18 #include "common.h"
19
20
21
22
23
24
25
26
27 static U1 KeyEnable = TRUE;
28
29
30
31
32
33 /*==================================================================
34 * Function : key_enable
35 * Description : enable key check
36 * Input Para : void
37 * Output Para : void
38 * Return Value: void
39 ==================================================================*/
40 void key_enable(void)
41 {
42 1 KeyEnable = TRUE;
43 1 }
44
45
46 /*==================================================================
47 * Function : key_disable
48 * Description : disable key check
49 * Input Para : void
50 * Output Para : void
51 * Return Value: void
52 ==================================================================*/
53 void key_disable(void)
54 {
C51 COMPILER V7.10 KEY 03/04/2008 11:51:09 PAGE 2
55 1 KeyEnable = FALSE;
56 1 }
57
58 #ifdef DP51
59 U8 KeyMap(U8 val)
60 {
61 1 return(val + 1);
62 1 }
63
64
65
66
67
68 #ifdef KEY_MCU_STYLE
/*==================================================================
* Function : LongKeyMap
* Description : 长按键值映射表
* Input Para : U8 val : key value
* Output Para : void
* Return Value: U8 : key name
==================================================================*/
static U8 LongKeyMap(U8 val)
{
return(0x31 + val);
}
#endif
83 #endif
84
85
86 #ifdef KEY_PC_STYLE
87 /*==================================================================
88 * Function : key_check
89 * Description : 按键检测,采用扫面方式,利用P1口,4 * 4扫描
90 采用此方式,相对中断来说,具有简单方便,
91 硬件成本低,按键数多,外接元器件少等优点
92 * Input Para : void
93 * Output Para : void
94 * Return Value: void
95 ==================================================================*/
96 void key_check(void)
97 {
98 1 U8 data KeyRead;
99 1 static U8 data KeySafeguardInterval = 0; /*用于防止按键接触不良引起的误触发*/
100 1 static U8 data KeyCounter = 0;
101 1 static U8 data KeySave = 0;
102 1
103 1
104 1 if(!KeyEnable)
105 1 return;
106 1
107 1 KeyRead = key_read();
108 1
109 1
110 1 if(KeyRead == ERROR)
111 1 {
112 2 if(KeySafeguardInterval)
113 2 {
114 3 KeySafeguardInterval--;
115 3 }
116 2 KeyCounter = 0;
C51 COMPILER V7.10 KEY 03/04/2008 11:51:09 PAGE 3
117 2 return;
118 2 }
119 1
120 1 KeyCounter++;
121 1
122 1 //uputbyte(KeyRead);
123 1
124 1 if(KeyCounter == KEY_SHORT_INTERVAL)
125 1 {
126 2 if((!KeySafeguardInterval) && (KeySave == KeyRead))
127 2 {
128 3 MSG_SEND_MSG(MSG_KEY, KeyMap(KeyRead));
129 3 }
130 2 KeySafeguardInterval = KEY_SAFEGUARD_INTERVAL;
131 2 }
132 1
133 1
134 1 if(KeyCounter == KEY_LONG_INTERVAL)
135 1 {
136 2 if(KeySave == KeyRead)
137 2 {
138 3 MSG_SEND_MSG(MSG_KEY, KeyMap(KeyRead));
139 3 }
140 2 KeyCounter -= 4;
141 2 }
142 1
143 1 KeySave = KeyRead;
144 1
145 1 }
146
147 #elif defined KEY_MCU_STYLE
/*==================================================================
* Function : key_check
* Description :
* Input Para : void
* Output Para : void
* Return Value: void
==================================================================*/
void key_check(void)
{
U8 data KeyRead;
static U8 data KeySave;
static U8 data KeyCounter = 0;
if(!KeyEnable)
return;
KeyRead = key_read();
if(KeyRead == ERROR)
{
if(KeyCounter == KEY_LONG_INTERVAL)
{
KeyCounter = 0;
MSG_SEND_MSG(MSG_KEY, LongKeyMap(KeySave));
}
else if(KeyCounter > KEY_SHORT_INTERVAL)
{
KeyCounter = 0;
C51 COMPILER V7.10 KEY 03/04/2008 11:51:09 PAGE 4
MSG_SEND_MSG(MSG_KEY, KeyMap(KeySave));
}
}
else
{
KeyCounter++;
if(KeyCounter == 1)
{
KeySave = KeyRead;
}
else if(KeyCounter == 2)
{
if(KeySave != KeyRead)
{
KeyCounter = 0;
}
}
else if(KeyCounter > KEY_LONG_INTERVAL)
{
KeyCounter = KEY_LONG_INTERVAL;
}
}
}
#endif
208
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 96 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 1
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 + -