C51 COMPILER V9.01 PWM_CONTROL 12/16/2025 16:53:47 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.´®¿Ú5.0/5.1µÄ³õʼ»¯ 11 *2.³õʼ»¯PWMÒý½Å 12 *3.LED_DRV_12V_ENÈõ¥Æ¬»úÔËÐÐ 13 */ 14 /******************* IOÅäÖú¯Êý *******************/ 15 void GPIO_config(void) 16 { 17 1 GPIO_InitTypeDef GPIO_InitStructure; //½á¹¹¶¨Òå 18 1 /***********************************1*******************************************/ 19 1 GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1; //Ö¸¶¨Òª³õʼ»¯µÄIO, GPIO_Pin_0 ~ GPIO_Pin_7 20 1 GPIO_InitStructure.Mode = GPIO_PullUp; //Ö¸¶¨IOµÄÊäÈë»òÊä³ö·½Ê½,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O -UT_PP 21 1 GPIO_Inilize(GPIO_P5,&GPIO_InitStructure); //³õʼ»¯ 22 1 23 1 /***********************************2*******************************************/ 24 1 GPIO_InitStructure.Pin = GPIO_Pin_All; //Ö¸¶¨Òª³õʼ»¯µÄIO, GPIO_Pin_0 ~ GPIO_Pin_7 25 1 GPIO_InitStructure.Mode = GPIO_OUT_PP; //Ö¸¶¨IOµÄÊäÈë»òÊä³ö·½Ê½,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O -UT_PP 26 1 GPIO_Inilize(GPIO_P0,&GPIO_InitStructure); //³õʼ»¯ 27 1 28 1 GPIO_InitStructure.Pin = GPIO_Pin_Left; //Ö¸¶¨Òª³õʼ»¯µÄIO, GPIO_Pin_0 ~ GPIO_Pin_7 29 1 GPIO_InitStructure.Mode = GPIO_OUT_PP; //Ö¸¶¨IOµÄÊäÈë»òÊä³ö·½Ê½,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O -UT_PP 30 1 GPIO_Inilize(GPIO_P2,&GPIO_InitStructure); //³õʼ»¯ 31 1 32 1 /***********************************3*******************************************/ 33 1 GPIO_InitStructure.Pin = GPIO_Pin_0; //Ö¸¶¨Òª³õʼ»¯µÄIO, GPIO_Pin_0 ~ GPIO_Pin_7 34 1 GPIO_InitStructure.Mode = GPIO_OUT_PP; //Ö¸¶¨IOµÄÊäÈë»òÊä³ö·½Ê½,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O -UT_PP 35 1 GPIO_Inilize(GPIO_P1,&GPIO_InitStructure); //³õʼ»¯ 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ʹÄÜ, ENABLE, DISABLE 44 1 PWM15_InitStructure.PWM_Period = 0x04E2; //PWMÖÜÆÚ, 1250,ƵÂÊΪ16khz 45 1 PWM15_InitStructure.PWM_Clock_Sel = PWMn_CLK_SYS; //ʱÖÓÔ´Ñ¡Ôñ, PWMn_CLK_SYS, PWMn_CLK_TM2 46 1 PWM15_InitStructure.PWM_Clock_PS = 0; //ϵͳʱÖÓ·ÖÆµ²ÎÊý(PS+1·ÖƵ), 0~15 47 1 PWM15_InitStructure.PWM_Counter = ENABLE; //¼ÆÊýÆ÷ʹÄÜ, ENABLE, DISABLE 48 1 49 1 PWM15_Init(PWM0,&PWM15_InitStructure); //³õʼ»¯PWM0 50 1 PWM15_Init(PWM2,&PWM15_InitStructure); //³õʼ»¯PWM2 C51 COMPILER V9.01 PWM_CONTROL 12/16/2025 16:53:47 PAGE 2 51 1 52 1 PWM15Duty(PWM00,initial_Val); //PWM_ID, Êä³öµÍµçƽλÖÃ, Êä³ö¸ßµçƽλÖà 53 1 PWM15Duty(PWM01,initial_Val); //PWM_ID, Êä³öµÍµçƽλÖÃ, Êä³ö¸ßµçƽλÖà 54 1 PWM15Duty(PWM02,initial_Val); //PWM_ID, Êä³öµÍµçƽλÖÃ, Êä³ö¸ßµçƽλÖà 55 1 PWM15Duty(PWM03,initial_Val); //PWM_ID, Êä³öµÍµçƽλÖÃ, Êä³ö¸ßµçƽλÖà 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, Êä³öʹÄÜ, ³õʼµçƽ, PWMÖжÏ, µÚ¶þ¸ö´¥·¢ -µãÖжÏ, µÚÒ»´¥·¢µãÖÐ¶Ï 72 1 PWMChannelCtrl(PWM01,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, Êä³öʹÄÜ, ³õʼµçƽ, PWMÖжÏ, µÚ¶þ¸ö´¥·¢ -µãÖжÏ, µÚÒ»´¥·¢µãÖÐ¶Ï 73 1 PWMChannelCtrl(PWM02,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, Êä³öʹÄÜ, ³õʼµçƽ, PWMÖжÏ, µÚ¶þ¸ö´¥·¢ -µãÖжÏ, µÚÒ»´¥·¢µãÖÐ¶Ï 74 1 PWMChannelCtrl(PWM03,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, Êä³öʹÄÜ, ³õʼµçƽ, PWMÖжÏ, µÚ¶þ¸ö´¥· -¢µãÖжÏ, µÚÒ»´¥·¢µãÖÐ¶Ï 75 1 PWMChannelCtrl(PWM04,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, Êä³öʹÄÜ, ³õʼµçƽ, PWMÖжÏ, µÚ¶þ¸ö´¥·¢ -µãÖжÏ, µÚÒ»´¥·¢µãÖÐ¶Ï 76 1 PWMChannelCtrl(PWM05,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, Êä³öʹÄÜ, ³õʼµçƽ, PWMÖжÏ, µÚ¶þ¸ö´¥·¢ -µãÖжÏ, µÚÒ»´¥·¢µãÖÐ¶Ï 77 1 PWMChannelCtrl(PWM06,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, Êä³öʹÄÜ, ³õʼµçƽ, PWMÖжÏ, µÚ¶þ¸ö´¥·¢ -µãÖжÏ, µÚÒ»´¥·¢µãÖÐ¶Ï 78 1 PWMChannelCtrl(PWM07,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, Êä³öʹÄÜ, ³õʼµçƽ, PWMÖжÏ, µÚ¶þ¸ö´¥· -¢µãÖжÏ, µÚÒ»´¥·¢µãÖÐ¶Ï 79 1 80 1 PWMChannelCtrl(PWM20,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, Êä³öʹÄÜ, ³õʼµçƽ, PWMÖжÏ, µÚ¶þ¸ö´¥·¢ -µãÖжÏ, µÚÒ»´¥·¢µãÖÐ¶Ï 81 1 PWMChannelCtrl(PWM21,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, Êä³öʹÄÜ, ³õʼµçƽ, PWMÖжÏ, µÚ¶þ¸ö´¥·¢ -µãÖжÏ, µÚÒ»´¥·¢µãÖÐ¶Ï 82 1 PWMChannelCtrl(PWM22,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, Êä³öʹÄÜ, ³õʼµçƽ, PWMÖжÏ, µÚ¶þ¸ö´¥·¢ -µãÖжÏ, µÚÒ»´¥·¢µãÖÐ¶Ï 83 1 PWMChannelCtrl(PWM23,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, Êä³öʹÄÜ, ³õʼµçƽ, PWMÖжÏ, µÚ¶þ¸ö´¥· -¢µãÖжÏ, µÚÒ»´¥·¢µãÖÐ¶Ï 84 1 85 1 } 86 87 88 //10ms½¥±äÒ»¼¶ 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/16/2025 16:53:47 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 //µ±ÏëÒªµÄÁÁ¶È´óÓÚµ±Ç°ÖµÊ± 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/16/2025 16:53:47 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 //¶¥¶Ëֹͣģʽ 171 5 case 0x00: 172 5 //ÁÁ¶È½µµÍ 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; //ÓÃÓڻظ´Êý¾Ý 190 7 } 191 6 } 192 5 //ÁÁ¶ÈÔö¼Ó 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 //Ë«ÏòÑ­»·Ä£Ê½ 218 5 case 0x01: C51 COMPILER V9.01 PWM_CONTROL 12/16/2025 16:53:47 PAGE 5 219 5 //µÝ¼õ 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; //ÓÃÓڻظ´Êý¾Ý 237 7 } 238 6 } 239 5 //µÝÔö 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 //Í£Ö¹µ÷½Ú 265 5 s_recv.flag2[i] = 0; 266 5 break; 267 5 } 268 4 } 269 3 } 270 2 } 271 1 } 272 273 274 //Ö±½Ó¹ØµôµÆ,²¢¼Ç¼״̬ 275 void Close_Light(u8 i) 276 { C51 COMPILER V9.01 PWM_CONTROL 12/16/2025 16:53:47 PAGE 6 277 1 s_pwm.currpwm[i]=20001ul; //³ÖÐøÊä³ö¸ßµçƽ£¬·Ç³£ÌØÊ⣬Îð¸Ä 278 1 } 279 280 //´ò¿ªµÆÊ±£¬»á»Ø¸´µ½Ô­À´µÄÁÁ¶È 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/16/2025 16:53:47 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)