Files
r2_int_1/lst/main.lst
T
moyuhai 02f1638ef2 V1.0
2026-06-12 09:12:35 +08:00

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