fix:修复调光时间BUG

解决调光时间一样的情况下,调光亮与调光灭的实际调光时间不一致问题
This commit is contained in:
caocong
2025-12-15 20:48:52 +08:00
commit 2dd675869a
41 changed files with 15313 additions and 0 deletions

File diff suppressed because it is too large Load Diff

97
Listings/GPIO.lst Normal file
View File

@@ -0,0 +1,97 @@
C51 COMPILER V9.01 GPIO 12/15/2025 20:45:03 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE GPIO
OBJECT MODULE PLACED IN .\Objects\GPIO.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE GPIO.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\GPIO
-.lst) OBJECT(.\Objects\GPIO.obj)
line level source
1 #include "GPIO.h"
2
3 //========================================================================
4 // <20><><EFBFBD><EFBFBD>: u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx)
5 // <20><><EFBFBD><EFBFBD>: <20><>ʼ<EFBFBD><CABC>IO<49><4F>.
6 // <20><><EFBFBD><EFBFBD>: GPIOx: <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD>,<2C><><EFBFBD>ο<EFBFBD>timer.h<><68><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>.
7 // <20><><EFBFBD><EFBFBD>: <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>0, <20>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1,<2C><><EFBFBD>󷵻<EFBFBD>2.
8 // <20>汾: V1.0, 2012-10-22
9 //========================================================================
10 u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx)
11 {
12 1 if(GPIO > GPIO_P7) return 1; //<2F>ղ<EFBFBD><D5B2><EFBFBD>
13 1 if(GPIOx->Mode > GPIO_OUT_PP) return 2; //<2F><><EFBFBD><EFBFBD>
14 1 if(GPIO == GPIO_P0)
15 1 {
16 2 if(GPIOx->Mode == GPIO_PullUp) P0M1 &= ~GPIOx->Pin, P0M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
17 2 if(GPIOx->Mode == GPIO_HighZ) P0M1 |= GPIOx->Pin, P0M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
18 2 if(GPIOx->Mode == GPIO_OUT_OD) P0M1 |= GPIOx->Pin, P0M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
19 2 if(GPIOx->Mode == GPIO_OUT_PP) P0M1 &= ~GPIOx->Pin, P0M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
20 2 }
21 1 if(GPIO == GPIO_P1)
22 1 {
23 2 if(GPIOx->Mode == GPIO_PullUp) P1M1 &= ~GPIOx->Pin, P1M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
24 2 if(GPIOx->Mode == GPIO_HighZ) P1M1 |= GPIOx->Pin, P1M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
25 2 if(GPIOx->Mode == GPIO_OUT_OD) P1M1 |= GPIOx->Pin, P1M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
26 2 if(GPIOx->Mode == GPIO_OUT_PP) P1M1 &= ~GPIOx->Pin, P1M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
27 2 }
28 1 if(GPIO == GPIO_P2)
29 1 {
30 2 if(GPIOx->Mode == GPIO_PullUp) P2M1 &= ~GPIOx->Pin, P2M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
31 2 if(GPIOx->Mode == GPIO_HighZ) P2M1 |= GPIOx->Pin, P2M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
32 2 if(GPIOx->Mode == GPIO_OUT_OD) P2M1 |= GPIOx->Pin, P2M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
33 2 if(GPIOx->Mode == GPIO_OUT_PP) P2M1 &= ~GPIOx->Pin, P2M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
34 2 }
35 1 if(GPIO == GPIO_P3)
36 1 {
37 2 if(GPIOx->Mode == GPIO_PullUp) P3M1 &= ~GPIOx->Pin, P3M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
38 2 if(GPIOx->Mode == GPIO_HighZ) P3M1 |= GPIOx->Pin, P3M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
39 2 if(GPIOx->Mode == GPIO_OUT_OD) P3M1 |= GPIOx->Pin, P3M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
40 2 if(GPIOx->Mode == GPIO_OUT_PP) P3M1 &= ~GPIOx->Pin, P3M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
41 2 }
42 1 if(GPIO == GPIO_P4)
43 1 {
44 2 if(GPIOx->Mode == GPIO_PullUp) P4M1 &= ~GPIOx->Pin, P4M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
45 2 if(GPIOx->Mode == GPIO_HighZ) P4M1 |= GPIOx->Pin, P4M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
46 2 if(GPIOx->Mode == GPIO_OUT_OD) P4M1 |= GPIOx->Pin, P4M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
47 2 if(GPIOx->Mode == GPIO_OUT_PP) P4M1 &= ~GPIOx->Pin, P4M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
48 2 }
49 1 if(GPIO == GPIO_P5)
50 1 {
51 2 if(GPIOx->Mode == GPIO_PullUp) P5M1 &= ~GPIOx->Pin, P5M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
52 2 if(GPIOx->Mode == GPIO_HighZ) P5M1 |= GPIOx->Pin, P5M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
53 2 if(GPIOx->Mode == GPIO_OUT_OD) P5M1 |= GPIOx->Pin, P5M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
54 2 if(GPIOx->Mode == GPIO_OUT_PP) P5M1 &= ~GPIOx->Pin, P5M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
C51 COMPILER V9.01 GPIO 12/15/2025 20:45:03 PAGE 2
55 2 }
56 1 if(GPIO == GPIO_P6)
57 1 {
58 2 if(GPIOx->Mode == GPIO_PullUp) P6M1 &= ~GPIOx->Pin, P6M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
59 2 if(GPIOx->Mode == GPIO_HighZ) P6M1 |= GPIOx->Pin, P6M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
60 2 if(GPIOx->Mode == GPIO_OUT_OD) P6M1 |= GPIOx->Pin, P6M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
61 2 if(GPIOx->Mode == GPIO_OUT_PP) P6M1 &= ~GPIOx->Pin, P6M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
62 2 }
63 1 if(GPIO == GPIO_P7)
64 1 {
65 2 if(GPIOx->Mode == GPIO_PullUp) P7M1 &= ~GPIOx->Pin, P7M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
66 2 if(GPIOx->Mode == GPIO_HighZ) P7M1 |= GPIOx->Pin, P7M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
67 2 if(GPIOx->Mode == GPIO_OUT_OD) P7M1 |= GPIOx->Pin, P7M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
68 2 if(GPIOx->Mode == GPIO_OUT_PP) P7M1 &= ~GPIOx->Pin, P7M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
69 2 }
70 1 return 0; //<2F>ɹ<EFBFBD>
71 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 596 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

575
Listings/PWM15bit.lst Normal file
View File

@@ -0,0 +1,575 @@
C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE PWM15BIT
OBJECT MODULE PLACED IN .\Objects\PWM15bit.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE PWM15bit.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\
-PWM15bit.lst) OBJECT(.\Objects\PWM15bit.obj)
line level source
1 /*---------------------------------------------------------------------*/
2 /* --- STC MCU Limited ------------------------------------------------*/
3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/
4 /* --- Mobile: (86)13922805190 ----------------------------------------*/
5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
7 /* --- Web: www.STCMCU.com --------------------------------------------*/
8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/
9 /* --- QQ: 800003751 -------------------------------------------------*/
10 /* <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ô˴<C3B4><CBB4><EFBFBD>,<2C><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>STC<54><43><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD> */
11 /*---------------------------------------------------------------------*/
12
13 #include "PWM15bit.h"
14
15 u16 code PWMxCR[48] = {
16 0xff14, /* PWM00CR */
17 0xff1c, /* PWM01CR */
18 0xff24, /* PWM02CR */
19 0xff2c, /* PWM03CR */
20 0xff34, /* PWM04CR */
21 0xff3c, /* PWM05CR */
22 0xff44, /* PWM06CR */
23 0xff4c, /* PWM07CR */
24 0xff64, /* PWM10CR */
25 0xff6c, /* PWM11CR */
26 0xff74, /* PWM12CR */
27 0xff7c, /* PWM13CR */
28 0xff84, /* PWM14CR */
29 0xff8c, /* PWM15CR */
30 0xff94, /* PWM16CR */
31 0xff9c, /* PWM17CR */
32 0xffb4, /* PWM20CR */
33 0xffbc, /* PWM21CR */
34 0xffc4, /* PWM22CR */
35 0xffcc, /* PWM23CR */
36 0xffd4, /* PWM24CR */
37 0xffdc, /* PWM25CR */
38 0xffe4, /* PWM26CR */
39 0xffec, /* PWM27CR */
40 0xfc14, /* PWM30CR */
41 0xfc1c, /* PWM31CR */
42 0xfc24, /* PWM32CR */
43 0xfc2c, /* PWM33CR */
44 0xfc34, /* PWM34CR */
45 0xfc3c, /* PWM35CR */
46 0xfc44, /* PWM36CR */
47 0xfc4c, /* PWM37CR */
48 0xfc64, /* PWM40CR */
49 0xfc6c, /* PWM41CR */
50 0xfc74, /* PWM42CR */
51 0xfc7c, /* PWM43CR */
52 0xfc84, /* PWM44CR */
53 0xfc8c, /* PWM45CR */
54 0xfc94, /* PWM46CR */
C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 2
55 0xfc9c, /* PWM47CR */
56 0xfcb4, /* PWM50CR */
57 0xfcbc, /* PWM51CR */
58 0xfcc4, /* PWM52CR */
59 0xfccc, /* PWM53CR */
60 0xfcd4, /* PWM54CR */
61 0xfcdc, /* PWM55CR */
62 0xfce4, /* PWM56CR */
63 0xfcec, /* PWM57CR */
64 };
65
66 u16 code PWMxT1[48] = {
67 0xff10, /* PWM00T1 */
68 0xff18, /* PWM01T1 */
69 0xff20, /* PWM02T1 */
70 0xff28, /* PWM03T1 */
71 0xff30, /* PWM04T1 */
72 0xff38, /* PWM05T1 */
73 0xff40, /* PWM06T1 */
74 0xff48, /* PWM07T1 */
75 0xff60, /* PWM10T1 */
76 0xff68, /* PWM11T1 */
77 0xff70, /* PWM12T1 */
78 0xff78, /* PWM13T1 */
79 0xff80, /* PWM14T1 */
80 0xff88, /* PWM15T1 */
81 0xff90, /* PWM16T1 */
82 0xff98, /* PWM17T1 */
83 0xffb0, /* PWM20T1 */
84 0xffb8, /* PWM21T1 */
85 0xffc0, /* PWM22T1 */
86 0xffc8, /* PWM23T1 */
87 0xffd0, /* PWM24T1 */
88 0xffd8, /* PWM25T1 */
89 0xffe0, /* PWM26T1 */
90 0xffe8, /* PWM27T1 */
91 0xfc10, /* PWM30T1 */
92 0xfc18, /* PWM31T1 */
93 0xfc20, /* PWM32T1 */
94 0xfc28, /* PWM33T1 */
95 0xfc30, /* PWM34T1 */
96 0xfc38, /* PWM35T1 */
97 0xfc40, /* PWM36T1 */
98 0xfc48, /* PWM37T1 */
99 0xfc60, /* PWM40T1 */
100 0xfc68, /* PWM41T1 */
101 0xfc70, /* PWM42T1 */
102 0xfc78, /* PWM43T1 */
103 0xfc80, /* PWM44T1 */
104 0xfc88, /* PWM45T1 */
105 0xfc90, /* PWM46T1 */
106 0xfc98, /* PWM47T1 */
107 0xfcb0, /* PWM50T1 */
108 0xfcb8, /* PWM51T1 */
109 0xfcc0, /* PWM52T1 */
110 0xfcc8, /* PWM53T1 */
111 0xfcd0, /* PWM54T1 */
112 0xfcd8, /* PWM55T1 */
113 0xfce0, /* PWM56T1 */
114 0xfce8, /* PWM57T1 */
115 };
116
C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 3
117 u16 code PWMxT2[48] = {
118 0xff12, /* PWM00T2 */
119 0xff1a, /* PWM01T2 */
120 0xff22, /* PWM02T2 */
121 0xff2a, /* PWM03T2 */
122 0xff32, /* PWM04T2 */
123 0xff3a, /* PWM05T2 */
124 0xff42, /* PWM06T2 */
125 0xff4a, /* PWM07T2 */
126 0xff62, /* PWM10T2 */
127 0xff6a, /* PWM11T2 */
128 0xff72, /* PWM12T2 */
129 0xff7a, /* PWM13T2 */
130 0xff82, /* PWM14T2 */
131 0xff8a, /* PWM15T2 */
132 0xff92, /* PWM16T2 */
133 0xff9a, /* PWM17T2 */
134 0xffb2, /* PWM20T2 */
135 0xffba, /* PWM21T2 */
136 0xffc2, /* PWM22T2 */
137 0xffca, /* PWM23T2 */
138 0xffd2, /* PWM24T2 */
139 0xffda, /* PWM25T2 */
140 0xffe2, /* PWM26T2 */
141 0xffea, /* PWM27T2 */
142 0xfc12, /* PWM30T2 */
143 0xfc1a, /* PWM31T2 */
144 0xfc22, /* PWM32T2 */
145 0xfc2a, /* PWM33T2 */
146 0xfc32, /* PWM34T2 */
147 0xfc3a, /* PWM35T2 */
148 0xfc42, /* PWM36T2 */
149 0xfc4a, /* PWM37T2 */
150 0xfc62, /* PWM40T2 */
151 0xfc6a, /* PWM41T2 */
152 0xfc72, /* PWM42T2 */
153 0xfc7a, /* PWM43T2 */
154 0xfc82, /* PWM44T2 */
155 0xfc8a, /* PWM45T2 */
156 0xfc92, /* PWM46T2 */
157 0xfc9a, /* PWM47T2 */
158 0xfcb2, /* PWM50T2 */
159 0xfcba, /* PWM51T2 */
160 0xfcc2, /* PWM52T2 */
161 0xfcca, /* PWM53T2 */
162 0xfcd2, /* PWM54T2 */
163 0xfcda, /* PWM55T2 */
164 0xfce2, /* PWM56T2 */
165 0xfcea, /* PWM57T2 */
166 };
167
168 u16 code PWMxHLD[48] = {
169 0xff15, /* PWM00HLD */
170 0xff1d, /* PWM01HLD */
171 0xff25, /* PWM02HLD */
172 0xff2d, /* PWM03HLD */
173 0xff35, /* PWM04HLD */
174 0xff3d, /* PWM05HLD */
175 0xff45, /* PWM06HLD */
176 0xff4d, /* PWM07HLD */
177 0xff65, /* PWM10HLD */
178 0xff6d, /* PWM11HLD */
C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 4
179 0xff75, /* PWM12HLD */
180 0xff7d, /* PWM13HLD */
181 0xff85, /* PWM14HLD */
182 0xff8d, /* PWM15HLD */
183 0xff95, /* PWM16HLD */
184 0xff9d, /* PWM17HLD */
185 0xffb5, /* PWM20HLD */
186 0xffbd, /* PWM21HLD */
187 0xffc5, /* PWM22HLD */
188 0xffcd, /* PWM23HLD */
189 0xffd5, /* PWM24HLD */
190 0xffdd, /* PWM25HLD */
191 0xffe5, /* PWM26HLD */
192 0xffed, /* PWM27HLD */
193 0xfc15, /* PWM30HLD */
194 0xfc1d, /* PWM31HLD */
195 0xfc25, /* PWM32HLD */
196 0xfc2d, /* PWM33HLD */
197 0xfc35, /* PWM34HLD */
198 0xfc3d, /* PWM35HLD */
199 0xfc45, /* PWM36HLD */
200 0xfc4d, /* PWM37HLD */
201 0xfc65, /* PWM40HLD */
202 0xfc6d, /* PWM41HLD */
203 0xfc75, /* PWM42HLD */
204 0xfc7d, /* PWM43HLD */
205 0xfc85, /* PWM44HLD */
206 0xfc8d, /* PWM45HLD */
207 0xfc95, /* PWM46HLD */
208 0xfc9d, /* PWM47HLD */
209 0xfcb5, /* PWM50HLD */
210 0xfcbd, /* PWM51HLD */
211 0xfcc5, /* PWM52HLD */
212 0xfccd, /* PWM53HLD */
213 0xfcd5, /* PWM54HLD */
214 0xfcdd, /* PWM55HLD */
215 0xfce5, /* PWM56HLD */
216 0xfced, /* PWM57HLD */
217 };
218
219 //========================================================================
220 // <20><><EFBFBD><EFBFBD>: u8 PWMChannelCtrl(u8 PWM_id, u8 pwm_eno, u8 pwm_ini, u8 pwm_eni, u8 pwm_ent2i, u8 pwm_ent1i)
221 // <20><><EFBFBD><EFBFBD>: PWMͨ<4D><CDA8><EFBFBD><EFBFBD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
222 // <20><><EFBFBD><EFBFBD>: PWM_id: PWMͨ<4D><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ȡֵ 0~57
223 // pwm_eno: pwm<77><6D><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, 0<><30>ΪGPIO, 1<><31>ΪPWM<57><4D><EFBFBD><EFBFBD>.
224 // pwm_ini: pwm<77><6D><EFBFBD><EFBFBD><EFBFBD>˵ij<CBB5>ʼ<EFBFBD><CABC>ƽ, 0Ϊ<30>͵<EFBFBD>ƽ, 1Ϊ<31>ߵ<EFBFBD>ƽ.
225 // pwm_eni: pwmͨ<6D><CDA8><EFBFBD>ж<EFBFBD>ʹ<EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD>, 0Ϊ<30>ر<EFBFBD>PWM<57>ж<EFBFBD>, 1Ϊʹ<CEAA><CAB9>PWM<57>ж<EFBFBD>.
226 // pwm_ent2i: pwmͨ<6D><CDA8><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD>, 0Ϊ<30>ر<EFBFBD>PWM<57>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>, 1Ϊʹ<CEAA><CAB9>PWM<57>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>.
227 // pwm_ent1i: pwmͨ<6D><CDA8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD>, 0Ϊ<30>ر<EFBFBD>PWM<57><4D>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>, 1Ϊʹ<CEAA><CAB9>PWM<57><4D>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>.
228 // <20><><EFBFBD><EFBFBD>: 0:<3A><>ȷ, 2:<3A><><EFBFBD><EFBFBD>.
229 // <20>汾: V1.0, 2020-09-22
230 //========================================================================
231 u8 PWMChannelCtrl(u8 PWM_id, u8 pwm_eno, u8 pwm_ini, u8 pwm_eni, u8 pwm_ent2i, u8 pwm_ent1i)
232 {
233 1 u8 xdata *pPWMxCR;
234 1
235 1 if(PWM_id > PWM57) return 2; //id<69><64><EFBFBD><EFBFBD>
236 1 if(pwm_eno > 1) return 2; //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
237 1 if(pwm_ini > 1) return 2; //<2F><><EFBFBD><EFBFBD><EFBFBD>˵ij<CBB5>ʼ<EFBFBD><CABC>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
238 1 if(pwm_eni > 1) return 2; //<2F>ж<EFBFBD>ʹ<EFBFBD>ܿ<EFBFBD><DCBF>ƴ<EFBFBD><C6B4><EFBFBD>
239 1 if(pwm_ent2i > 1) return 2; //<2F>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD>ܿ<EFBFBD><DCBF>ƴ<EFBFBD><C6B4><EFBFBD>
240 1 if(pwm_ent1i > 1) return 2; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD>ܿ<EFBFBD><DCBF>ƴ<EFBFBD><C6B4><EFBFBD>
C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 5
241 1
242 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չSFR(XSFR) */
243 1 pPWMxCR = (u8 *)PWMxCR[PWM_id];
244 1 *pPWMxCR = (pwm_eno << 7) | (pwm_ini << 6) | (pwm_eni << 2)| (pwm_ent2i << 1)| pwm_ent1i;
245 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չRAM(XRAM) */
246 1 return 0;
247 1 }
248
249 //========================================================================
250 // <20><><EFBFBD><EFBFBD>: u8 PWMPeriodDuty(u8 PWM_id, u16 Period, u16 dutyL, u16 dutyH)
251 // <20><><EFBFBD><EFBFBD>: PWM<57><4D><EFBFBD><EFBFBD>, ռ<>ձ<EFBFBD><D5B1><EFBFBD><EFBFBD><EFBFBD>.
252 // <20><><EFBFBD><EFBFBD>: PWM_id: PWMͨ<4D><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ȡֵ 0~57
253 // dutyL: pwm<77><6D><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽλ<C6BD><CEBB>, ȡֵ 0~0x7fff.
254 // dutyH: pwm<77><6D><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽλ<C6BD><CEBB>, ȡֵ 0~0x7fff.
255 // <20><><EFBFBD><EFBFBD>: 0:<3A><>ȷ, 2:<3A><><EFBFBD><EFBFBD>.
256 // <20>汾: V1.0, 2020-09-22
257 //========================================================================
258 u8 PWM15Duty(u8 PWM_id,u16 dutyL)
259 {
260 1 u16 xdata *pPWMxT1;
261 1 u16 xdata *pPWMxT2;
262 1
263 1 if(PWM_id > PWM57) return 2; //id<69><64><EFBFBD><EFBFBD>
264 1 if(dutyL > 0x7fff) return 2; //<2F>͵<EFBFBD>ƽʱ<C6BD><CAB1><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
265 1 //if(dutyH > 0x7fff) return 2; //<2F>ߵ<EFBFBD>ƽʱ<C6BD><CAB1><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
266 1
267 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չSFR(XSFR) */
268 1 pPWMxT1 = (u16 *)PWMxT1[PWM_id];
269 1 *pPWMxT1 = dutyL & 0x7fff;
270 1
271 1 pPWMxT2 = (u16 *)PWMxT2[PWM_id];
272 1 *pPWMxT2 = 0x0000 & 0x7fff;
273 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չRAM(XRAM) */
274 1 return 0;
275 1 }
276
277 u8 qPWM15Duty(u8 PWM_id,u16 dutyL, u16 dutyH)
278 {
279 1 u16 xdata *pPWMxT1;
280 1 u16 xdata *pPWMxT2;
281 1
282 1 if(PWM_id > PWM57) return 2; //id<69><64><EFBFBD><EFBFBD>
283 1 if(dutyL > 0x7fff) return 2; //<2F>͵<EFBFBD>ƽʱ<C6BD><CAB1><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
284 1 if(dutyH > 0x7fff) return 2; //<2F>ߵ<EFBFBD>ƽʱ<C6BD><CAB1><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
285 1
286 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չSFR(XSFR) */
287 1 pPWMxT1 = (u16 *)PWMxT1[PWM_id];
288 1 *pPWMxT1 = dutyL & 0x7fff;
289 1
290 1 pPWMxT2 = (u16 *)PWMxT2[PWM_id];
291 1 *pPWMxT2 = dutyH & 0x7fff;
292 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չRAM(XRAM) */
293 1 return 0;
294 1 }
295 //========================================================================
296 // <20><><EFBFBD><EFBFBD>: u8 PWMOutputSet(u8 PWM_id, u8 pwm_hldl, u8 pwm_hldh)
297 // <20><><EFBFBD><EFBFBD>: PWMͨ<4D><CDA8><EFBFBD><EFBFBD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
298 // <20><><EFBFBD><EFBFBD>: PWM_id: PWMͨ<4D><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ȡֵ 0~57
299 // pwm_hldl: pwmǿ<6D><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>λ, 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1ǿ<31><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽ.
300 // pwm_hldh: pwmǿ<6D><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>λ, 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1ǿ<31><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽ.
301 // <20><><EFBFBD><EFBFBD>: 0:<3A><>ȷ, 2:<3A><><EFBFBD><EFBFBD>.
302 // <20>汾: V1.0, 2020-09-22
C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 6
303 //========================================================================
304 u8 PWMLevelSet(u8 PWM_id, u8 pwm_hldl, u8 pwm_hldh)
305 {
306 1 u8 xdata *pPWMxHLD;
307 1
308 1 if(PWM_id > PWM57) return 2; //id<69><64><EFBFBD><EFBFBD>
309 1 if(pwm_hldh > 1) return 2; //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
310 1 if(pwm_hldl > 1) return 2; //<2F><><EFBFBD><EFBFBD><EFBFBD>˵ij<CBB5>ʼ<EFBFBD><CABC>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
311 1
312 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չSFR(XSFR) */
313 1 pPWMxHLD = (u8 *)PWMxHLD[PWM_id];
314 1 *pPWMxHLD = (pwm_hldh << 1) | pwm_hldl;
315 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չRAM(XRAM) */
316 1 return 0;
317 1 }
318
319 //========================================================================
320 // <20><><EFBFBD><EFBFBD>: void PWM15_Init(u8 PWM_id, PWM15_InitTypeDef *PWMx)
321 // <20><><EFBFBD><EFBFBD>: 15λ<35><CEBB>ǿ<EFBFBD><C7BF>PWM<57><4D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
322 // <20><><EFBFBD><EFBFBD>: PWM_id: PWM<57><4D><EFBFBD><EFBFBD>. ȡֵ PWM0,PWM1,PWM2,PWM3,PWM4,PWM5
323 // PWMx: <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD>,<2C><><EFBFBD>ο<EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>.
324 // <20><><EFBFBD><EFBFBD>: none.
325 // <20>汾: V1.0, 2020-09-22
326 //========================================================================
327 void PWM15_Init(u8 PWM_id, PWM15_InitTypeDef *PWMx)
328 {
329 1 if(PWM_id > PWM5) return; //id<69><64><EFBFBD><EFBFBD>
330 1
331 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չSFR(XSFR) */
332 1 if(PWM_id == PWM0)
333 1 {
334 2 if(PWMx->PWM_Enable == ENABLE) PWM15_PWM0_Enable(); //ʹ<><CAB9>PWM0
335 2 else PWM15_PWM0_Disable(); //<2F>ر<EFBFBD>PWM0
336 2 PWM0_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>, 0~15
337 2 PWM0C = PWMx->PWM_Period & 0x7fff;
338 2 if(PWMx->PWM_Counter == ENABLE) PWM15_Counter0_Enable(); //ʹ<>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>
339 2 else PWM15_Counter0_Disable(); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
340 2 }
341 1
342 1 if(PWM_id == PWM1)
343 1 {
344 2 if(PWMx->PWM_Enable == ENABLE) PWM15_PWM1_Enable(); //ʹ<><CAB9>PWM1
345 2 else PWM15_PWM1_Disable(); //<2F>ر<EFBFBD>PWM1
346 2 PWM1_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>, 0~15
347 2 PWM1C = PWMx->PWM_Period & 0x7fff;
348 2 if(PWMx->PWM_Counter == ENABLE) PWM15_Counter1_Enable(); //ʹ<>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>
349 2 else PWM15_Counter1_Disable(); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
350 2 }
351 1
352 1 if(PWM_id == PWM2)
353 1 {
354 2 if(PWMx->PWM_Enable == ENABLE) PWM15_PWM2_Enable(); //ʹ<><CAB9>PWM2
355 2 else PWM15_PWM2_Disable(); //<2F>ر<EFBFBD>PWM2
356 2 PWM2_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>, 0~15
357 2 PWM2C = PWMx->PWM_Period & 0x7fff;
358 2 if(PWMx->PWM_Counter == ENABLE) PWM15_Counter2_Enable(); //ʹ<>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>
359 2 else PWM15_Counter2_Disable(); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
360 2 }
361 1
362 1 if(PWM_id == PWM3)
363 1 {
364 2 if(PWMx->PWM_Enable == ENABLE) PWM15_PWM3_Enable(); //ʹ<><CAB9>PWM3
C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 7
365 2 else PWM15_PWM3_Disable(); //<2F>ر<EFBFBD>PWM3
366 2 PWM3_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>, 0~15
367 2 PWM3C = PWMx->PWM_Period & 0x7fff;
368 2 if(PWMx->PWM_Counter == ENABLE) PWM15_Counter3_Enable(); //ʹ<>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>
369 2 else PWM15_Counter3_Disable(); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
370 2 }
371 1
372 1 if(PWM_id == PWM4)
373 1 {
374 2 if(PWMx->PWM_Enable == ENABLE) PWM15_PWM4_Enable(); //ʹ<><CAB9>PWM4
375 2 else PWM15_PWM4_Disable(); //<2F>ر<EFBFBD>PWM4
376 2 PWM4_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>, 0~15
377 2 PWM4C = PWMx->PWM_Period & 0x7fff;
378 2 if(PWMx->PWM_Counter == ENABLE) PWM15_Counter4_Enable(); //ʹ<>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>
379 2 else PWM15_Counter4_Disable(); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
380 2 }
381 1
382 1 if(PWM_id == PWM5)
383 1 {
384 2 if(PWMx->PWM_Enable == ENABLE) PWM15_PWM5_Enable(); //ʹ<><CAB9>PWM5
385 2 else PWM15_PWM5_Disable(); //<2F>ر<EFBFBD>PWM5
386 2 PWM5_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>, 0~15
387 2 PWM5C = PWMx->PWM_Period & 0x7fff;
388 2 if(PWMx->PWM_Counter == ENABLE) PWM15_Counter5_Enable(); //ʹ<>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>
389 2 else PWM15_Counter5_Disable(); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
390 2 }
391 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չRAM(XRAM) */
392 1 }
393
394
395 //========================================================================
396 // <20><><EFBFBD><EFBFBD>: void PWM0_Handler (void) interrupt PWM0_VECTOR
397 // <20><><EFBFBD><EFBFBD>: PWM0<4D>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
398 // <20><><EFBFBD><EFBFBD>: None
399 // <20><><EFBFBD><EFBFBD>: none.
400 // <20>汾: V1.0, 2020-10-13
401 //========================================================================
402 void PWM0_Handler (void) interrupt PWM0_VECTOR
403 {
404 1 char store;
405 1 store = P_SW2;
406 1 P_SW2 |= 0x80;
407 1
408 1 if(PWMCFG01 & 0x08) //PWM0<4D>ж<EFBFBD>
409 1 {
410 2 PWMCFG01 &= ~0x08; //<2F><>PWM0<4D>жϱ<D0B6>־
411 2 // TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
412 2 }
413 1 if(PWM0IF)
414 1 {
415 2 PWM0IF = 0;
416 2 P27 = ~P27;
417 2 }
418 1 P_SW2 = store;
419 1 }
420 //========================================================================
421 // <20><><EFBFBD><EFBFBD>: void PWM1_Handler (void) interrupt PWM1_VECTOR
422 // <20><><EFBFBD><EFBFBD>: PWM1<4D>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
423 // <20><><EFBFBD><EFBFBD>: None
424 // <20><><EFBFBD><EFBFBD>: none.
425 // <20>汾: V1.0, 2020-10-13
426 //========================================================================
C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 8
427 void PWM1_Handler (void) interrupt PWM1_VECTOR
428 {
429 1 char store;
430 1 store = P_SW2;
431 1 P_SW2 |= 0x80;
432 1
433 1 if(PWMCFG01 & 0x80) //PWM1<4D>ж<EFBFBD>
434 1 {
435 2 PWMCFG01 &= ~0x80; //<2F><>PWM1<4D>жϱ<D0B6>־
436 2 // TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
437 2 }
438 1 if(PWM1IF)
439 1 {
440 2 PWM1IF = 0;
441 2 P26 = ~P26;
442 2 }
443 1 P_SW2 = store;
444 1 }
445 //========================================================================
446 // <20><><EFBFBD><EFBFBD>: void PWM2_Handler (void) interrupt PWM2_VECTOR
447 // <20><><EFBFBD><EFBFBD>: PWM2<4D>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
448 // <20><><EFBFBD><EFBFBD>: None
449 // <20><><EFBFBD><EFBFBD>: none.
450 // <20>汾: V1.0, 2020-10-13
451 //========================================================================
452 void PWM2_Handler (void) interrupt PWM2_VECTOR
453 {
454 1 char store;
455 1 store = P_SW2;
456 1 P_SW2 |= 0x80;
457 1
458 1 if(PWMCFG23 & 0x08) //PWM2<4D>ж<EFBFBD>
459 1 {
460 2 PWMCFG23 &= ~0x08; //<2F><>PWM2<4D>жϱ<D0B6>־
461 2 // TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
462 2 }
463 1 if(PWM2IF)
464 1 {
465 2 PWM2IF = 0;
466 2 P25 = ~P25;
467 2 }
468 1 P_SW2 = store;
469 1 }
470 //========================================================================
471 // <20><><EFBFBD><EFBFBD>: void PWM3_Handler (void) interrupt PWM3_VECTOR
472 // <20><><EFBFBD><EFBFBD>: PWM3<4D>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
473 // <20><><EFBFBD><EFBFBD>: None
474 // <20><><EFBFBD><EFBFBD>: none.
475 // <20>汾: V1.0, 2020-10-13
476 //========================================================================
477 void PWM3_Handler (void) interrupt PWM3_VECTOR
478 {
479 1 char store;
480 1 store = P_SW2;
481 1 P_SW2 |= 0x80;
482 1
483 1 if(PWMCFG23 & 0x80) //PWM3<4D>ж<EFBFBD>
484 1 {
485 2 PWMCFG23 &= ~0x80; //<2F><>PWM3<4D>жϱ<D0B6>־
486 2 // TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
487 2 }
488 1 if(PWM3IF)
C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 9
489 1 {
490 2 PWM3IF = 0;
491 2 P24 = ~P24;
492 2 }
493 1 P_SW2 = store;
494 1 }
495 //========================================================================
496 // <20><><EFBFBD><EFBFBD>: void PWM4_Handler (void) interrupt PWM4_VECTOR
497 // <20><><EFBFBD><EFBFBD>: PWM4<4D>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
498 // <20><><EFBFBD><EFBFBD>: None
499 // <20><><EFBFBD><EFBFBD>: none.
500 // <20>汾: V1.0, 2020-10-13
501 //========================================================================
502 void PWM4_Handler (void) interrupt PWM4_VECTOR
503 {
504 1 char store;
505 1 store = P_SW2;
506 1 P_SW2 |= 0x80;
507 1
508 1 if(PWMCFG45 & 0x08) //PWM4<4D>ж<EFBFBD>
509 1 {
510 2 PWMCFG45 &= ~0x08; //<2F><>PWM4<4D>жϱ<D0B6>־
511 2 // TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
512 2 }
513 1 if(PWM4IF)
514 1 {
515 2 PWM4IF = 0;
516 2 P23 = ~P23;
517 2 }
518 1 P_SW2 = store;
519 1 }
520 //========================================================================
521 // <20><><EFBFBD><EFBFBD>: void PWM5_Handler (void) interrupt PWM5_VECTOR
522 // <20><><EFBFBD><EFBFBD>: PWM5<4D>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
523 // <20><><EFBFBD><EFBFBD>: None
524 // <20><><EFBFBD><EFBFBD>: none.
525 // <20>汾: V1.0, 2020-10-13
526 //========================================================================
527 //void PWM5_Handler (void) interrupt PWM5_VECTOR //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD><C5B3><EFBFBD>31<33><31><EFBFBD>ɽ<EFBFBD><C9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D><><EFBFBD>
528 //{
529 // if(PWMCFG45 & 0x80) //PWM5<4D>ж<EFBFBD>
530 // {
531 // PWMCFG45 &= ~0x80; //<2F><>PWM5<4D>жϱ<D0B6>־
532 // // TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
533 // }
534 //}
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1058 ----
CONSTANT SIZE = 384 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

69
Listings/Start_Init.lst Normal file
View File

@@ -0,0 +1,69 @@
C51 COMPILER V9.01 START_INIT 12/15/2025 20:45:04 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE START_INIT
OBJECT MODULE PLACED IN .\Objects\Start_Init.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE Start_Init.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listing
-s\Start_Init.lst) OBJECT(.\Objects\Start_Init.obj)
line level source
1 #include "STC8xxxx.h"
2 #include "Start_Init.h"
3 #include "string.h"
4 #include "UART_Set.h"
5 #include "timer.h"
6 #include "pwm_control.h"
7
8 void Start_Init(void)
9 {
10 1 u8 i;
11 1 memset(&g_Usart,0,sizeof(g_Usart));
12 1 memset(&s_recv, 0, sizeof(s_recv));
13 1 memset(&g_answer,0,sizeof(g_answer));
14 1 g_Usart.lastsn=0xFF;
15 1 s_recv.B_min = 0;
16 1 s_recv.B_max = 100;
17 1 s_recv.global_brightness = 100;
18 1
19 1 for(i=0;i<12;i++)
20 1 {
21 2 s_recv.pwm_step[i] = 1;
22 2 s_recv.key_status[i] = 1;
23 2 s_recv.gradual_time[i] = 300;
24 2 }
25 1 }
26
27 //<2F><>ʱ<EFBFBD><CAB1>2<EFBFBD><32>1ms<6D><73>ʱ
28 void Timer2_Init_1ms(void)
29 {
30 1 TIM_InitTypeDef TIM_InitStructure; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
31 1 TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ, TIM_16BitAutoReload,TIM_16Bit,TI
-M_8BitAutoReload,TIM_16BitAutoReloadNoMask
32 1 TIM_InitStructure.TIM_Priority = Priority_3; //ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>(<28>͵<EFBFBD><CDB5><EFBFBD>) Priority_0,Priority_1,Priority
-_2,Priority_3
33 1 TIM_InitStructure.TIM_Interrupt = ENABLE; //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>, ENABLE<4C><45>DISABLE. (ע<><D7A2>: Timer2<72>̶<EFBFBD>Ϊ16λ<36>
<><D4B6><EFBFBD>װ, <20>жϹ̶<CFB9>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>)
34 1 TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; //ָ<><D6B8>ʱ<EFBFBD><CAB1>Դ, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_
-Ext
35 1 TIM_InitStructure.TIM_ClkOut = DISABLE; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ENABLE<4C><45>DISABLE
36 1 TIM_InitStructure.TIM_Value = 63693UL; //<2F><>ֵ,<2C><>ʱΪ1ms
37 1 TIM_InitStructure.TIM_Run = ENABLE; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>, ENABLE<4C><45>DISABLE
38 1 Timer_Inilize(Timer2,&TIM_InitStructure); //<2F><>ʼ<EFBFBD><CABC>Timer2 Timer0,Timer1,Timer2,Timer3,Timer4
39 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 168 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 8
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILER V9.01 START_INIT 12/15/2025 20:45:04 PAGE 2
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

531
Listings/UART.lst Normal file
View File

@@ -0,0 +1,531 @@
C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\Objects\UART.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE UART.C OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\UART
-.lst) OBJECT(.\Objects\UART.obj)
line level source
1 /*---------------------------------------------------------------------*/
2 /* --- STC MCU Limited ------------------------------------------------*/
3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/
4 /* --- Mobile: (86)13922805190 ----------------------------------------*/
5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
7 /* --- Web: www.STCMCU.com --------------------------------------------*/
8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/
9 /* --- QQ: 800003751 -------------------------------------------------*/
10 /* <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ô˴<C3B4><CBB4><EFBFBD>,<2C><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>STC<54><43><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD> */
11 /*---------------------------------------------------------------------*/
12
13 #include "UART.h"
14 #include "timer.h"
15
16 #ifdef UART1
17 COMx_Define COM1;
18 u8 xdata TX1_Buffer[COM_TX1_Lenth]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
19 u8 xdata RX1_Buffer[COM_RX1_Lenth]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
20 #endif
21 #ifdef UART2
COMx_Define COM2;
u8 xdata TX2_Buffer[COM_TX2_Lenth]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
u8 xdata RX2_Buffer[COM_RX2_Lenth]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
#endif
26 #ifdef UART3
27 COMx_Define COM3;
28 u8 xdata TX3_Buffer[COM_TX3_Lenth]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
29 u8 xdata RX3_Buffer[COM_RX3_Lenth]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
30 #endif
31 #ifdef UART4
COMx_Define COM4;
u8 xdata TX4_Buffer[COM_TX4_Lenth]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
u8 xdata RX4_Buffer[COM_RX4_Lenth]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
#endif
36
37 u8 UART_Configuration(u8 UARTx, COMx_InitDefine *COMx)
38 {
39 1 u8 i;
40 1 u32 j;
41 1
42 1 #ifdef UART1
43 1 if(UARTx == UART1)
44 1 {
45 2 COM1.id = 1;
46 2 COM1.TX_read = 0;
47 2 COM1.TX_write = 0;
48 2 COM1.B_TX_busy = 0;
49 2 COM1.RX_Cnt = 0;
50 2 COM1.RX_TimeOut = 0;
51 2 COM1.B_RX_OK = 0;
52 2 for(i=0; i<COM_TX1_Lenth; i++) TX1_Buffer[i] = 0;
53 2 for(i=0; i<COM_RX1_Lenth; i++) RX1_Buffer[i] = 0;
54 2
C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 2
55 2 if(COMx->UART_Priority > Priority_3) return 2; //<2F><><EFBFBD><EFBFBD>
56 2 UART1_Priority(COMx->UART_Priority); //ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>(<28>͵<EFBFBD><CDB5><EFBFBD>) Priority_0,Priority_1,Priority_2,Priority_
-3
57 2 if(COMx->UART_Mode > UART_9bit_BRTx) return 2; //ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
58 2 SCON = (SCON & 0x3f) | COMx->UART_Mode;
59 2 if((COMx->UART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //<2F>ɱ䲨<C9B1><E4B2A8><EFBFBD><EFBFBD>
60 2 {
61 3 j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //<2F><>1T<31><54><EFBFBD><EFBFBD>
62 3 if(j >= 65536UL) return 2; //<2F><><EFBFBD><EFBFBD>
63 3 j = 65536UL - j;
64 3 if(COMx->UART_BRT_Use == BRT_Timer1)
65 3 {
66 4 TR1 = 0;
67 4 AUXR &= ~0x01; //S1 BRT Use Timer1;
68 4 TMOD &= ~(1<<6); //Timer1 set As Timer
69 4 TMOD &= ~0x30; //Timer1_16bitAutoReload;
70 4 AUXR |= (1<<6); //Timer1 set as 1T mode
71 4 TH1 = (u8)(j>>8);
72 4 TL1 = (u8)j;
73 4 ET1 = 0; //<2F><>ֹ<EFBFBD>ж<EFBFBD>
74 4 TMOD &= ~0x40; //<2F><>ʱ
75 4 INT_CLKO &= ~0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
76 4 TR1 = 1;
77 4 }
78 3 else if(COMx->UART_BRT_Use == BRT_Timer2)
79 3 {
80 4 AUXR &= ~(1<<4); //Timer stop
81 4 AUXR |= 0x01; //S1 BRT Use Timer2;
82 4 AUXR &= ~(1<<3); //Timer2 set As Timer
83 4 AUXR |= (1<<2); //Timer2 set as 1T mode
84 4 TH2 = (u8)(j>>8);
85 4 TL2 = (u8)j;
86 4 IE2 &= ~(1<<2); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
87 4 AUXR |= (1<<4); //Timer run enable
88 4 }
89 3 else return 2; //<2F><><EFBFBD><EFBFBD>
90 3 }
91 2 else if(COMx->UART_Mode == UART_ShiftRight)
92 2 {
93 3 if(COMx->BaudRateDouble == ENABLE) AUXR |= (1<<5); //<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SysClk/2
94 3 else AUXR &= ~(1<<5); //<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SysClk/12
95 3 }
96 2 else if(COMx->UART_Mode == UART_9bit) //<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SysClk*2^SMOD/64
97 2 {
98 3 if(COMx->BaudRateDouble == ENABLE) PCON |= (1<<7); //<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SysClk/32
99 3 else PCON &= ~(1<<7); //<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SysClk/64
100 3 }
101 2 if(COMx->UART_Interrupt == ENABLE) ES = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
102 2 else ES = 0; //<2F><>ֹ<EFBFBD>ж<EFBFBD>
103 2 if(COMx->UART_RxEnable == ENABLE) REN = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
104 2 else REN = 0; //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
105 2 P_SW1 = (P_SW1 & 0x3f) | (COMx->UART_P_SW & 0xc0); //<2F>л<EFBFBD>IO
106 2 return 0;
107 2 }
108 1 #endif
109 1 #ifdef UART2
if(UARTx == UART2)
{
COM2.id = 2;
COM2.TX_read = 0;
COM2.TX_write = 0;
COM2.B_TX_busy = 0;
C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 3
COM2.RX_Cnt = 0;
COM2.RX_TimeOut = 0;
COM2.B_RX_OK = 0;
for(i=0; i<COM_TX2_Lenth; i++) TX2_Buffer[i] = 0;
for(i=0; i<COM_RX2_Lenth; i++) RX2_Buffer[i] = 0;
if((COMx->UART_Mode == UART_9bit_BRTx) ||(COMx->UART_Mode == UART_8bit_BRTx)) //<2F>ɱ䲨<C9B1><E4B2A8><EFBFBD><EFBFBD>
{
if(COMx->UART_Priority > Priority_3) return 2; //<2F><><EFBFBD><EFBFBD>
UART2_Priority(COMx->UART_Priority); //ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>(<28>͵<EFBFBD><CDB5><EFBFBD>) Priority_0,Priority_1,Priority_2,Priority
-_3
if(COMx->UART_Mode == UART_9bit_BRTx) S2CON |= (1<<7); //9bit
else S2CON &= ~(1<<7); //8bit
j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //<2F><>1T<31><54><EFBFBD><EFBFBD>
if(j >= 65536UL) return 2; //<2F><><EFBFBD><EFBFBD>
j = 65536UL - j;
AUXR &= ~(1<<4); //Timer stop
AUXR &= ~(1<<3); //Timer2 set As Timer
AUXR |= (1<<2); //Timer2 set as 1T mode
TH2 = (u8)(j>>8);
TL2 = (u8)j;
IE2 &= ~(1<<2); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
AUXR |= (1<<4); //Timer run enable
}
else return 2; //ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
if(COMx->UART_Interrupt == ENABLE) IE2 |= 1; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
else IE2 &= ~1; //<2F><>ֹ<EFBFBD>ж<EFBFBD>
if(COMx->UART_RxEnable == ENABLE) S2CON |= (1<<4); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else S2CON &= ~(1<<4); //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
P_SW2 = (P_SW2 & ~1) | (COMx->UART_P_SW & 0x01); //<2F>л<EFBFBD>IO
return 0;
}
#endif
148 1 #ifdef UART3
149 1 if(UARTx == UART3)
150 1 {
151 2 COM3.id = 3;
152 2 COM3.TX_read = 0;
153 2 COM3.TX_write = 0;
154 2 COM3.B_TX_busy = 0;
155 2 COM3.RX_Cnt = 0;
156 2 COM3.RX_TimeOut = 0;
157 2 COM3.B_RX_OK = 0;
158 2 for(i=0; i<COM_TX3_Lenth; i++) TX3_Buffer[i] = 0;
159 2 for(i=0; i<COM_RX3_Lenth; i++) RX3_Buffer[i] = 0;
160 2
161 2 if((COMx->UART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //<2F>ɱ䲨<C9B1><E4B2A8><EFBFBD><EFBFBD>
162 2 {
163 3 if(COMx->UART_Priority > Priority_3) return 2; //<2F><><EFBFBD><EFBFBD>
164 3 UART3_Priority(COMx->UART_Priority); //ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>(<28>͵<EFBFBD><CDB5><EFBFBD>) Priority_0,Priority_1,Priority_2,Priorit
-y_3
165 3 if(COMx->UART_Mode == UART_9bit_BRTx) S3_9bit(); //9bit
166 3 else S3_8bit(); //8bit
167 3 j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //<2F><>1T<31><54><EFBFBD><EFBFBD>
168 3 if(j >= 65536UL) return 2; //<2F><><EFBFBD><EFBFBD>
169 3 j = 65536UL - j;
170 3 if(COMx->UART_BRT_Use == BRT_Timer3)
171 3 {
172 4 S3_BRT_UseTimer3(); //S3 BRT Use Timer3;
173 4 TH3 = (u8)(j>>8);
174 4 TL3 = (u8)j;
175 4 T4T3M &= 0xf0;
C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 4
176 4 T4T3M |= 0x0a; //Timer3 set As Timer, 1T mode, Start timer3
177 4 }
178 3 else if(COMx->UART_BRT_Use == BRT_Timer2)
179 3 {
180 4 AUXR &= ~(1<<4); //Timer stop
181 4 S3_BRT_UseTimer2(); //S3 BRT Use Timer2;
182 4 AUXR &= ~(1<<3); //Timer2 set As Timer
183 4 AUXR |= (1<<2); //Timer2 set as 1T mode
184 4 TH2 = (u8)(j>>8);
185 4 TL2 = (u8)j;
186 4 IE2 &= ~(1<<2); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
187 4 AUXR |= (1<<4); //Timer run enable
188 4 }
189 3 else return 2; //<2F><><EFBFBD><EFBFBD>
190 3 }
191 2 else return 2; //ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
192 2 if(COMx->UART_Interrupt == ENABLE) S3_Int_Enable(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
193 2 else S3_Int_Disable(); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
194 2 if(COMx->UART_RxEnable == ENABLE) S3_RX_Enable(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
195 2 else S3_RX_Disable(); //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
196 2 P_SW2 = (P_SW2 & ~2) | (COMx->UART_P_SW & 0x02); //<2F>л<EFBFBD>IO
197 2 return 0;
198 2 }
199 1 #endif
200 1 #ifdef UART4
if(UARTx == UART4)
{
COM4.id = 3;
COM4.TX_read = 0;
COM4.TX_write = 0;
COM4.B_TX_busy = 0;
COM4.RX_Cnt = 0;
COM4.RX_TimeOut = 0;
COM4.B_RX_OK = 0;
for(i=0; i<COM_TX4_Lenth; i++) TX4_Buffer[i] = 0;
for(i=0; i<COM_RX4_Lenth; i++) RX4_Buffer[i] = 0;
if((COMx->UART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //<2F>ɱ䲨<C9B1><E4B2A8><EFBFBD><EFBFBD>
{
if(COMx->UART_Priority > Priority_3) return 2; //<2F><><EFBFBD><EFBFBD>
UART4_Priority(COMx->UART_Priority); //ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>(<28>͵<EFBFBD><CDB5><EFBFBD>) Priority_0,Priority_1,Priority_2,Priority
-_3
if(COMx->UART_Mode == UART_9bit_BRTx) S4_9bit(); //9bit
else S4_8bit(); //8bit
j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //<2F><>1T<31><54><EFBFBD><EFBFBD>
if(j >= 65536UL) return 2; //<2F><><EFBFBD><EFBFBD>
j = 65536UL - j;
if(COMx->UART_BRT_Use == BRT_Timer4)
{
S4_BRT_UseTimer4(); //S4 BRT Use Timer4;
TH4 = (u8)(j>>8);
TL4 = (u8)j;
T4T3M &= 0x0f;
T4T3M |= 0xa0; //Timer4 set As Timer, 1T mode, Start timer4
}
else if(COMx->UART_BRT_Use == BRT_Timer2)
{
AUXR &= ~(1<<4); //Timer stop
S4_BRT_UseTimer2(); //S4 BRT Use Timer2;
AUXR &= ~(1<<3); //Timer2 set As Timer
AUXR |= (1<<2); //Timer2 set as 1T mode
TH2 = (u8)(j>>8);
C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 5
TL2 = (u8)j;
IE2 &= ~(1<<2); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
AUXR |= (1<<4); //Timer run enable
}
else return 2; //<2F><><EFBFBD><EFBFBD>
}
else return 2; //ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
if(COMx->UART_Interrupt == ENABLE) S4_Int_Enable(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
else S4_Int_Disable(); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
if(COMx->UART_RxEnable == ENABLE) S4_RX_Enable(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else S4_RX_Disable(); //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
P_SW2 = (P_SW2 & ~4) | (COMx->UART_P_SW & 0x04); //<2F>л<EFBFBD>IO
return 0;
}
#endif
252 1 return 2; //<2F><><EFBFBD><EFBFBD>
253 1 }
254
255 /*********************************************************/
256
257 /********************* UART1 <20><><EFBFBD><EFBFBD> ************************/
258 #ifdef UART1
259 void TX1_write2buff(u8 dat) //д<><EFBFBD>ͻ<EFBFBD><CDBB>壬ָ<E5A3AC><D6B8>+1
260 {
261 1 TX1_Buffer[COM1.TX_write] = dat; //װ<><D7B0><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
262 1 if(++COM1.TX_write >= COM_TX1_Lenth) COM1.TX_write = 0;
263 1
264 1 if(COM1.B_TX_busy == 0) //<2F><><EFBFBD><EFBFBD>
265 1 {
266 2 COM1.B_TX_busy = 1; //<2F><>־æ
267 2 TI = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
268 2 }
269 1 }
270
271 void PrintString1(u8 *puts)
272 {
273 1 for (; *puts != 0; puts++) TX1_write2buff(*puts); //<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9>0<EFBFBD><30><EFBFBD><EFBFBD>
274 1 }
275 void Printbuffer1(u8 *puts,u8 len)
276 {
277 1 u8 i;
278 1 for (i=0; i<len;i++) TX1_write2buff(puts[i]);
279 1 }
280
281 u8 recv_start_flag=0;
282 u32 recv_time=0;
283 void UART1_int (void) interrupt UART1_VECTOR
284 {
285 1 static u8 stage=0;
286 1 u8 dat;
287 1 if(RI)
288 1 {
289 2 RI = 0;
290 2 recv_start_flag=1;
291 2 recv_time=systick_1ms;
292 2
293 2 if(COM1.B_RX_OK == 0)
294 2 {
295 3 dat=SBUF;
296 3 if(COM1.RX_Cnt >= COM_RX1_Lenth) COM1.RX_Cnt = 0;
297 3 if(dat=='D') //<2F><><EFBFBD><EFBFBD>10<31><30>'D',<2C><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>
298 3 {
C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 6
299 4 stage++;
300 4 }
301 3 else
302 3 {
303 4 stage=0;
304 4 }
305 3 if(stage==10)
306 3 {
307 4 IAP_CONTR=0x60;
308 4 }
309 3 RX1_Buffer[COM1.RX_Cnt++] = SBUF;
310 3 COM1.RX_TimeOut = TimeOutSet1;
311 3 }
312 2 }
313 1
314 1 if(TI)
315 1 {
316 2 TI = 0;
317 2 if(COM1.TX_read != COM1.TX_write)
318 2 {
319 3 SBUF = TX1_Buffer[COM1.TX_read];
320 3 if(++COM1.TX_read >= COM_TX1_Lenth) COM1.TX_read = 0;
321 3 }
322 2 else COM1.B_TX_busy = 0;
323 2 }
324 1 }
325 #endif
326
327 /********************* UART2 <20><><EFBFBD><EFBFBD> ************************/
328 #ifdef UART2
void TX2_write2buff(u8 dat) //д<><EFBFBD>ͻ<EFBFBD><CDBB>壬ָ<E5A3AC><D6B8>+1
{
TX2_Buffer[COM2.TX_write] = dat; //װ<><D7B0><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
if(++COM2.TX_write >= COM_TX2_Lenth) COM2.TX_write = 0;
if(COM2.B_TX_busy == 0) //<2F><><EFBFBD><EFBFBD>
{
COM2.B_TX_busy = 1; //<2F><>־æ
SET_TI2(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
}
void PrintString2(u8 *puts)
{
for (; *puts != 0; puts++) TX2_write2buff(*puts); //<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9>0<EFBFBD><30><EFBFBD><EFBFBD>
}
void UART2_int (void) interrupt UART2_VECTOR
{
if(RI2)
{
CLR_RI2();
if(COM2.B_RX_OK == 0)
{
if(COM2.RX_Cnt >= COM_RX2_Lenth) COM2.RX_Cnt = 0;
RX2_Buffer[COM2.RX_Cnt++] = S2BUF;
COM2.RX_TimeOut = TimeOutSet2;
}
}
if(TI2)
{
C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 7
CLR_TI2();
if(COM2.TX_read != COM2.TX_write)
{
S2BUF = TX2_Buffer[COM2.TX_read];
if(++COM2.TX_read >= COM_TX2_Lenth) COM2.TX_read = 0;
}
else COM2.B_TX_busy = 0;
}
}
#endif
371
372 /********************* UART3 <20><><EFBFBD><EFBFBD> ************************/
373 #ifdef UART3
374 void TX3_write2buff(u8 dat) //д<><EFBFBD>ͻ<EFBFBD><CDBB>壬ָ<E5A3AC><D6B8>+1
375 {
376 1 TX3_Buffer[COM3.TX_write] = dat; //װ<><D7B0><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
377 1 if(++COM3.TX_write >= COM_TX3_Lenth) COM3.TX_write = 0;
378 1
379 1 if(COM3.B_TX_busy == 0) //<2F><><EFBFBD><EFBFBD>
380 1 {
381 2 COM3.B_TX_busy = 1; //<2F><>־æ
382 2 SET_TI3(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
383 2 }
384 1 }
385
386 void PrintString3(u8 *puts)
387 {
388 1 for (; *puts != 0; puts++) TX3_write2buff(*puts); //<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9>0<EFBFBD><30><EFBFBD><EFBFBD>
389 1 }
390
391 void Printbuffer3(u8 *puts,u8 len)
392 {
393 1 u8 i;
394 1 for (i=0; i<len;i++) TX3_write2buff(*puts++); //<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9>0<EFBFBD><30><EFBFBD><EFBFBD>
395 1 }
396
397 void UART3_int (void) interrupt UART3_VECTOR
398 {
399 1 if(RI3) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
400 1 {
401 2 recv_start_flag=1;
402 2 recv_time=systick_1ms;
403 2 CLR_RI3();
404 2 if(COM3.B_RX_OK == 0)
405 2 {
406 3 if(COM3.RX_Cnt >= COM_RX3_Lenth) COM3.RX_Cnt = 0;
407 3 RX3_Buffer[COM3.RX_Cnt++] = S3BUF;
408 3 COM3.RX_TimeOut = TimeOutSet3;
409 3 }
410 2 }
411 1
412 1 if(TI3) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
413 1 {
414 2 CLR_TI3();
415 2 if(COM3.TX_read != COM3.TX_write)
416 2 {
417 3 S3BUF = TX3_Buffer[COM3.TX_read];
418 3 if(++COM3.TX_read >= COM_TX3_Lenth) COM3.TX_read = 0;
419 3 }
420 2 else COM3.B_TX_busy = 0;
421 2 }
422 1 }
C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 8
423 #endif
424
425 /********************* UART4 <20><><EFBFBD><EFBFBD> ************************/
426 #ifdef UART4
void TX4_write2buff(u8 dat) //д<><EFBFBD>ͻ<EFBFBD><CDBB>壬ָ<E5A3AC><D6B8>+1
{
TX4_Buffer[COM4.TX_write] = dat; //װ<><D7B0><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
if(++COM4.TX_write >= COM_TX4_Lenth) COM4.TX_write = 0;
if(COM4.B_TX_busy == 0) //<2F><><EFBFBD><EFBFBD>
{
COM4.B_TX_busy = 1; //<2F><>־æ
SET_TI4(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
}
void PrintString4(u8 *puts)
{
for (; *puts != 0; puts++) TX4_write2buff(*puts); //<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9>0<EFBFBD><30><EFBFBD><EFBFBD>
}
void UART4_int (void) interrupt UART4_VECTOR
{
if(RI4)
{
CLR_RI4();
if(COM4.B_RX_OK == 0)
{
if(COM4.RX_Cnt >= COM_RX4_Lenth) COM4.RX_Cnt = 0;
RX4_Buffer[COM4.RX_Cnt++] = S4BUF;
COM4.RX_TimeOut = TimeOutSet4;
}
}
if(TI4)
{
CLR_TI4();
if(COM4.TX_read != COM4.TX_write)
{
S4BUF = TX4_Buffer[COM4.TX_read];
if(++COM4.TX_read >= COM_TX4_Lenth) COM4.TX_read = 0;
}
else COM4.B_TX_busy = 0;
}
}
#endif
469
470 /*************** <20><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *****************/
471 void UART3_config(void)
472 {
473 1 COMx_InitDefine COMx_InitStructure; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
474 1 COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //ģʽ, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,U
-ART_9bit_BRTx
475 1 COMx_InitStructure.UART_BRT_Use = BRT_Timer3; //ʹ<>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>, BRT_Timer2, BRT_Timer3 (ע<><D7A2>: <20><><EFBFBD><EFBFBD>2<EFBFBD>̶<EFBFBD>
-ʹ<><CAB9>BRT_Timer2)
476 1 COMx_InitStructure.UART_BaudRate = 115200; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 110 ~ 115200
477 1 COMx_InitStructure.UART_RxEnable = ENABLE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ENABLE<4C><45>DISABLE
478 1 COMx_InitStructure.UART_Interrupt = ENABLE; //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>, ENABLE<4C><45>DISABLE
479 1 COMx_InitStructure.UART_Priority = Priority_0; //ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>(<28>͵<EFBFBD><CDB5><EFBFBD>) Priority_0,Priority_1,Priori
-ty_2,Priority_3
480 1 COMx_InitStructure.UART_P_SW = UART3_SW_P50_P51; //<2F>л<EFBFBD><D0BB>˿<EFBFBD>, UART3_SW_P00_P01,UART3_SW_P50_P51
481 1 UART_Configuration(UART3, &COMx_InitStructure); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3 UART1,UART2,UART3,UART4
C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 9
482 1
483 1 //PrintString3("STC8 UART3 Test Programme!\r\n"); //UART3<54><33><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
484 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1347 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 128 ----
PDATA SIZE = ---- ----
DATA SIZE = 20 27
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

657
Listings/UART_Set.lst Normal file
View File

@@ -0,0 +1,657 @@
C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE UART_SET
OBJECT MODULE PLACED IN .\Objects\UART_Set.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE UART_Set.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\
-UART_Set.lst) OBJECT(.\Objects\UART_Set.obj)
line level source
1 #include "UART_Set.h"
2 #include "UART.h"
3 #include "pwm_control.h"
4 #include "string.h"
5 #include "config.h"
6 #include "timer.h"
7 #include "STC8xxxx.h"
8 #include "PWM15bit.h"
9
10 G_Usart g_Usart;
11 G_answer g_answer;
12 S_recv s_recv;
13
14 u8 debug = 0x00;
15
16
17 /*
18 <20>жϽ<D0B6><CFBD>յ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƿ<EFBFBD><C7B7>Ϸ<EFBFBD>
19 */
20 void Usart_judge_Data(void)
21 {
22 1 u8 len = 0;
23 1 u8 i, sum;
24 1 sum = 0;
25 1 g_Usart.ok_flag = 0;
26 1
27 1 if((recv_start_flag==1)&&(systick_1ms-recv_time>8))
28 1 {
29 2 recv_start_flag=0;
30 2 #if DEBUG_
{
for(i=0;i<COM1.RX_Cnt;i++)
{
g_Usart.recv_buffer[i]=RX1_Buffer[i];
}
COM1.RX_Cnt = 0;
memset(RX1_Buffer,0,sizeof(RX1_Buffer));
}
#else
40 2 {
41 3 len = COM3.RX_Cnt;
42 3 for(i=0;i<COM3.RX_Cnt;i++)
43 3 {
44 4 g_Usart.recv_buffer[i]=RX3_Buffer[i];
45 4 }
46 3 COM3.RX_Cnt = 0;
47 3 memset(RX3_Buffer,0,sizeof(RX3_Buffer));
48 3 // if(debug) Printbuffer1(g_Usart.recv_buffer,11);
49 3 }
50 2 #endif
51 2
52 2 for (i = 0; i < g_Usart.recv_buffer[UART_FMT_LEN]; i++)
53 2 {
54 3 sum += g_Usart.recv_buffer[i];
C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 2
55 3 }
56 2 if (sum == 0xff)
57 2 {
58 3 if(len == g_Usart.recv_buffer[UART_FMT_LEN])
59 3 {
60 4 if ((g_Usart.recv_buffer[UART_FMT_ADDR_RX] == ADDR_RX) && (g_Usart.recv_buffer[UART_FMT_DEV_TYPE] == D
-EV_TYPE))
61 4 {
62 5 g_Usart.Sn = g_Usart.recv_buffer[UART_FMT_TYPE]&0x0F;
63 5
64 5 if ((g_Usart.recv_buffer[UART_FMT_TYPE] & 0x40) == 0x00) //<2F><><EFBFBD>кż<D0BA><C5BC><EFBFBD>׷<EFBFBD>
65 5 {
66 6 g_Usart.ok_flag = 1; //<2F>׷<EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
67 6 }
68 5 else //<2F><><EFBFBD>к<EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD>
-<2D><><EFBFBD><EFBFBD>Ӧ<EFBFBD>øı<C3B8><C4B1><EFBFBD><EFBFBD>к<EFBFBD>
69 5 {
70 6 if (g_Usart.Sn == g_Usart.lastsn)
71 6 {
72 7 g_Usart.ok_flag = 0;
73 7 g_answer.short_answer[UART_FMT_CMD]=0xF0;
74 7 g_answer.short_answer_flag=0x01;
75 7 }
76 6 else
77 6 {
78 7 g_Usart.ok_flag = 1;
79 7 }
80 6 }
81 5 g_Usart.lastsn = g_Usart.Sn;
82 5 }
83 4 }
84 3 }
85 2 }
86 1 }
87
88 void Usart_Deal_Data(void)
89 {
90 1 u8 i;
91 1 if(g_Usart.ok_flag)
92 1 {
93 2 if(debug)
94 2 {
95 3 PrintString1("data ok");
96 3 }
97 2 switch(g_Usart.recv_buffer[UART_FMT_CMD])
98 2 {
99 3 //<2F><>ѯ״̬<D7B4><CCAC><EFBFBD><EFBFBD>
100 3 case USART_CMD_QUEST:
101 3 if(debug)
102 3 {
103 4 PrintString1("ask");
104 4 }
105 3 g_answer.long_answer[UART_FMT_CMD]=USART_CMD_QUEST_A;
106 3 g_answer.long_answer_flag=0x01;
107 3 break;
108 3 //<2F><><EFBFBD>ðٷֱ<D9B7><D6B1><EFBFBD><EFBFBD><EFBFBD>ֵ
109 3 case USART_CMD_SET_BRIGHTNESS:
110 3 g_answer.short_answer[UART_FMT_CMD]=USART_CMD_SET_BRIGHTNESS_A;
111 3 if(debug)
112 3 {
113 4 PrintString1("percent");
114 4 }
C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 3
115 3 //<2F><>һ<EFBFBD><D2BB>ʹ<EFBFBD><CAB9>λ
116 3 for (i = 0; i < 8; i++)
117 3 {
118 4 if (g_Usart.recv_buffer[7] & (1 << i))
119 4 {
120 5 s_recv.flag1[i] = 1;
121 5 s_recv.flag2[i] = 0;
122 5 s_recv.B_Ch[i] = g_Usart.recv_buffer[21 - i];
123 5
124 5 if (s_recv.B_Ch[i] < s_recv.B_min)
125 5 {
126 6 s_recv.B_Ch[i] = s_recv.B_min;
127 6 }
128 5
129 5 if (s_recv.B_Ch[i] > s_recv.B_max)
130 5 {
131 6 s_recv.B_Ch[i] = s_recv.B_max;
132 6 }
133 5
134 5 s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_Ch[i] * PWM_MAX_VALUE * s_recv.global_
-brightness / 100 / 100 * s_recv.key_status[i];
135 5 s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
136 5
137 5 s_recv.gradual_time[i] = g_Usart.recv_buffer[9] * 10; /*<2A><><EFBFBD>յĽ<D5B5><C4BD><EFBFBD>ʱ<EFBFBD><CAB1>*/
138 5 /*
139 5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
140 5 */
141 5 if (s_recv.gradual_time[i] == 0)
142 5 {
143 6 s_recv.gradual_time[i] = 1;
144 6 }
145 5
146 5 /*<2A><><EFBFBD><EFBFBD>10ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pwm<77><6D><EFBFBD><EFBFBD>ֵ*/
147 5 if (s_pwm.wanttopwm[i] > s_pwm.currpwm[i])
148 5 {
149 6 s_pwm.every_change_10ms[i] = (float)(s_pwm.wanttopwm[i] - s_pwm.currpwm[i]) / s_
-recv.gradual_time[i];
150 6 if (s_pwm.every_change_10ms[i] < 1)
151 6 {
152 7 s_pwm.every_change_10ms[i] = 1;
153 7 }
154 6 }
155 5
156 5 if (s_pwm.wanttopwm[i] < s_pwm.currpwm[i])
157 5 {
158 6 s_pwm.every_change_10ms[i] = (float)(s_pwm.currpwm[i] - s_pwm.wanttopwm[i]) / s_
-recv.gradual_time[i];
159 6 if (s_pwm.every_change_10ms[i] < 1)
160 6 {
161 7 s_pwm.every_change_10ms[i] = 1;
162 7 }
163 6 }
164 5 }
165 4 }
166 3
167 3 //<2F>ڶ<EFBFBD><DAB6><EFBFBD>ʹ<EFBFBD><CAB9>λ
168 3 for (i = 0; i < 4; i++)
169 3 {
170 4 if (g_Usart.recv_buffer[8] & (1 << i))
171 4 {
172 5 s_recv.flag1[i+8] = 1;
173 5 s_recv.flag2[i+8] = 0;
C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 4
174 5 s_recv.B_Ch[i+8] = g_Usart.recv_buffer[13 - i];
175 5
176 5 if (s_recv.B_Ch[i+8] < s_recv.B_min)
177 5 {
178 6 s_recv.B_Ch[i+8] = s_recv.B_min;
179 6 }
180 5
181 5 if (s_recv.B_Ch[i+8] > s_recv.B_max)
182 5 {
183 6 s_recv.B_Ch[i+8] = s_recv.B_max;
184 6 }
185 5
186 5 s_pwm.wanttopwm[i+8] = PWM_MAX_VALUE - s_recv.B_Ch[i+8] * PWM_MAX_VALUE * s_recv.g
-lobal_brightness / 100 / 100 * s_recv.key_status[i+8];
187 5 s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
188 5
189 5 s_recv.gradual_time[i+8] = g_Usart.recv_buffer[9] * 10; /*<2A><><EFBFBD>յĽ<D5B5><C4BD><EFBFBD>ʱ<EFBFBD><CAB1>*/
190 5
191 5 /*
192 5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
193 5 */
194 5 if (s_recv.gradual_time[i+8] == 0)
195 5 {
196 6 s_recv.gradual_time[i+8] = 1;
197 6 }
198 5
199 5 /*<2A><><EFBFBD><EFBFBD>10ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pwm<77><6D><EFBFBD><EFBFBD>ֵ*/
200 5 if (s_pwm.wanttopwm[i+8] > s_pwm.currpwm[i+8])
201 5 {
202 6 s_pwm.every_change_10ms[i+8] = (float)(s_pwm.wanttopwm[i+8] - s_pwm.currpwm[i+
-8]) / s_recv.gradual_time[i+8];
203 6 if (s_pwm.every_change_10ms[i+8] < 1)
204 6 {
205 7 s_pwm.every_change_10ms[i+8] = 1;
206 7 }
207 6 }
208 5
209 5
210 5 if (s_pwm.wanttopwm[i+8] < s_pwm.currpwm[i+8])
211 5 {
212 6 s_pwm.every_change_10ms[i+8] = (float)(s_pwm.currpwm[i+8] - s_pwm.wanttopwm[i
-+8]) / s_recv.gradual_time[i+8];
213 6 if (s_pwm.every_change_10ms[i+8] < 1)
214 6 {
215 7 s_pwm.every_change_10ms[i+8] = 1;
216 7 }
217 6 }
218 5 }
219 4 }
220 3
221 3 g_answer.short_answer_flag=0x01;
222 3 break;
223 3
224 3
225 3 //<2F><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>ѭ<EFBFBD><D1AD>
226 3 case USART_CMD_SET_MODE:
227 3 g_answer.short_answer[UART_FMT_CMD]=USART_CMD_SET_MODE_A;
228 3 if(debug)
229 3 {
230 4 PrintString1("change light");
231 4 }
232 3
C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 5
233 3 for (i = 0; i < 8; i++)
234 3 {
235 4 if (g_Usart.recv_buffer[7] & (1 << i))
236 4 {
237 5 s_recv.flag1[i] = 0;
238 5 s_recv.flag2[i] = 1;
239 5 s_recv.mode[i] = g_Usart.recv_buffer[9];
240 5 s_recv.pwm_step[i] = g_Usart.recv_buffer[11];
241 5
242 5 if (s_recv.mode[i] == 0x00)
243 5 {
244 6 if (g_Usart.recv_buffer[10] == 0x00)
245 6 {
246 7 s_recv.forward[i] = 0;
247 7 }
248 6
249 6 if (g_Usart.recv_buffer[10] == 0x01)
250 6 {
251 7 s_recv.forward[i] = 1;
252 7 }
253 6
254 6 if (g_Usart.recv_buffer[10] == 0x02) //<2F><>ת
255 6 {
256 7 if (s_recv.forward[i] == 0x01)
257 7 {
258 8 s_recv.forward[i] = 0x00;
259 8 continue; // Ϊ<><CEAA>ֹ<EFBFBD><D6B9>ת֮<D7AA><D6AE>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
260 8 }
261 7
262 7 if (s_recv.forward[i] == 0x00)
263 7 {
264 8 s_recv.forward[i] = 0x01;
265 8 continue;
266 8 }
267 7 }
268 6 }
269 5 }
270 4 }
271 3
272 3
273 3 for (i = 0; i < 4; i++)
274 3 {
275 4 if (g_Usart.recv_buffer[8] & (1 << i))
276 4 {
277 5 s_recv.flag1[i+8] = 0;
278 5 s_recv.flag2[i+8] = 1;
279 5 s_recv.mode[i+8] = g_Usart.recv_buffer[9];
280 5 s_recv.pwm_step[i+8] = g_Usart.recv_buffer[11];
281 5
282 5 if (s_recv.mode[i+8] == 0x00)
283 5 {
284 6 if (g_Usart.recv_buffer[10] == 0x00)
285 6 {
286 7 s_recv.forward[i+8] = 0;
287 7 }
288 6
289 6 if (g_Usart.recv_buffer[10] == 0x01)
290 6 {
291 7 s_recv.forward[i+8] = 1;
292 7 }
293 6
294 6 if (g_Usart.recv_buffer[10] == 0x02) //<2F><>ת
C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 6
295 6 {
296 7 if (s_recv.forward[i+8] == 0x01)
297 7 {
298 8 s_recv.forward[i+8] = 0x00;
299 8 continue; // Ϊ<><CEAA>ֹ<EFBFBD><D6B9>ת֮<D7AA><D6AE>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
300 8 }
301 7
302 7 if (s_recv.forward[i+8] == 0x00)
303 7 {
304 8 s_recv.forward[i+8] = 0x01;
305 8 continue;
306 8 }
307 7 }
308 6 }
309 5 }
310 4 }
311 3 g_answer.short_answer_flag=0x01;
312 3 break;
313 3
314 3
315 3 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
316 3 case USART_CMD_ALL_BRIGHTNESS:
317 3 g_answer.short_answer[UART_FMT_CMD]=USART_CMD_ALL_BRIGHTNESS_A;
318 3
319 3 if(debug)
320 3 {
321 4 PrintString1("global light");
322 4 }
323 3
324 3 // s_recv.changeflag = 1;
325 3 if (g_Usart.recv_buffer[7] & (1 << 5)) //ȫ<>ֿɵ<D6BF><C9B5><EFBFBD><EFBFBD><EFBFBD>
326 3 {
327 4 s_recv.B_min = g_Usart.recv_buffer[10];
328 4 for (i = 0; i < 12; i++)
329 4 {
330 5 if ( s_pwm.currvalue[i] < s_recv.B_min)
331 5 {
332 6 s_pwm.currvalue[i] = s_recv.B_min;
333 6 }
334 5 }
335 4 }
336 3
337 3 if (g_Usart.recv_buffer[7] & (1 << 6)) //ȫ<>ֿɵ<D6BF><C9B5><EFBFBD><EFBFBD><EFBFBD>
338 3 {
339 4 s_recv.B_max = g_Usart.recv_buffer[9];
340 4 for (i = 0; i < 12; i++)
341 4 {
342 5 if ( s_pwm.currvalue[i] > s_recv.B_max)
343 5 {
344 6 s_pwm.currvalue[i] = s_recv.B_max;
345 6 }
346 5 }
347 4 }
348 3
349 3 if (g_Usart.recv_buffer[7] & (1 << 7)) //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
350 3 {
351 4 s_recv.global_brightness = g_Usart.recv_buffer[8];
352 4
353 4 for (i = 0; i < 12; i++)
354 4 {
355 5 // s_pwm.wanttopwmflash[i] = PWM_MAX_VALUE - s_pwm.currvalue[i] * PWM_MAX_VALUE *
-s_recv.global_brightness / 100 / 100 * s_recv.key_status[i];
C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 7
356 5
357 5 s_recv.flag1[i] = 1;
358 5 s_recv.flag2[i] = 0;
359 5
360 5 s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_Ch[i] * PWM_MAX_VALUE * s_recv.glo
-bal_brightness / 100 / 100 * s_recv.key_status[i];
361 5 s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
362 5 if(s_pwm.wanttopwm[i] > PWM_MAX_VALUE)
363 5 {
364 6 s_pwm.wanttopwm[i] = PWM_MAX_VALUE;
365 6 }
366 5
367 5 /*<2A><><EFBFBD><EFBFBD>10ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pwm<77><6D><EFBFBD><EFBFBD>ֵ*/
368 5 if (s_pwm.wanttopwm[i] > s_pwm.currpwm[i])
369 5 {
370 6 s_pwm.every_change_10ms[i] = (float)(s_pwm.wanttopwm[i] - s_pwm.currpwm[i])
-/ s_recv.gradual_time[i];
371 6 if (s_pwm.every_change_10ms[i] < 1)
372 6 {
373 7 s_pwm.every_change_10ms[i] = 1;
374 7 }
375 6 }
376 5
377 5 if (s_pwm.wanttopwm[i] < s_pwm.currpwm[i])
378 5 {
379 6 s_pwm.every_change_10ms[i] = (float)(s_pwm.currpwm[i] - s_pwm.wanttopwm[i])
-/ s_recv.gradual_time[i];
380 6 if (s_pwm.every_change_10ms[i] < 1)
381 6 {
382 7 s_pwm.every_change_10ms[i] = 1;
383 7 }
384 6 }
385 5 }
386 4 }
387 3
388 3
389 3 g_answer.short_answer_flag=0x01;
390 3 break;
391 3
392 3
393 3 //<2F><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>״̬
394 3 case USART_CMD_SWITCH_STATUS:
395 3 g_answer.short_answer[UART_FMT_CMD]=USART_CMD_SWITCH_STATUS_A;
396 3 if(debug)
397 3 {
398 4 PrintString1("switch state");
399 4 }
400 3
401 3 for (i = 0; i < 8; i++)
402 3 {
403 4 if (g_Usart.recv_buffer[7] & (1 << i))
404 4 {
405 5 if (g_Usart.recv_buffer[9 + i] == 0x01)
406 5 {
407 6 s_recv.key_status[i] = 0x01;
408 6 //s_pwm.currvalue[i] = s_pwm.thenvalue[i];
409 6 Open_Light(i);
410 6 }
411 5
412 5 if (g_Usart.recv_buffer[9 + i] == 0x00)
413 5 {
414 6 //s_pwm.thenvalue[i] = s_pwm.currvalue[i];
C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 8
415 6 Close_Light(i);
416 6 s_recv.flag1[i] = 0;
417 6 s_recv.flag2[i] = 0;
418 6 s_recv.mode[i] = 2;
419 6 s_recv.key_status[i] = 0x00;
420 6 }
421 5
422 5 if (g_Usart.recv_buffer[9 + i] == 0x02)
423 5 {
424 6 if (s_recv.key_status[i] == 0x00)
425 6 {
426 7 s_recv.key_status[i] = 0x01;
427 7 //s_pwm.currvalue[i] = s_pwm.thenvalue[i];
428 7 Open_Light(i);
429 7 continue;
430 7 }
431 6
432 6 if (s_recv.key_status[i] == 0x01)
433 6 {
434 7 //s_pwm.thenvalue[i] = s_pwm.currvalue[i];
435 7 Close_Light(i);
436 7 s_recv.flag1[i] = 0;
437 7 s_recv.flag2[i] = 0;
438 7 s_recv.mode[i] = 2;
439 7 s_recv.key_status[i] = 0x00;
440 7 continue;
441 7 }
442 6 }
443 5 }
444 4 }
445 3
446 3
447 3 for (i = 0; i < 4; i++)
448 3 {
449 4 if (g_Usart.recv_buffer[8] & (1 << i))
450 4 {
451 5 if (g_Usart.recv_buffer[9 + 8 + i] == 0x01)
452 5 {
453 6 s_recv.key_status[i+8] = 0x01;
454 6 //s_pwm.currvalue[i+8] = s_pwm.thenvalue[i];
455 6 Open_Light(i+8);
456 6 }
457 5
458 5 if (g_Usart.recv_buffer[9 +8 + i] == 0x00)
459 5 {
460 6 //s_pwm.thenvalue[i+8] = s_pwm.currvalue[i+8];
461 6 Close_Light(i+8);
462 6 s_recv.flag1[i+8] = 0;
463 6 s_recv.flag2[i+8] = 0;
464 6 s_recv.mode[i+8] = 2;
465 6 s_recv.key_status[i+8] = 0x00;
466 6 }
467 5
468 5 if (g_Usart.recv_buffer[9 + 8 + i] == 0x02)
469 5 {
470 6 if (s_recv.key_status[i+8] == 0x00)
471 6 {
472 7 s_recv.key_status[i+8] = 0x01;
473 7 //s_pwm.currvalue[i+8] = s_pwm.thenvalue[i];
474 7 Open_Light(i+8);
475 7 continue;
476 7 }
C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 9
477 6
478 6
479 6 if (s_recv.key_status[i+8] == 0x01)
480 6 {
481 7 //s_pwm.thenvalue[i+8] = s_pwm.currvalue[i+8];
482 7 Close_Light(i+8);
483 7 s_recv.flag1[i+8] = 0;
484 7 s_recv.flag2[i+8] = 0;
485 7 s_recv.mode[i+8] = 2;
486 7 s_recv.key_status[i+8] = 0x00;
487 7 continue;
488 7 }
489 6 }
490 5 }
491 4 }
492 3 g_answer.short_answer_flag=0x01;
493 3 break;
494 3 case USART_CMD_DEBUG_SET:
495 3 g_answer.short_answer[UART_FMT_CMD]=USART_CMD_DEBUG_SET_A;
496 3 if(debug)
497 3 {
498 4 PrintString1("debug");
499 4 }
500 3 debug = g_Usart.recv_buffer[7];
501 3 g_answer.short_answer_flag=0x01;
502 3 break;
503 3 case Usart_CMD_Version:
504 3 g_answer.version_answer[UART_FMT_CMD]=Usart_CMD_Version_A;
505 3 g_answer.version_answer_flag=0x01;
506 3 if(debug)
507 3 {
508 4 PrintString1("version");
509 4 }
510 3 break;
511 3 }
512 2 g_Usart.ok_flag=0;
513 2 }
514 1 }
515
516 void Usart_answer(void)
517 {
518 1 u8 i=0;
519 1 u8 checksum=0;
520 1 if(g_answer.long_answer_flag)
521 1 {
522 2 g_answer.long_answer[UART_FMT_ADDR_TX]=ADDR_RX;
523 2 g_answer.long_answer[UART_FMT_TYPE]=g_Usart.Sn;
524 2 g_answer.long_answer[UART_FMT_DEV_TYPE]=DEV_TYPE;
525 2 g_answer.long_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX];
526 2 g_answer.long_answer[UART_FMT_LEN]=0x14;
527 2 g_answer.long_answer[7] = s_recv.global_brightness;
528 2 for(i=0;i<12;i++)
529 2 {
530 3 g_answer.long_answer[8+i] = s_pwm.currvalue[11-i];
531 3 if(s_recv.key_status[i] == 0x01)
532 3 {
533 4 g_answer.long_answer[8+i] |= 0x80;
534 4 }
535 3 }
536 2 checksum=sumfunc(g_answer.long_answer,0x14);
537 2 g_answer.long_answer[UART_FMT_CKS]=checksum;
538 2
C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 10
539 2 Printbuffer3(g_answer.long_answer,0x14); //<2F><><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ
540 2
541 2 if(debug)
542 2 {
543 3 // PrintString1("long answer");
544 3 }
545 2 g_answer.long_answer_flag=0;
546 2 memset(g_Usart.recv_buffer,0,32);
547 2 }
548 1 if(g_answer.short_answer_flag)
549 1 {
550 2 g_answer.short_answer[UART_FMT_ADDR_TX]=ADDR_RX;
551 2 g_answer.short_answer[UART_FMT_TYPE]=g_Usart.Sn;
552 2 g_answer.short_answer[UART_FMT_DEV_TYPE]=DEV_TYPE;
553 2 g_answer.short_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX];
554 2 g_answer.short_answer[UART_FMT_LEN]=0x07;
555 2 checksum=sumfunc(g_answer.short_answer,0x07);
556 2 g_answer.short_answer[UART_FMT_CKS]=checksum;
557 2 Printbuffer3(g_answer.short_answer,0x07);
558 2 if(debug)
559 2 {
560 3 PrintString1("short answer");
561 3 }
562 2
563 2
564 2 g_answer.short_answer_flag=0;
565 2 memset(g_Usart.recv_buffer,0,32);
566 2 }
567 1
568 1 if(g_answer.version_answer_flag)
569 1 {
570 2 g_answer.version_answer[UART_FMT_ADDR_TX]=ADDR_RX;
571 2 g_answer.version_answer[UART_FMT_TYPE]=g_Usart.Sn;
572 2 g_answer.version_answer[UART_FMT_DEV_TYPE]=DEV_TYPE;
573 2 g_answer.version_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX];
574 2 g_answer.version_answer[UART_FMT_LEN]=0x09;
575 2 g_answer.version_answer[UART_FMT_CMD+1]=Version_High;
576 2 g_answer.version_answer[UART_FMT_CMD+2]=Version_Low;
577 2
578 2 checksum=sumfunc(g_answer.version_answer,0x09);
579 2 g_answer.version_answer[UART_FMT_CKS]=checksum;
580 2 Printbuffer3(g_answer.version_answer,0x09);
581 2 if(debug)
582 2 {
583 3 PrintString1("version_answer");
584 3 }
585 2 g_answer.version_answer_flag=0;
586 2 memset(g_Usart.recv_buffer,0,32);
587 2 }
588 1 memset(&g_answer,0,sizeof(g_answer));
589 1 }
590
591 u8 sumfunc(u8* answer,u8 len)
592 {
593 1 u8 m = 0;
594 1 u8 j;
595 1 for (j = 0; j < len; j++)
596 1 {
597 2 if (5 == j) continue;
598 2 m += *(answer+j);
599 2 }
600 1 return ~m;
C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 11
601 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 4719 ----
CONSTANT SIZE = 101 ----
XDATA SIZE = 272 ----
PDATA SIZE = ---- ----
DATA SIZE = 1 7
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

60
Listings/WDT.lst Normal file
View File

@@ -0,0 +1,60 @@
C51 COMPILER V9.01 WDT 12/15/2025 20:45:04 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE WDT
OBJECT MODULE PLACED IN .\Objects\WDT.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE WDT.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\WDT.l
-st) OBJECT(.\Objects\WDT.obj)
line level source
1 /*---------------------------------------------------------------------*/
2 /* --- STC MCU Limited ------------------------------------------------*/
3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/
4 /* --- Mobile: (86)13922805190 ----------------------------------------*/
5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
7 /* --- Web: www.STCMCU.com --------------------------------------------*/
8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/
9 /* --- QQ: 800003751 -------------------------------------------------*/
10 /* <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ô˴<C3B4><CBB4><EFBFBD>,<2C><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>STC<54><43><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD> */
11 /*---------------------------------------------------------------------*/
12
13 #include "WDT.h"
14
15 //========================================================================
16 // <20><><EFBFBD><EFBFBD>: void WDT_Inilize(WDT_InitTypeDef *WDT)
17 // <20><><EFBFBD><EFBFBD>: <20><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
18 // <20><><EFBFBD><EFBFBD>: WDT: <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD>,<2C><><EFBFBD>ο<EFBFBD>WDT.h<><68><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>.
19 // <20><><EFBFBD><EFBFBD>: none.
20 // <20>汾: V1.0, 2020-09-16
21 //========================================================================
22 void WDT_Inilize(WDT_InitTypeDef *WDT)
23 {
24 1 if(WDT->WDT_Enable == ENABLE) WDT_CONTR = D_EN_WDT; //ʹ<>ܿ<EFBFBD><DCBF>Ź<EFBFBD>
25 1
26 1 WDT_PS_Set(WDT->WDT_PS); //<2F><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD>ʱ<EFBFBD><CAB1>ʱ<EFBFBD>ӷ<EFBFBD>Ƶϵ<C6B5><CFB5> WDT_SCALE_2,WDT_SCALE_4,WDT_SCALE_8,WDT_SCALE_16,WDT
-_SCALE_32,WDT_SCALE_64,WDT_SCALE_128,WDT_SCALE_256
27 1 if(WDT->WDT_IDLE_Mode == WDT_IDLE_STOP) WDT_CONTR &= ~0x08; //IDLEģʽֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
28 1 else WDT_CONTR |= 0x08; //IDLEģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
29 1 }
30
31 /********************* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD><EFBFBD> *************************/
32 void WDT_Clear (void)
33 {
34 1 WDT_CONTR |= D_CLR_WDT; // ι<><CEB9>
35 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 45 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

183
Listings/key.lst Normal file
View File

@@ -0,0 +1,183 @@
C51 COMPILER V9.01 KEY 12/15/2025 20:45:04 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN .\Objects\key.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE key.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\key.l
-st) OBJECT(.\Objects\key.obj)
line level source
1 #include "key.h"
2 #include "GPIO.h"
3 #include "timer.h"
4 #include "string.h"
5 #include "pwm_control.h"
6 KEY_t g_Key;
7
8 void Key_Init(void)
9 {
10 1 GPIO_InitTypeDef GPIO_InitStructure1; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
11 1 /***********************************1*******************************************/
12 1 GPIO_InitStructure1.Pin = GPIO_Pin_4; //ָ<><D6B8>Ҫ<EFBFBD><D2AA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>IO 4
13 1 GPIO_InitStructure1.Mode = GPIO_PullUp; //ָ<><D6B8>IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ,GPIO_PullUp
14 1 GPIO_Inilize(GPIO_P4,&GPIO_InitStructure1); //<2F><>ʼ<EFBFBD><CABC>
15 1 memset(&g_Key, 0, sizeof(g_Key));
16 1 }
17
18 void Key_ScanTask(void)
19 {
20 1 u8 i;
21 1 static u32 update_10ms = 0;
22 1
23 1 if (systick_1ms - update_10ms > 10)
24 1 {
25 2 update_10ms = systick_1ms;
26 2
27 2 for (i = 0; i < KEY_CHN_MAX; i++)
28 2 {
29 3 switch (g_Key.KEY_STA[i])
30 3 {
31 4 case KEY_STA_S0:
32 4 if ( P44 == KEY_PRESS )
33 4 {
34 5 if (g_Key.delayCnt[i] < KEY_DELAY_COUNT)
35 5 {
36 6 g_Key.delayCnt[i]++;
37 6 }
38 5 else
39 5 {
40 6 g_Key.KEY_STA[i] = KEY_STA_S1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
41 6 g_Key.key_time[i] = 0;
42 6 g_Key.delayCnt[i] = 0;
43 6 }
44 5 }
45 4 else
46 4 {
47 5 g_Key.delayCnt[i] = 0;
48 5 g_Key.KEY_STA[i] = KEY_STA_S0;
49 5 g_Key.key_val[i] = KEY_VAL_NOT;
50 5 }
51 4 break;
52 4 case KEY_STA_S1:
53 4 g_Key.key_time[i] ++;
54 4 if ( g_Key.key_time[i] < KEY_DELAY_COUNT_LONG )
C51 COMPILER V9.01 KEY 12/15/2025 20:45:04 PAGE 2
55 4 {
56 5 if ( P44 == KEY_LOOSEN ) //<2F>ɿ<EFBFBD>
57 5 {
58 6 g_Key.key_val[i] = KEY_VAL_SHORT_PRESS; //<2F>̰<EFBFBD><CCB0>ɿ<EFBFBD>
59 6 g_Key.key_time[i] = 0;
60 6 g_Key.KEY_STA[i] = KEY_STA_S0;
61 6 }
62 5 }
63 4 else
64 4 {
65 5 g_Key.KEY_STA[i] = KEY_STA_S2;
66 5 g_Key.key_time[i] = 0;
67 5 g_Key.key_longPress[i] = KEY_VAL_SINGLE_LONG_PRESS; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
68 5 g_Key.key_val[i] = KEY_VAL_CONT_LONG_PRESS; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
69 5 }
70 4 break;
71 4
72 4 case KEY_STA_S2:
73 4 g_Key.key_longPress[i] = KEY_VAL_NOT;
74 4 if ( P44 == KEY_LOOSEN )
75 4 {
76 5 g_Key.KEY_STA[i] = KEY_STA_S0;
77 5 g_Key.key_val[i] = KEY_VAL_LONG_PRESS_LOOSEN; //<2F><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
78 5 }
79 4 break;
80 4 }
81 3 }
82 2 }
83 1 }
84
85
86 void KEY_TEST(void)
87 {
88 1 u8 flag;
89 1 if (g_Key.key_val[KEY_CH1] == KEY_VAL_SHORT_PRESS)
90 1 {
91 2 g_Key.key_val[KEY_CH1] = KEY_VAL_NOT;
92 2 s_pwm.key_value++;
93 2 switch (s_pwm.key_value)
94 2 {
95 3 case 1:
96 3 s_pwm.currpwm[0] = 2000ul; //90%<25><><EFBFBD><EFBFBD>
97 3 s_pwm.currvalue[0]=0x5A;
98 3 break;
99 3 case 2:
100 3 s_pwm.currpwm[1] = 2000ul;
101 3 s_pwm.currvalue[1]=0x5A;
102 3 break;
103 3 case 3:
104 3 s_pwm.currpwm[2] = 2000ul;
105 3 s_pwm.currvalue[2]=0x5A;
106 3 break;
107 3 case 4:
108 3 s_pwm.currpwm[3] = 2000ul;
109 3 s_pwm.currvalue[3]=0x5A;
110 3 break;
111 3 case 5:
112 3 s_pwm.currpwm[4] = 2000ul;
113 3 s_pwm.currvalue[4]=0x5A;
114 3 break;
115 3 case 6:
116 3 s_pwm.currpwm[5] = 2000ul;
C51 COMPILER V9.01 KEY 12/15/2025 20:45:04 PAGE 3
117 3 s_pwm.currvalue[5]=0x5A;
118 3 break;
119 3 case 7:
120 3 s_pwm.currpwm[6] = 2000ul;
121 3 s_pwm.currvalue[6]=0x5A;
122 3 break;
123 3 case 8:
124 3 s_pwm.currpwm[7] = 2000ul;
125 3 s_pwm.currvalue[7]=0x5A;
126 3 break;
127 3 case 9:
128 3 s_pwm.currpwm[8] = 2000ul;
129 3 s_pwm.currvalue[8]=0x5A;
130 3 break;
131 3 case 10:
132 3 s_pwm.currpwm[9] = 2000ul;
133 3 s_pwm.currvalue[9]=0x5A;
134 3 break;
135 3 case 11:
136 3 s_pwm.currpwm[10] = 2000ul;
137 3 s_pwm.currvalue[10]=0x5A;
138 3 break;
139 3 case 12:
140 3 s_pwm.currpwm[11] = 2000ul;
141 3 s_pwm.currvalue[11]=0x5A;
142 3 break;
143 3 case 13:
144 3 for(flag=0;flag<12;flag++)
145 3 {
146 4 s_pwm.currpwm[flag] = PWM_MAX_VALUE;
147 4 s_pwm.currvalue[flag]=0x00;
148 4 }
149 3 s_pwm.key_value = 0;
150 3 break;
151 3 default:
152 3 break;
153 3 }
154 2 }
155 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 553 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

162
Listings/main.lst Normal file
View File

@@ -0,0 +1,162 @@
C51 COMPILER V9.01 MAIN 12/15/2025 20:45:03 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\Objects\main.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE main.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\main
-.lst) OBJECT(.\Objects\main.obj)
line level source
1 #include "config.h"
2 #include "gpio.h"
3 #include "UART.h"
4 #include "string.h"
5 #include "UART_Set.h"
6 #include "pwm_control.h"
7 #include "Start_Init.h"
8 #include "key.h"
9 #include "WDT.h"
10 /************* <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> **************
11
12 <20><><EFBFBD><EFBFBD><EFBFBD>̻<EFBFBD><CCBB><EFBFBD>STC8H8K64UΪ<55><CEAA><EFBFBD><EFBFBD>оƬ<D0BE><C6AC>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>8<EFBFBD><38><EFBFBD>б<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ԣ<EFBFBD>STC8G<38><47>STC8Hϵ<48><CFB5>оƬ<D0BE><C6AC>ͨ<EFBFBD>òο<C3B2>.
13
14 ˫<><CBAB><EFBFBD><EFBFBD>ȫ˫<C8AB><CBAB><EFBFBD>жϷ<D0B6>ʽ<EFBFBD>շ<EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
15
16 ͨ<><CDA8>PC<50><43>MCU<43><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, MCU<43>յ<EFBFBD><D5B5><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD><DAB0>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Ĭ<>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>ʣ<EFBFBD>115200,N,8,1.
17
18 ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART.h ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1~UART4 <20><><EFBFBD><EFBFBD><E5A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬͨ<CDAC><CDA8><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>ͨ<EFBFBD>š<EFBFBD>
19
20 <20>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>1Tģʽ(<28><><EFBFBD>ǵͲ<C7B5><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>12T)<29><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>ɱ<EFBFBD><C9B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƶ<EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߾<EFBFBD><DFBE>ȡ<EFBFBD>
21
22 <20><><EFBFBD><EFBFBD>ʱ, ѡ<><D1A1>ʱ<EFBFBD><CAB1> 22.1184MHz (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>"config.h"<22><><EFBFBD>޸<EFBFBD>).
23
24
25 /******************* IO<49><4F><EFBFBD>ú<EFBFBD><C3BA><EFBFBD> *******************/
26
27
28 void GPIO1_config(void)
29 {
30 1 GPIO_InitTypeDef GPIO_InitStructure; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
31 1
32 1 GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1; //ָ<><D6B8>Ҫ<EFBFBD><D2AA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>IO, GPIO_Pin_0 ~ GPIO_Pin_7
33 1 GPIO_InitStructure.Mode = GPIO_PullUp; //ָ<><D6B8>IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O
-UT_PP
34 1 GPIO_Inilize(GPIO_P3,&GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>
35 1 }
36
37 /*************** <20><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *****************/
38 void UART1_config(void)
39 {
40 1 COMx_InitDefine COMx_InitStructure; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
41 1 COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //ģʽ, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART
-_9bit_BRTx
42 1 COMx_InitStructure.UART_BRT_Use = BRT_Timer1; //ʹ<>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>, BRT_Timer1, BRT_Timer2 (ע<><D7A2>: <20><><EFBFBD><EFBFBD>2<EFBFBD>̶<EFBFBD>ʹ
-<2D><>BRT_Timer2)
43 1 COMx_InitStructure.UART_BaudRate = 115200; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, һ<><D2BB> 110 ~ 115200
44 1 COMx_InitStructure.UART_RxEnable = ENABLE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ENABLE<4C><45>DISABLE
45 1 COMx_InitStructure.BaudRateDouble = DISABLE; //<2F><><EFBFBD><EFBFBD><EFBFBD>ʼӱ<CABC>, ENABLE<4C><45>DISABLE
46 1 COMx_InitStructure.UART_Interrupt = ENABLE; //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>, ENABLE<4C><45>DISABLE
47 1 COMx_InitStructure.UART_Priority = Priority_0; //ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>(<28>͵<EFBFBD><CDB5><EFBFBD>) Priority_0,Priority_1,Priori
-ty_2,Priority_3
48 1 COMx_InitStructure.UART_P_SW = UART1_SW_P30_P31; //<2F>л<EFBFBD><D0BB>˿<EFBFBD>, UART1_SW_P30_P31,UART1_SW_P36_P37,UAR
-T1_SW_P16_P17,UART1_SW_P43_P44
49 1 UART_Configuration(UART1, &COMx_InitStructure); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 UART1,UART2,UART3,UART4
C51 COMPILER V9.01 MAIN 12/15/2025 20:45:03 PAGE 2
50 1
51 1 //PrintString1("STC8H8K64U UART1 Test Programme!\r\n"); //UART1<54><31><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
52 1 }
53
54 /********************WDT INT<4E><54><EFBFBD><EFBFBD> ********************/
55 void WDT_config(void)
56 {
57 1 WDT_InitTypeDef WDT_InitStructure; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
58 1
59 1 WDT_InitStructure.WDT_Enable = ENABLE; //<2F>ж<EFBFBD>ʹ<EFBFBD><CAB9> ENABLE<4C><45>DISABLE
60 1 WDT_InitStructure.WDT_IDLE_Mode = WDT_IDLE_STOP; //IDLEģʽ<C4A3>Ƿ<EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD> WDT_IDLE_STOP,WDT_IDLE_RUN
61 1 WDT_InitStructure.WDT_PS = WDT_SCALE_32; //<2F><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD>ʱ<EFBFBD><CAB1>ʱ<EFBFBD>ӷ<EFBFBD>Ƶϵ<C6B5><CFB5> WDT_SCALE_2,WDT_SCALE_4,WDT
-_SCALE_8,WDT_SCALE_16,WDT_SCALE_32,WDT_SCALE_64,WDT_SCALE_128,WDT_SCALE_256
62 1 WDT_Inilize(&WDT_InitStructure); //<2F><>ʼ<EFBFBD><CABC>
63 1 }
64
65 u8 count_flag=0;
66 void main(void)
67 {
68 1 GPIO_config();
69 1 UART3_config();
70 1 Start_Init();
71 1 pwm_config();
72 1 Timer2_Init_1ms();
73 1 Key_Init();
74 1 GPIO1_config();
75 1 UART1_config();
76 1 WDT_config(); //<2F><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD>629ms<6D><73>λ
77 1
78 1 PCON &= ~POF; //<2F><><EFBFBD><EFBFBD>LVD<56>жϱ<D0B6>־λ
79 1 RSTCFG = 0x41; //LVD:2.4V<EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD>λ
80 1 EA = 1;
81 1
82 1 if(debug)
83 1 {
84 2 PrintString1("MCU Start");
85 2 }
86 1
87 1 while (1)
88 1 {
89 2 WDT_Clear(); //<2F>
90 2 count_flag++;
91 2
92 2 //Ϊ<>˱<EFBFBD>֤ij<D6A4><C4B3>ѹ2.2V<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
93 2 if(count_flag==1)
94 2 {
95 3 P10=1;
96 3 }
97 2 if(count_flag==8)
98 2 {
99 3 P10=0;
100 3 }
101 2 if(count_flag==10)
102 2 {
103 3 count_flag=0;
104 3 }
105 2
106 2 Usart_judge_Data();
107 2
108 2 Usart_Deal_Data();
109 2
110 2 deal_command1();
C51 COMPILER V9.01 MAIN 12/15/2025 20:45:03 PAGE 3
111 2
112 2 deal_command2();
113 2
114 2 // checkpwm();
115 2
116 2 show_light();
117 2
118 2 Usart_answer();
119 2
120 2 Key_ScanTask();
121 2
122 2 KEY_TEST();
123 2
124 2 }
125 1 }
126
127
128
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 175 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 17
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

421
Listings/pwm_control.lst Normal file
View File

@@ -0,0 +1,421 @@
C51 COMPILER V9.01 PWM_CONTROL 12/15/2025 20:45:04 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE PWM_CONTROL
OBJECT MODULE PLACED IN .\Objects\pwm_control.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE pwm_control.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listin
-gs\pwm_control.lst) OBJECT(.\Objects\pwm_control.obj)
line level source
1 #include "pwm_control.h"
2 #include "GPIO.h"
3 #include "STC8xxxx.h"
4 #include "PWM15bit.h"
5 #include "timer.h"
6 #include "UART_Set.h"
7 #include "string.h"
8 S_PWM s_pwm;
9 /*
10 *1.<2E><><EFBFBD><EFBFBD>5.0/5.1<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><EFBFBD>
11 *2.<2E><>ʼ<EFBFBD><CABC>PWM<57><4D><EFBFBD><EFBFBD>
12 *3.LED_DRV_12V_EN<45>õ<EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
13 */
14 /******************* IO<49><4F><EFBFBD>ú<EFBFBD><C3BA><EFBFBD> *******************/
15 void GPIO_config(void)
16 {
17 1 GPIO_InitTypeDef GPIO_InitStructure; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
18 1 /***********************************1*******************************************/
19 1 GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1; //ָ<><D6B8>Ҫ<EFBFBD><D2AA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>IO, GPIO_Pin_0 ~ GPIO_Pin_7
20 1 GPIO_InitStructure.Mode = GPIO_PullUp; //ָ<><D6B8>IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O
-UT_PP
21 1 GPIO_Inilize(GPIO_P5,&GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>
22 1
23 1 /***********************************2*******************************************/
24 1 GPIO_InitStructure.Pin = GPIO_Pin_All; //ָ<><D6B8>Ҫ<EFBFBD><D2AA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>IO, GPIO_Pin_0 ~ GPIO_Pin_7
25 1 GPIO_InitStructure.Mode = GPIO_OUT_PP; //ָ<><D6B8>IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O
-UT_PP
26 1 GPIO_Inilize(GPIO_P0,&GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>
27 1
28 1 GPIO_InitStructure.Pin = GPIO_Pin_Left; //ָ<><D6B8>Ҫ<EFBFBD><D2AA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>IO, GPIO_Pin_0 ~ GPIO_Pin_7
29 1 GPIO_InitStructure.Mode = GPIO_OUT_PP; //ָ<><D6B8>IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O
-UT_PP
30 1 GPIO_Inilize(GPIO_P2,&GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>
31 1
32 1 /***********************************3*******************************************/
33 1 GPIO_InitStructure.Pin = GPIO_Pin_0; //ָ<><D6B8>Ҫ<EFBFBD><D2AA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>IO, GPIO_Pin_0 ~ GPIO_Pin_7
34 1 GPIO_InitStructure.Mode = GPIO_OUT_PP; //ָ<><D6B8>IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O
-UT_PP
35 1 GPIO_Inilize(GPIO_P1,&GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>
36 1 }
37
38 void pwm_config(void)
39 {
40 1 u8 i;
41 1 PWM15_InitTypeDef PWM15_InitStructure;
42 1
43 1 PWM15_InitStructure.PWM_Enable = ENABLE; //PWMʹ<4D><CAB9>, ENABLE, DISABLE
44 1 PWM15_InitStructure.PWM_Period = 0x04E2; //PWM<57><4D><EFBFBD><EFBFBD>, 1250,Ƶ<><C6B5>Ϊ16khz
45 1 PWM15_InitStructure.PWM_Clock_Sel = PWMn_CLK_SYS; //ʱ<><CAB1>Դѡ<D4B4><D1A1>, PWMn_CLK_SYS, PWMn_CLK_TM2
46 1 PWM15_InitStructure.PWM_Clock_PS = 0; //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>(PS+1<><31>Ƶ), 0~15
47 1 PWM15_InitStructure.PWM_Counter = ENABLE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, ENABLE, DISABLE
48 1
49 1 PWM15_Init(PWM0,&PWM15_InitStructure); //<2F><>ʼ<EFBFBD><CABC>PWM0
50 1 PWM15_Init(PWM2,&PWM15_InitStructure); //<2F><>ʼ<EFBFBD><CABC>PWM2
C51 COMPILER V9.01 PWM_CONTROL 12/15/2025 20:45:04 PAGE 2
51 1
52 1 PWM15Duty(PWM00,initial_Val); //PWM_ID, <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽλ<C6BD><CEBB>, <20><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽλ<C6BD><CEBB>
53 1 PWM15Duty(PWM01,initial_Val); //PWM_ID, <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽλ<C6BD><CEBB>, <20><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽλ<C6BD><CEBB>
54 1 PWM15Duty(PWM02,initial_Val); //PWM_ID, <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽλ<C6BD><CEBB>, <20><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽλ<C6BD><CEBB>
55 1 PWM15Duty(PWM03,initial_Val); //PWM_ID, <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽλ<C6BD><CEBB>, <20><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽλ<C6BD><CEBB>
56 1 PWM15Duty(PWM04,initial_Val);
57 1 PWM15Duty(PWM05,initial_Val);
58 1 PWM15Duty(PWM06,initial_Val);
59 1 PWM15Duty(PWM07,initial_Val);
60 1
61 1 PWM15Duty(PWM20,initial_Val);
62 1 PWM15Duty(PWM21,initial_Val);
63 1 PWM15Duty(PWM22,initial_Val);
64 1 PWM15Duty(PWM23,initial_Val);
65 1
66 1 memset(&s_pwm,0,sizeof(s_pwm));
67 1 for(i=0;i<12;i++)
68 1 {
69 2 s_pwm.currpwm[i]=initial_Val;
70 2 }
71 1 PWMChannelCtrl(PWM00,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, <20><>ʼ<EFBFBD><CABC>ƽ, PWM<57>ж<EFBFBD>, <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D><><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
72 1 PWMChannelCtrl(PWM01,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, <20><>ʼ<EFBFBD><CABC>ƽ, PWM<57>ж<EFBFBD>, <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D><><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
73 1 PWMChannelCtrl(PWM02,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, <20><>ʼ<EFBFBD><CABC>ƽ, PWM<57>ж<EFBFBD>, <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D><><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
74 1 PWMChannelCtrl(PWM03,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, <20><>ʼ<EFBFBD><CABC>ƽ, PWM<57>ж<EFBFBD>, <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D><><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
75 1 PWMChannelCtrl(PWM04,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, <20><>ʼ<EFBFBD><CABC>ƽ, PWM<57>ж<EFBFBD>, <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D><><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
76 1 PWMChannelCtrl(PWM05,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, <20><>ʼ<EFBFBD><CABC>ƽ, PWM<57>ж<EFBFBD>, <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D><><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
77 1 PWMChannelCtrl(PWM06,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, <20><>ʼ<EFBFBD><CABC>ƽ, PWM<57>ж<EFBFBD>, <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D><><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
78 1 PWMChannelCtrl(PWM07,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, <20><>ʼ<EFBFBD><CABC>ƽ, PWM<57>ж<EFBFBD>, <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D><><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
79 1
80 1 PWMChannelCtrl(PWM20,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, <20><>ʼ<EFBFBD><CABC>ƽ, PWM<57>ж<EFBFBD>, <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D><><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
81 1 PWMChannelCtrl(PWM21,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, <20><>ʼ<EFBFBD><CABC>ƽ, PWM<57>ж<EFBFBD>, <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D><><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
82 1 PWMChannelCtrl(PWM22,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, <20><>ʼ<EFBFBD><CABC>ƽ, PWM<57>ж<EFBFBD>, <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D><><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
83 1 PWMChannelCtrl(PWM23,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, <20><>ʼ<EFBFBD><CABC>ƽ, PWM<57>ж<EFBFBD>, <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D><><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
84 1
85 1 }
86
87
88 //10ms<6D><73><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
89 void deal_command1(void)
90 {
91 1 int i=0;
92 1 static u32 systick_command1 = 0;
93 1
94 1 if (systick_1ms - systick_command1 >= 10)
95 1 {
96 2 systick_command1 = systick_1ms;
97 2 for (i = 0; i < 12; i++)
98 2 {
99 3 if (s_recv.flag1[i])
100 3 {
C51 COMPILER V9.01 PWM_CONTROL 12/15/2025 20:45:04 PAGE 3
101 4 if (s_pwm.wanttopwm[i] > s_pwm.currpwm[i])
102 4 {
103 5 //s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i];
104 5 s_pwm.doublecurrpwm[i] += s_pwm.every_change_10ms[i];
105 5 s_pwm.currpwm[i] = (u16)s_pwm.doublecurrpwm[i];
106 5
107 5 if(s_recv.global_brightness==0)
108 5 {
109 6 s_pwm.currvalue[i]=0;
110 6 }
111 5 else
112 5 {
113 6 s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALU
-E / s_recv.global_brightness;
114 6 }
115 5
116 5 if ( s_pwm.wanttopwm[i] < s_pwm.currpwm[i])
117 5 {
118 6 s_pwm.currpwm[i] = s_pwm.wanttopwm[i];
119 6 }
120 5 }
121 4
122 4
123 4 //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4>ڵ<EFBFBD>ǰֵʱ
124 4 if (s_pwm.wanttopwm[i] < s_pwm.currpwm[i])
125 4 {
126 5 //s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i];
127 5 s_pwm.doublecurrpwm[i] -= s_pwm.every_change_10ms[i];
128 5 s_pwm.currpwm[i] = (u16)s_pwm.doublecurrpwm[i];
129 5
130 5 if(s_recv.global_brightness==0)
131 5 {
132 6 s_pwm.currvalue[i]=0;
133 6 }
134 5 else
135 5 {
136 6 s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_
-brightness;
137 6 }
138 5
139 5 if (s_pwm.currpwm[i] < s_pwm.wanttopwm[i] + s_pwm.every_change_10ms[i])
140 5 {
141 6 s_pwm.currpwm[i] = 0;
142 6 s_pwm.currpwm[i] = s_pwm.wanttopwm[i];
143 6 }
144 5 }
145 4
146 4
147 4 if (s_pwm.wanttopwm[i] == s_pwm.currpwm[i])
148 4 {
149 5 s_pwm.currvalue[i] = s_recv.B_Ch[i];
150 5 s_recv.flag1[i] = 0;
151 5 }
152 4 }
153 3 }
154 2 }
155 1 }
156
157 void deal_command2(void)
158 {
159 1 int i=0;
160 1 static u32 systick_command2 = 0;
C51 COMPILER V9.01 PWM_CONTROL 12/15/2025 20:45:04 PAGE 4
161 1 if (systick_1ms - systick_command2 >= 10)
162 1 {
163 2 systick_command2 = systick_1ms;
164 2 for (i = 0; i < 12; i++)
165 2 {
166 3 if (s_recv.flag2[i])
167 3 {
168 4 switch (s_recv.mode[i])
169 4 {
170 5 //<2F><><EFBFBD><EFBFBD>ֹͣģʽ
171 5 case 0x00:
172 5 //<2F><><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>
173 5 if (s_recv.forward[i] == 0x00)
174 5 {
175 6 s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_min * PWM_MAX_VALUE * s_recv.global_brightness
- / 100 / 100 * s_recv.key_status[i];
176 6 s_pwm.currpwm[i] += s_recv.pwm_step[i];
177 6 if(s_recv.global_brightness==0)
178 6 {
179 7 s_pwm.currvalue[i]=0;
180 7 }
181 6 else
182 6 {
183 7 s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_re
-cv.global_brightness;
184 7 }
185 6 if (s_pwm.currpwm[i] >= s_pwm.wanttopwm[i])
186 6 {
187 7 s_recv.flag2[i] = 0;
188 7 s_pwm.currpwm[i] = s_pwm.wanttopwm[i];
189 7 s_pwm.currvalue[i] = s_recv.B_min; //<2F><><EFBFBD>ڻظ<DABB><D8B8><EFBFBD><EFBFBD><EFBFBD>
190 7 }
191 6 }
192 5 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
193 5 if (s_recv.forward[i] == 0x01)
194 5 {
195 6 s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_max * PWM_MAX_VALUE * s_recv.global_brightness
- / 100 / 100 * s_recv.key_status[i];
196 6 if (s_pwm.currpwm[i] <= s_pwm.wanttopwm[i] + s_recv.pwm_step[i])
197 6 {
198 7 s_recv.flag2[i] = 0;
199 7 s_pwm.currpwm[i] = s_pwm.wanttopwm[i];
200 7 s_pwm.currvalue[i] = s_recv.B_max;
201 7 }
202 6 else
203 6 {
204 7 s_pwm.currpwm[i] -= s_recv.pwm_step[i];
205 7 if(s_recv.global_brightness==0)
206 7 {
207 8 s_pwm.currvalue[i]=0;
208 8 }
209 7 else
210 7 {
211 8 s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_b
-rightness;
212 8 }
213 7 }
214 6 }
215 5 break;
216 5
217 5 //˫<><CBAB>ѭ<EFBFBD><D1AD>ģʽ
218 5 case 0x01:
C51 COMPILER V9.01 PWM_CONTROL 12/15/2025 20:45:04 PAGE 5
219 5 //<2F>ݼ<EFBFBD>
220 5 if (s_recv.forward[i] == 0x00)
221 5 {
222 6 s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_min * PWM_MAX_VALUE * s_recv.global_brightness
- / 100 / 100 * s_recv.key_status[i];
223 6 s_pwm.currpwm[i] += s_recv.pwm_step[i];
224 6 if(s_recv.global_brightness==0)
225 6 {
226 7 s_pwm.currvalue[i]=0;
227 7 }
228 6 else
229 6 {
230 7 s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_re
-cv.global_brightness;
231 7 }
232 6 if (s_pwm.currpwm[i] >= s_pwm.wanttopwm[i])
233 6 {
234 7 s_recv.forward[i] = 0x01;
235 7 s_pwm.currpwm[i] = s_pwm.wanttopwm[i];
236 7 s_pwm.currvalue[i] = s_recv.B_min; //<2F><><EFBFBD>ڻظ<DABB><D8B8><EFBFBD><EFBFBD><EFBFBD>
237 7 }
238 6 }
239 5 //<2F><><EFBFBD><EFBFBD>
240 5 if (s_recv.forward[i] == 0x01)
241 5 {
242 6 s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_max * PWM_MAX_VALUE * s_recv.global_brightness
- / 100 / 100 * s_recv.key_status[i];
243 6 if (s_pwm.currpwm[i] <= s_pwm.wanttopwm[i] + s_recv.pwm_step[i])
244 6 {
245 7 s_recv.forward[i] = 0x00;
246 7 s_pwm.currpwm[i] = s_pwm.wanttopwm[i];
247 7 s_pwm.currvalue[i] = s_recv.B_max;
248 7 }
249 6 else
250 6 {
251 7 s_pwm.currpwm[i] -= s_recv.pwm_step[i];
252 7 if(s_recv.global_brightness==0)
253 7 {
254 8 s_pwm.currvalue[i]=0;
255 8 }
256 7 else
257 7 {
258 8 s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_b
-rightness;
259 8 }
260 7 }
261 6 }
262 5 break;
263 5 case 0x02:
264 5 //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
265 5 s_recv.flag2[i] = 0;
266 5 break;
267 5 }
268 4 }
269 3 }
270 2 }
271 1 }
272
273
274 //ֱ<>ӹص<D3B9><D8B5><EFBFBD>,<2C><><EFBFBD><EFBFBD>¼״̬
275 void Close_Light(u8 i)
276 {
C51 COMPILER V9.01 PWM_CONTROL 12/15/2025 20:45:04 PAGE 6
277 1 s_pwm.currpwm[i]=20001ul; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD><EFBFBD><E2A3AC><EFBFBD><EFBFBD>
278 1 }
279
280 //<2F>򿪵<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
281 void Open_Light(u8 pin)
282 {
283 1 s_pwm.currpwm[pin] = PWM_MAX_VALUE - s_pwm.currvalue[pin] * PWM_MAX_VALUE * s_recv.global_brightness / 10
-0 / 100;
284 1 }
285
286 void PWM_write(u8 i, u16 Val)
287 {
288 1 switch (i)
289 1 {
290 2 case 0:
291 2 PWM15Duty(PWM07,Val);
292 2 break;
293 2 case 1:
294 2 PWM15Duty(PWM06,Val);
295 2 break;
296 2 case 2:
297 2 PWM15Duty(PWM05,Val);
298 2 break;
299 2 case 3:
300 2 PWM15Duty(PWM04,Val);
301 2 break;
302 2 case 4:
303 2 PWM15Duty(PWM03,Val);
304 2 break;
305 2 case 5:
306 2 PWM15Duty(PWM02,Val);
307 2 break;
308 2 case 6:
309 2 PWM15Duty(PWM01,Val);
310 2 break;
311 2 case 7:
312 2 PWM15Duty(PWM00,Val);
313 2 break;
314 2 case 8:
315 2 PWM15Duty(PWM23,Val);
316 2 break;
317 2 case 9:
318 2 PWM15Duty(PWM22,Val);
319 2 break;
320 2 case 10:
321 2 PWM15Duty(PWM21,Val);
322 2 break;
323 2 case 11:
324 2 PWM15Duty(PWM20,Val);
325 2 break;
326 2 }
327 1 }
328 void show_light(void)
329 {
330 1 int i;
331 1 for (i = 0; i < 12; i++)
332 1 {
333 2 if(s_pwm.currpwm[i]==20000ul)
334 2 {
335 3 Close_Light(i);
336 3 }
337 2 else
C51 COMPILER V9.01 PWM_CONTROL 12/15/2025 20:45:04 PAGE 7
338 2 {
339 3 PWM_write(i, s_pwm.currpwm[i]);
340 3 }
341 2 }
342 1 }
343
344 //void checkpwm(void)
345 //{
346 // int i;
347 // for (i = 0; i < 12; i++)
348 // {
349 // if ((s_recv.flag1[i] == 0) && (s_recv.flag2[i] == 0) && (s_recv.changeflag == 1))
350 // {
351 // if (s_pwm.wanttopwmflash[i] != s_pwm.currpwm[i])
352 // {
353 // s_pwm.currpwm[i] = s_pwm.wanttopwmflash[i];
354 // }
355 // }
356 // }
357 // s_recv.changeflag = 0;
358 //}
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3842 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 241 ----
PDATA SIZE = ---- ----
DATA SIZE = 8 18
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

190
Listings/timer.lst Normal file
View File

@@ -0,0 +1,190 @@
C51 COMPILER V9.01 TIMER 12/15/2025 20:45:04 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE TIMER
OBJECT MODULE PLACED IN .\Objects\timer.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE timer.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\tim
-er.lst) OBJECT(.\Objects\timer.obj)
line level source
1 /*---------------------------------------------------------------------*/
2 /* --- STC MCU Limited ------------------------------------------------*/
3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/
4 /* --- Mobile: (86)13922805190 ----------------------------------------*/
5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
7 /* --- Web: www.STCMCU.com --------------------------------------------*/
8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/
9 /* --- QQ: 800003751 -------------------------------------------------*/
10 /* <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ô˴<C3B4><CBB4><EFBFBD>,<2C><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>STC<54><43><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD> */
11 /*---------------------------------------------------------------------*/
12
13 /************* <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> **************
14
15 <20><><EFBFBD>ļ<EFBFBD>ΪSTC8ϵ<38>еĶ<D0B5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>жϳ<D0B6><CFB3><EFBFBD>,<2C>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>޸<EFBFBD><DEB8>Լ<EFBFBD><D4BC><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>жϳ<D0B6><CFB3><EFBFBD>.
16
17 ******************************************/
18
19 #include "timer.h"
20 u32 systick_1ms=0;
21 /********************* Timer0<72>жϺ<D0B6><CFBA><EFBFBD>************************/
22 void timer0_int (void) interrupt TIMER0_VECTOR
23 {
24 1 P67 = ~P67;
25 1 }
26
27 /********************* Timer1<72>жϺ<D0B6><CFBA><EFBFBD>************************/
28 void timer1_int (void) interrupt TIMER1_VECTOR
29 {
30 1 P66 = ~P66;
31 1 }
32
33 /********************* Timer2<72>жϺ<D0B6><CFBA><EFBFBD>************************/
34 void timer2_int (void) interrupt TIMER2_VECTOR
35 {
36 1 systick_1ms++;
37 1 }
38
39 /********************* Timer3<72>жϺ<D0B6><CFBA><EFBFBD>************************/
40 void timer3_int (void) interrupt TIMER3_VECTOR
41 {
42 1
43 1 }
44
45 /********************* Timer4<72>жϺ<D0B6><CFBA><EFBFBD>************************/
46 void timer4_int (void) interrupt TIMER4_VECTOR
47 {
48 1 P63 = ~P63;
49 1 }
50
51
52 //========================================================================
53 // <20><><EFBFBD><EFBFBD>: u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx)
54 // <20><><EFBFBD><EFBFBD>: <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
C51 COMPILER V9.01 TIMER 12/15/2025 20:45:04 PAGE 2
55 // <20><><EFBFBD><EFBFBD>: TIMx: <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD>,<2C><><EFBFBD>ο<EFBFBD>timer.h<><68><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>.
56 // <20><><EFBFBD><EFBFBD>: <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>0, <20>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1,<2C><><EFBFBD>󷵻<EFBFBD>2.
57 // <20>汾: V1.0, 2012-10-22
58 //========================================================================
59 u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx)
60 {
61 1 if(TIM > Timer4) return 1; //<2F>ղ<EFBFBD><D5B2><EFBFBD>
62 1
63 1 if(TIM == Timer0)
64 1 {
65 2 Timer0_Stop(); //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
66 2 if(TIMx->TIM_Interrupt == ENABLE) Timer0_InterruptEnable(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
67 2 else Timer0_InterruptDisable(); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
68 2 if(TIMx->TIM_Priority > Priority_3) return 2; //<2F><><EFBFBD><EFBFBD>
69 2 Timer0_Priority(TIMx->TIM_Priority); //ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>(<28>͵<EFBFBD><CDB5><EFBFBD>) Priority_0,Priority_1,Priority_2,Priority_
-3
70 2
71 2 if(TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) return 2; //<2F><><EFBFBD><EFBFBD>
72 2 TMOD = (TMOD & ~0x30) | TIMx->TIM_Mode; //<2F><><EFBFBD><EFBFBD>ģʽ,0: 16λ<36>Զ<EFBFBD><D4B6><EFBFBD>װ, 1: 16λ<36><CEBB>ʱ/<2F><><EFBFBD><EFBFBD>, 2: 8λ<38>Զ<EFBFBD><D4B6><EFBFBD>װ
73 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer0_12T(); //12T
74 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer0_1T(); //1T
75 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer0_AsCounter(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
76 2 else Timer0_AsTimer(); //<2F><>ʱ
77 2 if(TIMx->TIM_ClkOut == ENABLE) Timer0_CLKO_Enable(); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
78 2 else Timer0_CLKO_Disable(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
79 2
80 2 T0_Load(TIMx->TIM_Value);
81 2 if(TIMx->TIM_Run == ENABLE) Timer0_Run(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
82 2 return 0; //<2F>ɹ<EFBFBD>
83 2 }
84 1
85 1 if(TIM == Timer1)
86 1 {
87 2 Timer1_Stop(); //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
88 2 if(TIMx->TIM_Interrupt == ENABLE) Timer1_InterruptEnable(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
89 2 else Timer1_InterruptDisable(); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
90 2 if(TIMx->TIM_Priority > Priority_3) return 2; //<2F><><EFBFBD><EFBFBD>
91 2 Timer1_Priority(TIMx->TIM_Priority); //ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>(<28>͵<EFBFBD><CDB5><EFBFBD>) Priority_0,Priority_1,Priority_2,Priority_
-3
92 2 if(TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) return 2; //<2F><><EFBFBD><EFBFBD>
93 2 TMOD = (TMOD & ~0x30) | TIMx->TIM_Mode; //<2F><><EFBFBD><EFBFBD>ģʽ,0: 16λ<36>Զ<EFBFBD><D4B6><EFBFBD>װ, 1: 16λ<36><CEBB>ʱ/<2F><><EFBFBD><EFBFBD>, 2: 8λ<38>Զ<EFBFBD><D4B6><EFBFBD>װ
94 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer1_12T(); //12T
95 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer1_1T(); //1T
96 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer1_AsCounter(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
97 2 else Timer1_AsTimer(); //<2F><>ʱ
98 2 if(TIMx->TIM_ClkOut == ENABLE) Timer1_CLKO_Enable(); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
99 2 else Timer1_CLKO_Disable(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
100 2
101 2 T1_Load(TIMx->TIM_Value);
102 2 if(TIMx->TIM_Run == ENABLE) Timer1_Run(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
103 2 return 0; //<2F>ɹ<EFBFBD>
104 2 }
105 1
106 1 if(TIM == Timer2) //Timer2,<2C>̶<EFBFBD>Ϊ16λ<36>Զ<EFBFBD><D4B6><EFBFBD>װ, <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
107 1 {
108 2 Timer2_Stop(); //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
109 2 if(TIMx->TIM_Interrupt == ENABLE) Timer2_InterruptEnable(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
110 2 else Timer2_InterruptDisable(); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
111 2 if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2;
112 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer2_12T(); //12T
113 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer2_1T(); //1T
114 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer2_AsCounter(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
C51 COMPILER V9.01 TIMER 12/15/2025 20:45:04 PAGE 3
115 2 else Timer2_AsTimer(); //<2F><>ʱ
116 2 if(TIMx->TIM_ClkOut == ENABLE) Timer2_CLKO_Enable(); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
117 2 else Timer2_CLKO_Disable(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
118 2
119 2 T2_Load(TIMx->TIM_Value);
120 2 if(TIMx->TIM_Run == ENABLE) Timer2_Run(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
121 2 return 0; //<2F>ɹ<EFBFBD>
122 2 }
123 1
124 1 if(TIM == Timer3) //Timer3,<2C>̶<EFBFBD>Ϊ16λ<36>Զ<EFBFBD><D4B6><EFBFBD>װ, <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
125 1 {
126 2 Timer3_Stop(); //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
127 2 if(TIMx->TIM_Interrupt == ENABLE) Timer3_InterruptEnable(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
128 2 else Timer3_InterruptDisable(); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
129 2 if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2;
130 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer3_12T(); //12T
131 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer3_1T(); //1T
132 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer3_AsCounter(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
133 2 else Timer3_AsTimer(); //<2F><>ʱ
134 2 if(TIMx->TIM_ClkOut == ENABLE) Timer3_CLKO_Enable(); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
135 2 else Timer3_CLKO_Disable(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
136 2
137 2 T3_Load(TIMx->TIM_Value);
138 2 if(TIMx->TIM_Run == ENABLE) Timer3_Run(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
139 2 return 0; //<2F>ɹ<EFBFBD>
140 2 }
141 1
142 1 if(TIM == Timer4) //Timer3,<2C>̶<EFBFBD>Ϊ16λ<36>Զ<EFBFBD><D4B6><EFBFBD>װ, <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
143 1 {
144 2 Timer4_Stop(); //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
145 2 if(TIMx->TIM_Interrupt == ENABLE) Timer4_InterruptEnable(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
146 2 else Timer4_InterruptDisable(); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
147 2 if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2;
148 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer4_12T(); //12T
149 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer4_1T(); //1T
150 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer4_AsCounter(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
151 2 else Timer4_AsTimer(); //<2F><>ʱ
152 2 if(TIMx->TIM_ClkOut == ENABLE) Timer4_CLKO_Enable(); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
153 2 else Timer4_CLKO_Disable(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
154 2
155 2 T4_Load(TIMx->TIM_Value);
156 2 if(TIMx->TIM_Run == ENABLE) Timer4_Run(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
157 2 return 0; //<2F>ɹ<EFBFBD>
158 2 }
159 1 return 2; //<2F><><EFBFBD><EFBFBD>
160 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 795 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)