Files
r3_delay_3/lst/main.lst
T
2025-07-07 10:41:49 +08:00

697 lines
28 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)