This commit is contained in:
2025-07-07 10:41:49 +08:00
commit 1bae677e06
88 changed files with 36686 additions and 0 deletions
+251
View File
@@ -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)为例, 当K1K2同时按下时,产生按键为(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)