C51 COMPILER V9.01 UART_SET 12/16/2025 16:53:47 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 */ 19 void Usart_judge_Data(void) 20 { 21 1 u8 len = 0; 22 1 u8 i, sum; 23 1 sum = 0; 24 1 g_Usart.ok_flag = 0; 25 1 26 1 if((recv_start_flag==1)&&(systick_1ms-recv_time>8)) 27 1 { 28 2 recv_start_flag=0; 29 2 #if DEBUG_ { for(i=0;i s_recv.B_max) 129 5 { 130 6 s_recv.B_Ch[i] = s_recv.B_max; 131 6 } 132 5 133 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]; 134 5 s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //更新调光起始点 135 5 136 5 s_recv.gradual_time[i] = g_Usart.recv_buffer[9] * 10; /*接收的渐变时间*/ 137 5 /* 138 5 除数不能为零 139 5 */ 140 5 if (s_recv.gradual_time[i] == 0) 141 5 { 142 6 s_recv.gradual_time[i] = 1; 143 6 } 144 5 145 5 /*计算10ms处理的pwm步进值*/ 146 5 if (s_pwm.wanttopwm[i] > s_pwm.currpwm[i]) 147 5 { 148 6 s_pwm.every_change_10ms[i] = (float)(s_pwm.wanttopwm[i] - s_pwm.currpwm[i]) / s_ -recv.gradual_time[i]; 149 6 if (s_pwm.every_change_10ms[i] < 1) 150 6 { 151 7 s_pwm.every_change_10ms[i] = 1; 152 7 } 153 6 } 154 5 155 5 if (s_pwm.wanttopwm[i] < s_pwm.currpwm[i]) 156 5 { 157 6 s_pwm.every_change_10ms[i] = (float)(s_pwm.currpwm[i] - s_pwm.wanttopwm[i]) / s_ -recv.gradual_time[i]; 158 6 if (s_pwm.every_change_10ms[i] < 1) 159 6 { 160 7 s_pwm.every_change_10ms[i] = 1; 161 7 } 162 6 } 163 5 } 164 4 } 165 3 166 3 //第二个使能位 167 3 for (i = 0; i < 4; i++) 168 3 { 169 4 if (g_Usart.recv_buffer[8] & (1 << i)) 170 4 { 171 5 s_recv.flag1[i+8] = 1; 172 5 s_recv.flag2[i+8] = 0; 173 5 s_recv.B_Ch[i+8] = g_Usart.recv_buffer[13 - i]; C51 COMPILER V9.01 UART_SET 12/16/2025 16:53:47 PAGE 4 174 5 175 5 if (s_recv.B_Ch[i+8] < s_recv.B_min) 176 5 { 177 6 s_recv.B_Ch[i+8] = s_recv.B_min; 178 6 } 179 5 180 5 if (s_recv.B_Ch[i+8] > s_recv.B_max) 181 5 { 182 6 s_recv.B_Ch[i+8] = s_recv.B_max; 183 6 } 184 5 185 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]; 186 5 s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //更新调光起始点 187 5 188 5 s_recv.gradual_time[i+8] = g_Usart.recv_buffer[9] * 10; /*接收的渐变时间*/ 189 5 190 5 /* 191 5 除数不能为零 192 5 */ 193 5 if (s_recv.gradual_time[i+8] == 0) 194 5 { 195 6 s_recv.gradual_time[i+8] = 1; 196 6 } 197 5 198 5 /*计算10ms处理的pwm步进值*/ 199 5 if (s_pwm.wanttopwm[i+8] > s_pwm.currpwm[i+8]) 200 5 { 201 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]; 202 6 if (s_pwm.every_change_10ms[i+8] < 1) 203 6 { 204 7 s_pwm.every_change_10ms[i+8] = 1; 205 7 } 206 6 } 207 5 208 5 209 5 if (s_pwm.wanttopwm[i+8] < s_pwm.currpwm[i+8]) 210 5 { 211 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]; 212 6 if (s_pwm.every_change_10ms[i+8] < 1) 213 6 { 214 7 s_pwm.every_change_10ms[i+8] = 1; 215 7 } 216 6 } 217 5 } 218 4 } 219 3 220 3 g_answer.short_answer_flag=0x01; 221 3 break; 222 3 223 3 224 3 //设置模式:递增、递减和循环 225 3 case USART_CMD_SET_MODE: 226 3 g_answer.short_answer[UART_FMT_CMD]=USART_CMD_SET_MODE_A; 227 3 if(debug) 228 3 { 229 4 PrintString1("change light"); 230 4 } 231 3 232 3 for (i = 0; i < 8; i++) C51 COMPILER V9.01 UART_SET 12/16/2025 16:53:47 PAGE 5 233 3 { 234 4 if (g_Usart.recv_buffer[7] & (1 << i)) 235 4 { 236 5 s_recv.flag1[i] = 0; 237 5 s_recv.flag2[i] = 1; 238 5 s_recv.mode[i] = g_Usart.recv_buffer[9]; 239 5 s_recv.pwm_step[i] = g_Usart.recv_buffer[11]; 240 5 241 5 if (s_recv.mode[i] == 0x00) 242 5 { 243 6 if (g_Usart.recv_buffer[10] == 0x00) 244 6 { 245 7 s_recv.forward[i] = 0; 246 7 } 247 6 248 6 if (g_Usart.recv_buffer[10] == 0x01) 249 6 { 250 7 s_recv.forward[i] = 1; 251 7 } 252 6 253 6 if (g_Usart.recv_buffer[10] == 0x02) //翻转 254 6 { 255 7 if (s_recv.forward[i] == 0x01) 256 7 { 257 8 s_recv.forward[i] = 0x00; 258 8 continue; // 为防止翻转之后直接进入下一个状态 259 8 } 260 7 261 7 if (s_recv.forward[i] == 0x00) 262 7 { 263 8 s_recv.forward[i] = 0x01; 264 8 continue; 265 8 } 266 7 } 267 6 } 268 5 } 269 4 } 270 3 271 3 272 3 for (i = 0; i < 4; i++) 273 3 { 274 4 if (g_Usart.recv_buffer[8] & (1 << i)) 275 4 { 276 5 s_recv.flag1[i+8] = 0; 277 5 s_recv.flag2[i+8] = 1; 278 5 s_recv.mode[i+8] = g_Usart.recv_buffer[9]; 279 5 s_recv.pwm_step[i+8] = g_Usart.recv_buffer[11]; 280 5 281 5 if (s_recv.mode[i+8] == 0x00) 282 5 { 283 6 if (g_Usart.recv_buffer[10] == 0x00) 284 6 { 285 7 s_recv.forward[i+8] = 0; 286 7 } 287 6 288 6 if (g_Usart.recv_buffer[10] == 0x01) 289 6 { 290 7 s_recv.forward[i+8] = 1; 291 7 } 292 6 293 6 if (g_Usart.recv_buffer[10] == 0x02) //翻转 294 6 { C51 COMPILER V9.01 UART_SET 12/16/2025 16:53:47 PAGE 6 295 7 if (s_recv.forward[i+8] == 0x01) 296 7 { 297 8 s_recv.forward[i+8] = 0x00; 298 8 continue; // 为防止翻转之后直接进入下一个状态 299 8 } 300 7 301 7 if (s_recv.forward[i+8] == 0x00) 302 7 { 303 8 s_recv.forward[i+8] = 0x01; 304 8 continue; 305 8 } 306 7 } 307 6 } 308 5 } 309 4 } 310 3 g_answer.short_answer_flag=0x01; 311 3 break; 312 3 313 3 314 3 //设置整体亮度 315 3 case USART_CMD_ALL_BRIGHTNESS: 316 3 g_answer.short_answer[UART_FMT_CMD]=USART_CMD_ALL_BRIGHTNESS_A; 317 3 318 3 if(debug) 319 3 { 320 4 PrintString1("global light"); 321 4 } 322 3 323 3 // s_recv.changeflag = 1; 324 3 if (g_Usart.recv_buffer[7] & (1 << 5)) //全局可调下限 325 3 { 326 4 s_recv.B_min = g_Usart.recv_buffer[10]; 327 4 for (i = 0; i < 12; i++) 328 4 { 329 5 if ( s_pwm.currvalue[i] < s_recv.B_min) 330 5 { 331 6 s_pwm.currvalue[i] = s_recv.B_min; 332 6 } 333 5 } 334 4 } 335 3 336 3 if (g_Usart.recv_buffer[7] & (1 << 6)) //全局可调上限 337 3 { 338 4 s_recv.B_max = g_Usart.recv_buffer[9]; 339 4 for (i = 0; i < 12; i++) 340 4 { 341 5 if ( s_pwm.currvalue[i] > s_recv.B_max) 342 5 { 343 6 s_pwm.currvalue[i] = s_recv.B_max; 344 6 } 345 5 } 346 4 } 347 3 348 3 if (g_Usart.recv_buffer[7] & (1 << 7)) //全局亮度 349 3 { 350 4 s_recv.global_brightness = g_Usart.recv_buffer[8]; 351 4 352 4 for (i = 0; i < 12; i++) 353 4 { 354 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]; 355 5 C51 COMPILER V9.01 UART_SET 12/16/2025 16:53:47 PAGE 7 356 5 s_recv.flag1[i] = 1; 357 5 s_recv.flag2[i] = 0; 358 5 359 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]; 360 5 s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //更新调光起始点 361 5 if(s_pwm.wanttopwm[i] > PWM_MAX_VALUE) 362 5 { 363 6 s_pwm.wanttopwm[i] = PWM_MAX_VALUE; 364 6 } 365 5 366 5 /*计算10ms处理的pwm步进值*/ 367 5 if (s_pwm.wanttopwm[i] > s_pwm.currpwm[i]) 368 5 { 369 6 s_pwm.every_change_10ms[i] = (float)(s_pwm.wanttopwm[i] - s_pwm.currpwm[i]) -/ s_recv.gradual_time[i]; 370 6 if (s_pwm.every_change_10ms[i] < 1) 371 6 { 372 7 s_pwm.every_change_10ms[i] = 1; 373 7 } 374 6 } 375 5 376 5 if (s_pwm.wanttopwm[i] < s_pwm.currpwm[i]) 377 5 { 378 6 s_pwm.every_change_10ms[i] = (float)(s_pwm.currpwm[i] - s_pwm.wanttopwm[i]) -/ s_recv.gradual_time[i]; 379 6 if (s_pwm.every_change_10ms[i] < 1) 380 6 { 381 7 s_pwm.every_change_10ms[i] = 1; 382 7 } 383 6 } 384 5 } 385 4 } 386 3 387 3 388 3 g_answer.short_answer_flag=0x01; 389 3 break; 390 3 391 3 392 3 //设置开关状态 393 3 case USART_CMD_SWITCH_STATUS: 394 3 g_answer.short_answer[UART_FMT_CMD]=USART_CMD_SWITCH_STATUS_A; 395 3 if(debug) 396 3 { 397 4 PrintString1("switch state"); 398 4 } 399 3 400 3 for (i = 0; i < 8; i++) 401 3 { 402 4 if (g_Usart.recv_buffer[7] & (1 << i)) 403 4 { 404 5 if (g_Usart.recv_buffer[9 + i] == 0x01) 405 5 { 406 6 s_recv.key_status[i] = 0x01; 407 6 //s_pwm.currvalue[i] = s_pwm.thenvalue[i]; 408 6 Open_Light(i); 409 6 } 410 5 411 5 if (g_Usart.recv_buffer[9 + i] == 0x00) 412 5 { 413 6 //s_pwm.thenvalue[i] = s_pwm.currvalue[i]; 414 6 Close_Light(i); C51 COMPILER V9.01 UART_SET 12/16/2025 16:53:47 PAGE 8 415 6 s_recv.flag1[i] = 0; 416 6 s_recv.flag2[i] = 0; 417 6 s_recv.mode[i] = 2; 418 6 s_recv.key_status[i] = 0x00; 419 6 } 420 5 421 5 if (g_Usart.recv_buffer[9 + i] == 0x02) 422 5 { 423 6 if (s_recv.key_status[i] == 0x00) 424 6 { 425 7 s_recv.key_status[i] = 0x01; 426 7 //s_pwm.currvalue[i] = s_pwm.thenvalue[i]; 427 7 Open_Light(i); 428 7 continue; 429 7 } 430 6 431 6 if (s_recv.key_status[i] == 0x01) 432 6 { 433 7 //s_pwm.thenvalue[i] = s_pwm.currvalue[i]; 434 7 Close_Light(i); 435 7 s_recv.flag1[i] = 0; 436 7 s_recv.flag2[i] = 0; 437 7 s_recv.mode[i] = 2; 438 7 s_recv.key_status[i] = 0x00; 439 7 continue; 440 7 } 441 6 } 442 5 } 443 4 } 444 3 445 3 446 3 for (i = 0; i < 4; i++) 447 3 { 448 4 if (g_Usart.recv_buffer[8] & (1 << i)) 449 4 { 450 5 if (g_Usart.recv_buffer[9 + 8 + i] == 0x01) 451 5 { 452 6 s_recv.key_status[i+8] = 0x01; 453 6 //s_pwm.currvalue[i+8] = s_pwm.thenvalue[i]; 454 6 Open_Light(i+8); 455 6 } 456 5 457 5 if (g_Usart.recv_buffer[9 +8 + i] == 0x00) 458 5 { 459 6 //s_pwm.thenvalue[i+8] = s_pwm.currvalue[i+8]; 460 6 Close_Light(i+8); 461 6 s_recv.flag1[i+8] = 0; 462 6 s_recv.flag2[i+8] = 0; 463 6 s_recv.mode[i+8] = 2; 464 6 s_recv.key_status[i+8] = 0x00; 465 6 } 466 5 467 5 if (g_Usart.recv_buffer[9 + 8 + i] == 0x02) 468 5 { 469 6 if (s_recv.key_status[i+8] == 0x00) 470 6 { 471 7 s_recv.key_status[i+8] = 0x01; 472 7 //s_pwm.currvalue[i+8] = s_pwm.thenvalue[i]; 473 7 Open_Light(i+8); 474 7 continue; 475 7 } 476 6 C51 COMPILER V9.01 UART_SET 12/16/2025 16:53:47 PAGE 9 477 6 478 6 if (s_recv.key_status[i+8] == 0x01) 479 6 { 480 7 //s_pwm.thenvalue[i+8] = s_pwm.currvalue[i+8]; 481 7 Close_Light(i+8); 482 7 s_recv.flag1[i+8] = 0; 483 7 s_recv.flag2[i+8] = 0; 484 7 s_recv.mode[i+8] = 2; 485 7 s_recv.key_status[i+8] = 0x00; 486 7 continue; 487 7 } 488 6 } 489 5 } 490 4 } 491 3 g_answer.short_answer_flag=0x01; 492 3 break; 493 3 case USART_CMD_DEBUG_SET: 494 3 g_answer.short_answer[UART_FMT_CMD]=USART_CMD_DEBUG_SET_A; 495 3 if(debug) 496 3 { 497 4 PrintString1("debug"); 498 4 } 499 3 debug = g_Usart.recv_buffer[7]; 500 3 g_answer.short_answer_flag=0x01; 501 3 break; 502 3 case Usart_CMD_Version: 503 3 g_answer.version_answer[UART_FMT_CMD]=Usart_CMD_Version_A; 504 3 g_answer.version_answer_flag=0x01; 505 3 if(debug) 506 3 { 507 4 PrintString1("version"); 508 4 } 509 3 break; 510 3 } 511 2 g_Usart.ok_flag=0; 512 2 } 513 1 } 514 515 void Usart_answer(void) 516 { 517 1 u8 i=0; 518 1 u8 checksum=0; 519 1 if(g_answer.long_answer_flag) 520 1 { 521 2 g_answer.long_answer[UART_FMT_ADDR_TX]=ADDR_RX; 522 2 g_answer.long_answer[UART_FMT_TYPE]=g_Usart.Sn; 523 2 g_answer.long_answer[UART_FMT_DEV_TYPE]=DEV_TYPE; 524 2 g_answer.long_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX]; 525 2 g_answer.long_answer[UART_FMT_LEN]=0x14; 526 2 g_answer.long_answer[7] = s_recv.global_brightness; 527 2 for(i=0;i<12;i++) 528 2 { 529 3 g_answer.long_answer[8+i] = s_pwm.currvalue[11-i]; 530 3 if(s_recv.key_status[i] == 0x01) 531 3 { 532 4 g_answer.long_answer[8+i] |= 0x80; 533 4 } 534 3 } 535 2 checksum=sumfunc(g_answer.long_answer,0x14); 536 2 g_answer.long_answer[UART_FMT_CKS]=checksum; 537 2 538 2 Printbuffer3(g_answer.long_answer,0x14); //串口3输出打印 C51 COMPILER V9.01 UART_SET 12/16/2025 16:53:47 PAGE 10 539 2 540 2 if(debug) 541 2 { 542 3 // PrintString1("long answer"); 543 3 } 544 2 g_answer.long_answer_flag=0; 545 2 memset(g_Usart.recv_buffer,0,32); 546 2 } 547 1 if(g_answer.short_answer_flag) 548 1 { 549 2 g_answer.short_answer[UART_FMT_ADDR_TX]=ADDR_RX; 550 2 g_answer.short_answer[UART_FMT_TYPE]=g_Usart.Sn; 551 2 g_answer.short_answer[UART_FMT_DEV_TYPE]=DEV_TYPE; 552 2 g_answer.short_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX]; 553 2 g_answer.short_answer[UART_FMT_LEN]=0x07; 554 2 checksum=sumfunc(g_answer.short_answer,0x07); 555 2 g_answer.short_answer[UART_FMT_CKS]=checksum; 556 2 Printbuffer3(g_answer.short_answer,0x07); 557 2 if(debug) 558 2 { 559 3 PrintString1("short answer"); 560 3 } 561 2 562 2 563 2 g_answer.short_answer_flag=0; 564 2 memset(g_Usart.recv_buffer,0,32); 565 2 } 566 1 567 1 if(g_answer.version_answer_flag) 568 1 { 569 2 g_answer.version_answer[UART_FMT_ADDR_TX]=ADDR_RX; 570 2 g_answer.version_answer[UART_FMT_TYPE]=g_Usart.Sn; 571 2 g_answer.version_answer[UART_FMT_DEV_TYPE]=DEV_TYPE; 572 2 g_answer.version_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX]; 573 2 g_answer.version_answer[UART_FMT_LEN]=0x09; 574 2 g_answer.version_answer[UART_FMT_CMD+1]=Version_High; 575 2 g_answer.version_answer[UART_FMT_CMD+2]=Version_Low; 576 2 577 2 checksum=sumfunc(g_answer.version_answer,0x09); 578 2 g_answer.version_answer[UART_FMT_CKS]=checksum; 579 2 Printbuffer3(g_answer.version_answer,0x09); 580 2 if(debug) 581 2 { 582 3 PrintString1("version_answer"); 583 3 } 584 2 g_answer.version_answer_flag=0; 585 2 memset(g_Usart.recv_buffer,0,32); 586 2 } 587 1 memset(&g_answer,0,sizeof(g_answer)); 588 1 } 589 590 u8 sumfunc(u8* answer,u8 len) 591 { 592 1 u8 m = 0; 593 1 u8 j; 594 1 for (j = 0; j < len; j++) 595 1 { 596 2 if (5 == j) continue; 597 2 m += *(answer+j); 598 2 } 599 1 return ~m; 600 1 } C51 COMPILER V9.01 UART_SET 12/16/2025 16:53:47 PAGE 11 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)