init
This commit is contained in:
+251
@@ -0,0 +1,251 @@
|
||||
C51 COMPILER V9.51 KEY 03/07/2018 10:41:04 PAGE 1
|
||||
|
||||
|
||||
C51 COMPILER V9.51, COMPILATION OF MODULE KEY
|
||||
OBJECT MODULE PLACED IN .\hex\key.obj
|
||||
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE key.c OMF2 ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE DEBUG PRINT(.\lst\key.lst)
|
||||
-TABS(2) OBJECT(.\hex\key.obj)
|
||||
|
||||
line level source
|
||||
|
||||
1 #ifndef _KEY_C_
|
||||
2 #define _KEY_C_
|
||||
3
|
||||
4 /*********************************************************************************************************
|
||||
-************/
|
||||
5 #include "ca51f5_config.h"
|
||||
6 #include "includes\ca51f5sfr.h"
|
||||
7 #include "includes\ca51f5xsfr.h"
|
||||
8 #include "includes\gpiodef_f5.h"
|
||||
9
|
||||
10 #include "Library\Includes\system_clock.h"
|
||||
11 #include "Library\includes\uart.h"
|
||||
12 #include "key.h"
|
||||
13 #include "io.h"
|
||||
14 /*********************************************************************************************************
|
||||
-************/
|
||||
15 #include "TS_Lib\Includes\ts_configuration.h"
|
||||
16 #include "TS_Lib\Includes\ts_def.h"
|
||||
17 #include "TS_Lib\Includes\ts_api.h"
|
||||
18 #include "TS_Lib\Includes\ts_service.h"
|
||||
19 /*********************************************************************************************************
|
||||
-************/
|
||||
20
|
||||
21 /*************************************************************************************************
|
||||
22 单键:以K1为例,K1按键产生的流程如下所示:
|
||||
23
|
||||
24 --> K1|KEY_BREAK(短按松开)
|
||||
25 -
|
||||
26 K1(按下)--
|
||||
27 -
|
||||
28 --> K1|KEY_LONG_START(长按大约1秒)---> K1|KEY_LONG(一直长按,约每300ms产生长按键)---->K1|KEY_LONG_BR
|
||||
-EAK(长按松开)
|
||||
29 ^ |
|
||||
30 | |
|
||||
31 |-----------------------------------------------|
|
||||
32
|
||||
33 复合键:
|
||||
34 以K1(K1=0x0001),K2(K2=0x0002)为例, 当K1,K2同时按下时,产生按键为(K1<<5)|K2,即0x22, 产生按键的流程如下所
|
||||
-示:
|
||||
35
|
||||
36
|
||||
37 --> ((K1<<5)|K2)|KEY_BREAK(短按松开)
|
||||
38 -
|
||||
39 (K1<<5)|K2(按下)--
|
||||
40 -
|
||||
41 --> ((K1<<5)|K2)|KEY_LONG_START(长按大约1秒)---> ((K1<<5)|K2)|KEY_LONG(一直长按,约每300ms产生长
|
||||
-按键)---->((K1<<5)|K2)|KEY_LONG_BREAK(长按松开)
|
||||
42 ^ |
|
||||
43 | |
|
||||
44 |---------------------------------------------------------|
|
||||
45 注意:由于复合键按下时,软件不一定同时检测到双键,而是先检测到单键按下,例如先检测到K1,此时会先产生K1键,
|
||||
-等到检测到K2也按
|
||||
46 下时,才会产生按键(K1<<5)|K2,检测到双键后,如果双键一直按下,会产生((K1<<5)|K2)|KEY_LONG_START和((K1<<5)|
|
||||
-K2)|KEY_LONG,如果
|
||||
C51 COMPILER V9.51 KEY 03/07/2018 10:41:04 PAGE 2
|
||||
|
||||
47 有一个键先松手,会停止产生按键, 等到双键都松开时,才会产生((K1<<5)|K2)|KEY_BREAK(短按松开)或((K1<<5)|K2)|
|
||||
-KEY_LONG_BREAK(长按松开)
|
||||
48 *************************************************************************************************/
|
||||
49 typedef struct
|
||||
50 {
|
||||
51 unsigned char TogKeyNum;
|
||||
52 unsigned char TogKeyList[2];
|
||||
53 }
|
||||
54 T_TogKeyInfo;
|
||||
55 code unsigned char TS_KEY_TAB[]=
|
||||
56 {
|
||||
57 K1,K2,K3,K4,K5,K6,K7,K8,K9,K10,K11,K12,K13
|
||||
58 };
|
||||
59 void TSKey_init(void)
|
||||
60 {
|
||||
61 1 TK_State = TK_STATE_RELEASE;
|
||||
62 1 TS_Key = 0;
|
||||
63 1 }
|
||||
64 void TS_GetTogKeyInfor(T_TogKeyInfo *pKeyInfo)
|
||||
65 {
|
||||
66 1 unsigned char i,index;
|
||||
67 1 pKeyInfo->TogKeyNum = 0;
|
||||
68 1 index = 0;
|
||||
69 1 for(i = 0; i < KEY_CH_COUNT; i++)
|
||||
70 1 {
|
||||
71 2 if(KeysFlagSN & MASK_TAB[i])
|
||||
72 2 {
|
||||
73 3 pKeyInfo->TogKeyNum++;
|
||||
74 3
|
||||
75 3 if(pKeyInfo->TogKeyNum <= 2)
|
||||
76 3 {
|
||||
77 4 pKeyInfo->TogKeyList[index++] = TS_KEY_TAB[i];
|
||||
78 4 }
|
||||
79 3 }
|
||||
80 2 }
|
||||
81 1 }
|
||||
82
|
||||
83 void TS_GetKey(void)
|
||||
84 {
|
||||
85 1 static unsigned int KeyBak;
|
||||
86 1 static bit LongFlag;
|
||||
87 1 T_TogKeyInfo KeyInfo;
|
||||
88 1 unsigned char i;
|
||||
89 1 TS_Key = 0;
|
||||
90 1 TS_GetTogKeyInfor(&KeyInfo);
|
||||
91 1
|
||||
92 1 if(TK_State == TK_STATE_RELEASE)
|
||||
93 1 {
|
||||
94 2 if(KeyInfo.TogKeyNum != 0)
|
||||
95 2 {
|
||||
96 3 if(KeyInfo.TogKeyNum == 1)
|
||||
97 3 {
|
||||
98 4 KeyBak = (unsigned int)KeyInfo.TogKeyList[0];
|
||||
99 4 TK_State = TK_STATE_SINGLE_KEY_PRESS;
|
||||
100 4 }
|
||||
101 3 else if(KeyInfo.TogKeyNum == 2)
|
||||
102 3 {
|
||||
103 4 KeyBak = ((unsigned int)KeyInfo.TogKeyList[0]<<5)|(unsigned int)KeyInfo.TogKeyList[1];
|
||||
104 4 TK_State = TK_STATE_DOUBLE_KEY_PRESS;
|
||||
105 4 }
|
||||
106 3
|
||||
107 3 TS_Key = KeyBak;
|
||||
C51 COMPILER V9.51 KEY 03/07/2018 10:41:04 PAGE 3
|
||||
|
||||
108 3 LongFlag = 0;
|
||||
109 3 TS_LongKeyTimer = TS_LONG_START_TIME;
|
||||
110 3 BUZZ_ON;
|
||||
111 3 }
|
||||
112 2 }
|
||||
113 1 else if(TK_State == TK_STATE_SINGLE_KEY_PRESS)
|
||||
114 1 {
|
||||
115 2 if(KeyInfo.TogKeyNum == 1)
|
||||
116 2 {
|
||||
117 3 if(KeyBak == (unsigned int)KeyInfo.TogKeyList[0])
|
||||
118 3 {
|
||||
119 4 if(!TS_LongKeyTimer)
|
||||
120 4 {
|
||||
121 5 if(!LongFlag)
|
||||
122 5 {
|
||||
123 6 LongFlag = 1;
|
||||
124 6 TS_Key = KeyBak | KEY_LONG_START;
|
||||
125 6 }
|
||||
126 5 else
|
||||
127 5 {
|
||||
128 6 TS_Key = KeyBak | KEY_LONG;
|
||||
129 6 }
|
||||
130 5 TS_LongKeyTimer = TS_LONG_TIME;
|
||||
131 5 }
|
||||
132 4 }
|
||||
133 3 else
|
||||
134 3 {
|
||||
135 4 if(!LongFlag)
|
||||
136 4 {
|
||||
137 5 TS_Key = KeyBak | KEY_BREAK;
|
||||
138 5 }
|
||||
139 4 else
|
||||
140 4 {
|
||||
141 5 TS_Key = KeyBak | KEY_LONG_BREAK;
|
||||
142 5 }
|
||||
143 4 TK_State = TK_STATE_RELEASE;
|
||||
144 4 BUZZ_OFF;
|
||||
145 4 }
|
||||
146 3 }
|
||||
147 2 else if(KeyInfo.TogKeyNum == 2)
|
||||
148 2 {
|
||||
149 3 KeyBak = ((unsigned int)KeyInfo.TogKeyList[0]<<5) | (unsigned int)KeyInfo.TogKeyList[1];
|
||||
150 3 TK_State = TK_STATE_DOUBLE_KEY_PRESS;
|
||||
151 3 TS_Key = KeyBak;
|
||||
152 3 LongFlag = 0;
|
||||
153 3 TS_LongKeyTimer = TS_LONG_START_TIME;
|
||||
154 3 }
|
||||
155 2 else if(KeyInfo.TogKeyNum == 0)
|
||||
156 2 {
|
||||
157 3 if(!LongFlag)
|
||||
158 3 {
|
||||
159 4 TS_Key = KeyBak | KEY_BREAK;
|
||||
160 4 }
|
||||
161 3 else
|
||||
162 3 {
|
||||
163 4 TS_Key = KeyBak | KEY_LONG_BREAK;
|
||||
164 4 }
|
||||
165 3 TK_State = TK_STATE_RELEASE;
|
||||
166 3 BUZZ_OFF;
|
||||
167 3 }
|
||||
168 2 }
|
||||
169 1 else if(TK_State == TK_STATE_DOUBLE_KEY_PRESS)
|
||||
C51 COMPILER V9.51 KEY 03/07/2018 10:41:04 PAGE 4
|
||||
|
||||
170 1 {
|
||||
171 2 if(KeyInfo.TogKeyNum == 2)
|
||||
172 2 {
|
||||
173 3 if(KeyBak == ((unsigned int)KeyInfo.TogKeyList[0]<<5)|(unsigned int)KeyInfo.TogKeyList[1])
|
||||
174 3 {
|
||||
175 4 if(!TS_LongKeyTimer)
|
||||
176 4 {
|
||||
177 5 if(!LongFlag)
|
||||
178 5 {
|
||||
179 6 LongFlag = 1;
|
||||
180 6 TS_Key = KeyBak | KEY_LONG_START;
|
||||
181 6 }
|
||||
182 5 else
|
||||
183 5 {
|
||||
184 6 TS_Key = KeyBak | KEY_LONG;
|
||||
185 6 }
|
||||
186 5 TS_LongKeyTimer = TS_LONG_TIME;
|
||||
187 5 }
|
||||
188 4 }
|
||||
189 3 }
|
||||
190 2 else if(KeyInfo.TogKeyNum == 0)
|
||||
191 2 {
|
||||
192 3 if(!LongFlag)
|
||||
193 3 {
|
||||
194 4 TS_Key = KeyBak | KEY_BREAK;
|
||||
195 4 }
|
||||
196 3 else
|
||||
197 3 {
|
||||
198 4 TS_Key = KeyBak | KEY_LONG_BREAK;
|
||||
199 4 }
|
||||
200 3 TK_State = TK_STATE_RELEASE;
|
||||
201 3 BUZZ_OFF;
|
||||
202 3 }
|
||||
203 2 }
|
||||
204 1 }
|
||||
*** WARNING C280 IN LINE 88 OF key.c: 'i': unreferenced local variable
|
||||
205 /*********************************************************************************************************
|
||||
-************/
|
||||
206 #endif
|
||||
|
||||
|
||||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||||
CODE SIZE = 407 ----
|
||||
CONSTANT SIZE = 13 ----
|
||||
XDATA SIZE = ---- ----
|
||||
PDATA SIZE = ---- ----
|
||||
DATA SIZE = 7 9
|
||||
IDATA SIZE = ---- ----
|
||||
BIT SIZE = 1 ----
|
||||
EDATA SIZE = ---- ----
|
||||
HDATA SIZE = ---- ----
|
||||
XDATA CONST SIZE = ---- ----
|
||||
FAR CONST SIZE = ---- ----
|
||||
END OF MODULE INFORMATION.
|
||||
|
||||
|
||||
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
|
||||
Reference in New Issue
Block a user