This commit is contained in:
2025-07-07 10:41:49 +08:00
commit 1bae677e06
88 changed files with 36686 additions and 0 deletions
+696
View File
@@ -0,0 +1,696 @@
C51 COMPILER V9.60.7.0 MAIN 07/03/2025 11:27:46 PAGE 1
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\hex\main.obj
COMPILER INVOKED BY: D:\Program Files\Keil_v5\C51\BIN\C51.EXE main.c OMF2 OPTIMIZE(9,SIZE) BROWSE DEBUG PRINT(.\lst\main
-.lst) TABS(2) OBJECT(.\hex\main.obj)
line level source
1 #ifndef _MAIN_C_
2 #define _MAIN_C_
3 /*********************************************************************************************************
-************/
4 #include "ca51f5_config.h"
5 #include "includes\ca51f5sfr.h"
6 #include "includes\ca51f5xsfr.h"
7 #include "includes\gpiodef_f5.h"
8
9 #include "Library\includes\uart.h"
10 #include "Library\includes\system_clock.h"
11 #include "Library\Includes\tmc.h"
12 #include "includes\system.h"
13 #include "Library\includes\wdt.h"
14 /*********************************************************************************************************
-************/
15 #include "TS_Lib\Includes\ts_configuration.h"
*** WARNING C329 IN LINE 117 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 118 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 119 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 120 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 121 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 122 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 123 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 124 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
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 #include "rf_send.h"
20
21 #include "Library\Includes\delay.h"
22
23 #define INT_TIME 100 //定时时间,单位为us
24
25 #define TH_VAL (unsigned char)((0x2000 - (INT_TIME*(FOSC/1000))/12000)>>5)
26 #define TL_VAL (unsigned char)(0x2000 - (INT_TIME*(FOSC/1000))/12000)&0x1F
27
28
29
30 unsigned char flagSend = 0;
31 unsigned char valueSend = 0;
32 unsigned char flagStart = 0;
33
34
35
36 void Delay_ms(unsigned int n);
37
38 void TIMER0_ISR (void) interrupt 1 //每100us产生中断
39 {
40 1 TH0 = TH_VAL;
41 1 TL0 = TL_VAL;
42 1
43 1 Send433_Byte();
44 1 }
C51 COMPILER V9.60.7.0 MAIN 07/03/2025 11:27:46 PAGE 2
45 /*********************************************************************************************************
-************/
46 /*********************************************************************************************************
-**********************************
47 说明:
48 ----------------------------------------------------------------------------------------------------------
---
49 1.ts_configuration.h是触摸的配置文件,可在配置文件中设置触摸通道、灵敏度等。详见ts_configuration.h中的说明
-。
50 ----------------------------------------------------------------------------------------------------------
---
51 2.如果需要使用UART来调试,可在ca51f5_config.h中打开宏定义UART0_EN
52 ----------------------------------------------------------------------------------------------------------
---
53 3.触摸库对外的数据接口为KeysFlagSN,用户可根据KeysFlagSN的值来判断触摸键是否按下(如果触摸键按下,KeysFlag
-SN
54 的对应位一直为1,触摸键松开,对应位变为0),TS_Key是根据KeysFlagSN的值生成的按键消息,用户如不使用可忽略。
55 ----------------------------------------------------------------------------------------------------------
---
56 4.使能了触摸省电模式后,在无按键时,在定义的时间后会进入省电模式,进入省电模式前会关闭TMC中断和触摸中断(
-⒁猓
57 中断仍是开启的),在触摸省电模式下,CPU会进入STOP模式,在被触摸唤醒后,程序在省电函数(TS_EnterSleepMode
-的循环内运行(注意,触摸省电模式程序不
58 会在主循环内运行),在触摸省电模式下如果还要响应其他中断,用户需在进入触摸省电模式前自行开启其他中断,
59 如果需要退出省电模式,用户只需要在省电函数循环内加入条件判断,跳出循环即可。
60
61 变量TS_SleepEn是控制触摸省电模式的开关,如果希望程序在某些条件下不进入省电模式,只需在此条件下设置TS_Sleep
-En = 0
62
63
64 ----------------------------------------------------------------------------------------------------------
---
65 5.触摸外挂电容(即TK_CAP引脚连接电容)范围:6nF~50nF,建议值:20nF(即203
66 ----------------------------------------------------------------------------------------------------------
---
67 6.触摸引脚串联电阻范围:0~5K,建议值:1K欧姆,如果有抗对讲机等电磁干扰要求, 此电阻至少3K以上。
68 **********************************************************************************************************
-*********************************/
69 unsigned long int Read_32bit_UID(void)
70 {
71 1 unsigned long int ID;
72 1 FSCMD = 0x80;
73 1 PTSH = 0x00;
74 1 PTSL = 0x00;
75 1 FSCMD = 0x81;
76 1 ID = FSDAT;
77 1 ID *= 256;
78 1 ID |= FSDAT;
79 1 ID *= 256;
80 1 ID |= FSDAT;
81 1 ID *= 256;
82 1 ID |= FSDAT;
83 1 FSCMD = 0;
84 1 return ID;
85 1 }
86 code unsigned char rf_data[255]=
87 {
88 0 ,
89 1 ,
90 2 ,
91 3 ,
92 4 ,
C51 COMPILER V9.60.7.0 MAIN 07/03/2025 11:27:46 PAGE 3
93 5 ,
94 6 ,
95 7 ,
96 8 ,
97 9 ,
98 10 ,
99 11 ,
100 12 ,
101 13 ,
102 14 ,
103 15 ,
104 16 ,
105 17 ,
106 18 ,
107 18 ,
108 19 ,
109 20 ,
110 21 ,
111 22 ,
112 23 ,
113 24 ,
114 25 ,
115 26 ,
116 27 ,
117 28 ,
118 29 ,
119 30 ,
120 31 ,
121 32 ,
122 33 ,
123 34 ,
124 35 ,
125 36 ,
126 37 ,
127 37 ,
128 38 ,
129 39 ,
130 40 ,
131 41 ,
132 42 ,
133 43 ,
134 44 ,
135 45 ,
136 46 ,
137 47 ,
138 48 ,
139 49 ,
140 50 ,
141 51 ,
142 52 ,
143 53 ,
144 54 ,
145 55 ,
146 56 ,
147 56 ,
148 57 ,
149 58 ,
150 59 ,
151 60 ,
152 61 ,
153 62 ,
154 63 ,
C51 COMPILER V9.60.7.0 MAIN 07/03/2025 11:27:46 PAGE 4
155 64 ,
156 65 ,
157 66 ,
158 67 ,
159 68 ,
160 69 ,
161 70 ,
162 71 ,
163 72 ,
164 73 ,
165 74 ,
166 74 ,
167 75 ,
168 76 ,
169 77 ,
170 78 ,
171 79 ,
172 80 ,
173 81 ,
174 82 ,
175 83 ,
176 84 ,
177 85 ,
178 86 ,
179 87 ,
180 88 ,
181 89 ,
182 90 ,
183 91 ,
184 92 ,
185 93 ,
186 93 ,
187 94 ,
188 95 ,
189 96 ,
190 97 ,
191 98 ,
192 99 ,
193 100 ,
194 101 ,
195 102 ,
196 103 ,
197 104 ,
198 105 ,
199 106 ,
200 107 ,
201 108 ,
202 109 ,
203 110 ,
204 111 ,
205 112 ,
206 112 ,
207 113 ,
208 114 ,
209 115 ,
210 116 ,
211 117 ,
212 118 ,
213 119 ,
214 120 ,
215 121 ,
216 122 ,
C51 COMPILER V9.60.7.0 MAIN 07/03/2025 11:27:46 PAGE 5
217 123 ,
218 124 ,
219 125 ,
220 126 ,
221 127 ,
222 128 ,
223 129 ,
224 130 ,
225 130 ,
226 131 ,
227 132 ,
228 133 ,
229 134 ,
230 135 ,
231 136 ,
232 137 ,
233 138 ,
234 139 ,
235 140 ,
236 141 ,
237 142 ,
238 143 ,
239 144 ,
240 145 ,
241 146 ,
242 147 ,
243 148 ,
244 149 ,
245 149 ,
246 150 ,
247 151 ,
248 152 ,
249 153 ,
250 154 ,
251 155 ,
252 156 ,
253 157 ,
254 158 ,
255 159 ,
256 160 ,
257 161 ,
258 162 ,
259 163 ,
260 164 ,
261 165 ,
262 166 ,
263 167 ,
264 168 ,
265 168 ,
266 169 ,
267 170 ,
268 171 ,
269 172 ,
270 173 ,
271 174 ,
272 175 ,
273 176 ,
274 177 ,
275 178 ,
276 179 ,
277 180 ,
278 181 ,
C51 COMPILER V9.60.7.0 MAIN 07/03/2025 11:27:46 PAGE 6
279 182 ,
280 183 ,
281 184 ,
282 185 ,
283 186 ,
284 186 ,
285 187 ,
286 188 ,
287 189 ,
288 190 ,
289 191 ,
290 192 ,
291 193 ,
292 194 ,
293 195 ,
294 196 ,
295 197 ,
296 198 ,
297 199 ,
298 200 ,
299 201 ,
300 202 ,
301 203 ,
302 204 ,
303 205 ,
304 205 ,
305 206 ,
306 207 ,
307 208 ,
308 209 ,
309 210 ,
310 211 ,
311 212 ,
312 213 ,
313 214 ,
314 215 ,
315 216 ,
316 217 ,
317 218 ,
318 219 ,
319 220 ,
320 221 ,
321 222 ,
322 223 ,
323 224 ,
324 224 ,
325 225 ,
326 226 ,
327 227 ,
328 228 ,
329 229 ,
330 230 ,
331 231 ,
332 232 ,
333 233 ,
334 234 ,
335 235 ,
336 236 ,
337 237 ,
338 238 ,
339 239 ,
340 239,
C51 COMPILER V9.60.7.0 MAIN 07/03/2025 11:27:46 PAGE 7
341 240,
342 240,
343 };
344 void main(void)
345 {
346 1 unsigned long int addr=0;
347 1 unsigned char send_times = 0;
348 1 #ifdef LVD_RST_ENABLE
349 1 LVDCON = 0xE3; //设置LVD复位电压为2.0V
350 1 #endif
351 1
352 1 #ifdef UART0_EN
Uart0_Initial(UART0_BAUTRATE);
#endif
355 1
356 1 //看门狗时钟源为IRCL
357 1 CKCON |= ILCKE; //使能IRCL
358 1 WDCON = WDTS(WDTS_IRCL) | WDRE(WDRE_reset); //设置看门狗时钟源为ILCKE,模式为复位模式
359 1 WDVTHH = 0; //看门狗复位阈值高八位设置 当前值为5s
360 1 WDVTHL = 75; //看门狗复位阈值低八位设置
361 1 WDFLG = 0xA5;
362 1
363 1 EA = 1;
364 1
365 1 TS_init();
366 1
367 1 P32F = OUTPUT; //P00设置为推挽输出模式
368 1 P32=0;
369 1
370 1 addr = (unsigned int)Read_32bit_UID(); //获取遥控ID
371 1 D0 = (unsigned char)(addr >> 8);
372 1 D1 = (unsigned char)(addr);
373 1
374 1 Yaokong_Data[0] = D1;
375 1 Yaokong_Data[1] = D0;
376 1
377 1 TMOD = (TMOD&0xFC)|0x00; //模式选择: 定时器0,模式0。
378 1 TH0 = TH_VAL; //高8位装初值
379 1 TL0 = TL_VAL; //低8位装初值
380 1
381 1 TR0 = 0; //定时器0使能
382 1 ET0 = 1; //定时器0中断使能
383 1 PT0 = 0; //设置定时器0中断优先级为低优先级
384 1
385 1 while(1)
386 1 {
387 2 TS_Action();
388 2 if(WheelSliderPosition != -1)
389 2 {
390 3 flagSend = 1;
391 3 flagStart = 0;
392 3 //当WheelSliderPosition不等于-1时, 表示滑条或圆环有触摸事件发生。WheelSliderPosition的值表示滑条或圆环
-的位置。
393 3 send_times = 1;
394 3 valueSend=rf_data[ WheelSliderPosition];//0-240
395 3 valueSend += 15;//15-255
396 3 }
397 2
398 2 if(KeysFlagSN != 0)
399 2 {
400 3 flagSend = 1;
401 3 flagStart = 0;
C51 COMPILER V9.60.7.0 MAIN 07/03/2025 11:27:46 PAGE 8
402 3 switch(KeysFlagSN)
403 3 {
404 4 case 0x0001:
405 4 valueSend = 0x05;
406 4 break;
407 4 case 0x0002:
408 4 valueSend = 0x0c;
409 4 break;
410 4 case 0x0004:
411 4 valueSend = 0x0a;
412 4 break;
413 4 case 0x0008:
414 4 valueSend = 0x0b;
415 4 break;
416 4 case 0x0010:
417 4 valueSend = 0x09;
418 4 break;
419 4 case 0x0020:
420 4 valueSend = 0x07;
421 4 break;
422 4 case 0x0040:
423 4 valueSend = 0x03;
424 4 break;
425 4 case 0x0080:
426 4 valueSend = 0x01;
427 4 break;
428 4 default:
429 4 flagSend = 0;
430 4 break;
431 4 }
432 3 }
433 2
434 2 if(WheelSliderPosition == -1&&KeysFlagSN == 0)
435 2 {
436 3 flagStart = 1;
437 3 }
438 2
439 2
440 2
441 2
442 2
443 2
444 2 #if GENERATE_TS_KEY_EN
/*************************************************************************************************
变量TS_Key是根据KeysFlagSN得到的按键信息,以下为按键产生的过程:
|---------------------------------------------------------------------------------------------------------
---------------------------|
| 单键:以K1为例,K1按键产生的流程如下所示: |
| |
| |---> K1|KEY_BREAK(短按松开) |
| K1(按下)--| |
| |---> K1|KEY_LONG_START(长按大约1秒)---> K1|KEY_LONG(一直长按,约每300ms产生一次长按键)---->K1|KEY
-_LONG_BREAK(长按松开) |
| ^ | |
| | | |
| |----------<-----------<------------<--------------| |
|---------------------------------------------------------------------------------------------------------
---------------------------|
|---------------------------------------------------------------------------------------------------------
---------------------------------------------------------------|
| |
C51 COMPILER V9.60.7.0 MAIN 07/03/2025 11:27:46 PAGE 9
| 复合键:以K1(K1=0x0001),K2(K2=0x0002)为例, 当K1K2同时按下时,产生按键为(K1<<5)|K2,即0x22, 产生按键的
-流程如下所示: |
| |
| |---> ((K1<<5)|K2)|KEY_BREAK(短按松开) |
| (K1<<5)|K2(按下)--| |
| |---> ((K1<<5)|K2)|KEY_LONG_START(长按大约1秒)---> ((K1<<5)|K2)|KEY_LONG(一直长按,约每300ms产
-ぐ醇)---->((K1<<5)|K2)|KEY_LONG_BREAK(长按松开) |
| ^ | |
| | | |
| |---------<-------------<----------------<----------------|
- |
|---------------------------------------------------------------------------------------------------------
---------------------------------------------------------------|
注意:由于复合键按下时,软件不一定同时检测到双键,而是先检测到单键按下,例如先检测到K1,此时会先产生K1键,
-等到检测到K2也按
下时,才会产生按键(K1<<5)|K2,检测到双键后,如果双键一直按下,会产生((K1<<5)|K2)|KEY_LONG_START和((K1<<5)|
-K2)|KEY_LONG,如果
有一个键先松手,会停止产生按键, 等到双键都松开时,才会产生((K1<<5)|K2)|KEY_BREAK(短按松开)或((K1<<5)|K2)|
-KEY_LONG_BREAK(长按松开)
*************************************************************************************************/
if(TS_Key != 0)
{
switch(TS_Key)
{
//单按键消息
case K1:
// valueSend = 0x05; //K1短按产生的按键消息
break;
case (K1|KEY_BREAK): flagNoPress = 1; //K1短按松手产生的按键消息
break;
case (K1|KEY_LONG_START): longPressFlag=1;//K1长按开始产生的消息(长按约1秒时产生)
break;
case (K1|KEY_LONG): //K1长按产生的消息(每隔约300ms产生一次)
break;
case (K1|KEY_LONG_BREAK): longPressFlag=0;//K1长按松手产生的消息
break;
//单按键消息
case K2: //K1短按产生的按键消息
// valueSend = 0x0c;
break;
case (K2|KEY_BREAK): flagNoPress = 1; //K1短按松手产生的按键消息
break;
case (K2|KEY_LONG_START): longPressFlag=1;//K1长按开始产生的消息(长按约1秒时产生)
break;
case (K2|KEY_LONG): //K1长按产生的消息(每隔约300ms产生一次)
break;
case (K2|KEY_LONG_BREAK):longPressFlag=0; //K1长按松手产生的消息
break;
//单按键消息
case K3: //K1短按产生的按键消息
// valueSend = 0x0a;
break;
case (K3|KEY_BREAK): flagNoPress = 1; //K1短按松手产生的按键消息
break;
case (K3|KEY_LONG_START): longPressFlag=1;//K1长按开始产生的消息(长按约1秒时产生)
break;
case (K3|KEY_LONG): //K1长按产生的消息(每隔约300ms产生一次)
break;
case (K3|KEY_LONG_BREAK): longPressFlag=0;///K1长按松手产生的消息
break;
//单按键消息
C51 COMPILER V9.60.7.0 MAIN 07/03/2025 11:27:46 PAGE 10
case K4: //K1短按产生的按键消息
// valueSend = 0x0b;
break;
case (K4|KEY_BREAK): flagNoPress = 1; //K1短按松手产生的按键消息
flagStart = 1;
break;
case (K4|KEY_LONG_START):longPressFlag=1; //K1长按开始产生的消息(长按约1秒时产生)
valueSend = 0x0b;
flagStart = 1;
break;
case (K4|KEY_LONG): //K1长按产生的消息(每隔约300ms产生一次)
valueSend = 0x0b;
flagStart = 1;
break;
case (K4|KEY_LONG_BREAK):longPressFlag=0;//K1长按松手产生的消息
break;
//单按键消息
case K5: //K1短按产生的按键消息
// valueSend = 0x09;
break;
case (K5|KEY_BREAK): flagNoPress = 1; //K1短按松手产生的按键消息
break;
case (K5|KEY_LONG_START):longPressFlag=1; //K1长按开始产生的消息(长按约1秒时产生)
break;
case (K5|KEY_LONG): //K1长按产生的消息(每隔约300ms产生一次)
break;
case (K5|KEY_LONG_BREAK):longPressFlag=0; //K1长按松手产生的消息
break;
//单按键消息
case K6: //K1短按产生的按键消息
// valueSend = 0x07;
break;
case (K6|KEY_BREAK): flagNoPress = 1; //K1短按松手产生的按键消息
break;
case (K6|KEY_LONG_START): longPressFlag=1;//K1长按开始产生的消息(长按约1秒时产生)
break;
case (K6|KEY_LONG): //K1长按产生的消息(每隔约300ms产生一次)
break;
case (K6|KEY_LONG_BREAK):longPressFlag=0; //K1长按松手产生的消息
break;
//单按键消息
case K7: //K1短按产生的按键消息
// valueSend = 0x03;
break;
case (K7|KEY_BREAK): flagNoPress = 1; //K1短按松手产生的按键消息
break;
case (K7|KEY_LONG_START):longPressFlag=1; //K1长按开始产生的消息(长按约1秒时产生)
break;
case (K7|KEY_LONG): //K1长按产生的消息(每隔约300ms产生一次)
break;
case (K7|KEY_LONG_BREAK): longPressFlag=0;//K1长按松手产生的消息
break;
//单按键消息
case K8: //K1短按产生的按键消息
// valueSend = 0x01;
break;
case (K8|KEY_BREAK): flagNoPress = 1; //K1短按松手产生的按键消息
break;
case (K8|KEY_LONG_START): longPressFlag=1;//K1长按开始产生的消息(长按约1秒时产生)
break;
case (K8|KEY_LONG): //K1长按产生的消息(每隔约300ms产生一次)
break;
C51 COMPILER V9.60.7.0 MAIN 07/03/2025 11:27:46 PAGE 11
case (K8|KEY_LONG_BREAK): longPressFlag=0;//K1长按松手产生的消息
break;
#if GENERATE_DOUBLE_KEY_EN
//复合键消息
case (K1<<5)|K2: //K1和K2同时按下时产生的按键消息
break;
case ((K1<<5)|K2)|KEY_BREAK: //K1和K2短按松手产生的按键消息
break;
case ((K1<<5)|K2)|KEY_LONG_START: //K1和K2长按开始产生的按键消息(长按约1秒时产生)
break;
case ((K1<<5)|K2)|KEY_LONG: //K1和K2长按产生的消息(每隔约300ms产生一次)
break;
case ((K1<<5)|K2)|KEY_LONG_BREAK: //K1和K2长按松手产生的消息
break;
#endif
}
}
#endif
595 2
596 2
597 2
598 2
599 2
600 2 if(flagSend==1)//短按
601 2 {
602 3 flagSend = 0;
603 3 // flagStart = 1;
604 3 //
605 3 // RF_send(send_times);
606 3 TR0 = 1; //定时器0使能
607 3 Yaokong_Data[2] = valueSend;
608 3 }
609 2
610 2 }
611 1 }
612 #endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 436 ----
CONSTANT SIZE = 255 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 9
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 8 WARNING(S), 0 ERROR(S)