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

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
Objects/*.obj

71
GPIO.c Normal file
View File

@@ -0,0 +1,71 @@
#include "GPIO.h"
//========================================================================
// <20><><EFBFBD><EFBFBD>: u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx)
// <20><><EFBFBD><EFBFBD>: <20><>ʼ<EFBFBD><CABC>IO<49><4F>.
// <20><><EFBFBD><EFBFBD>: GPIOx: <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD>,<2C><><EFBFBD>ο<EFBFBD>timer.h<><68><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>0, <20>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1,<2C><><EFBFBD>󷵻<EFBFBD>2.
// <20>汾: V1.0, 2012-10-22
//========================================================================
u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx)
{
if(GPIO > GPIO_P7) return 1; //<2F>ղ<EFBFBD><D5B2><EFBFBD>
if(GPIOx->Mode > GPIO_OUT_PP) return 2; //<2F><><EFBFBD><EFBFBD>
if(GPIO == GPIO_P0)
{
if(GPIOx->Mode == GPIO_PullUp) P0M1 &= ~GPIOx->Pin, P0M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_HighZ) P0M1 |= GPIOx->Pin, P0M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_OD) P0M1 |= GPIOx->Pin, P0M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_PP) P0M1 &= ~GPIOx->Pin, P0M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if(GPIO == GPIO_P1)
{
if(GPIOx->Mode == GPIO_PullUp) P1M1 &= ~GPIOx->Pin, P1M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_HighZ) P1M1 |= GPIOx->Pin, P1M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_OD) P1M1 |= GPIOx->Pin, P1M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_PP) P1M1 &= ~GPIOx->Pin, P1M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if(GPIO == GPIO_P2)
{
if(GPIOx->Mode == GPIO_PullUp) P2M1 &= ~GPIOx->Pin, P2M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_HighZ) P2M1 |= GPIOx->Pin, P2M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_OD) P2M1 |= GPIOx->Pin, P2M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_PP) P2M1 &= ~GPIOx->Pin, P2M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if(GPIO == GPIO_P3)
{
if(GPIOx->Mode == GPIO_PullUp) P3M1 &= ~GPIOx->Pin, P3M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_HighZ) P3M1 |= GPIOx->Pin, P3M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_OD) P3M1 |= GPIOx->Pin, P3M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_PP) P3M1 &= ~GPIOx->Pin, P3M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if(GPIO == GPIO_P4)
{
if(GPIOx->Mode == GPIO_PullUp) P4M1 &= ~GPIOx->Pin, P4M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_HighZ) P4M1 |= GPIOx->Pin, P4M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_OD) P4M1 |= GPIOx->Pin, P4M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_PP) P4M1 &= ~GPIOx->Pin, P4M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if(GPIO == GPIO_P5)
{
if(GPIOx->Mode == GPIO_PullUp) P5M1 &= ~GPIOx->Pin, P5M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_HighZ) P5M1 |= GPIOx->Pin, P5M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_OD) P5M1 |= GPIOx->Pin, P5M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_PP) P5M1 &= ~GPIOx->Pin, P5M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if(GPIO == GPIO_P6)
{
if(GPIOx->Mode == GPIO_PullUp) P6M1 &= ~GPIOx->Pin, P6M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_HighZ) P6M1 |= GPIOx->Pin, P6M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_OD) P6M1 |= GPIOx->Pin, P6M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_PP) P6M1 &= ~GPIOx->Pin, P6M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if(GPIO == GPIO_P7)
{
if(GPIOx->Mode == GPIO_PullUp) P7M1 &= ~GPIOx->Pin, P7M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_HighZ) P7M1 |= GPIOx->Pin, P7M0 &= ~GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_OD) P7M1 |= GPIOx->Pin, P7M0 |= GPIOx->Pin; //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
if(GPIOx->Mode == GPIO_OUT_PP) P7M1 &= ~GPIOx->Pin, P7M0 |= GPIOx->Pin; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return 0; //<2F>ɹ<EFBFBD>
}

41
GPIO.h Normal file
View File

@@ -0,0 +1,41 @@
#ifndef __GPIO_H
#define __GPIO_H
#include "config.h"
#define GPIO_PullUp 0 //<2F><><EFBFBD><EFBFBD>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
#define GPIO_HighZ 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define GPIO_OUT_OD 2 //<2F><>©<EFBFBD><C2A9><EFBFBD><EFBFBD>
#define GPIO_OUT_PP 3 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define GPIO_Pin_0 0x01 //IO<49><4F><EFBFBD><EFBFBD> Px.0
#define GPIO_Pin_1 0x02 //IO<49><4F><EFBFBD><EFBFBD> Px.1
#define GPIO_Pin_2 0x04 //IO<49><4F><EFBFBD><EFBFBD> Px.2
#define GPIO_Pin_3 0x08 //IO<49><4F><EFBFBD><EFBFBD> Px.3
#define GPIO_Pin_4 0x10 //IO<49><4F><EFBFBD><EFBFBD> Px.4
#define GPIO_Pin_5 0x20 //IO<49><4F><EFBFBD><EFBFBD> Px.5
#define GPIO_Pin_6 0x40 //IO<49><4F><EFBFBD><EFBFBD> Px.6
#define GPIO_Pin_7 0x80 //IO<49><4F><EFBFBD><EFBFBD> Px.7
#define GPIO_Pin_All 0xFF //IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define GPIO_Pin_Left 0x0F //IO<49><4F>1,2,3,4<><34>
#define GPIO_P0 0
#define GPIO_P1 1
#define GPIO_P2 2
#define GPIO_P3 3
#define GPIO_P4 4
#define GPIO_P5 5
#define GPIO_P6 6
#define GPIO_P7 7
typedef struct
{
u8 Mode; //IOģʽ, GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
u8 Pin; //Ҫ<><D2AA><EFBFBD>õĶ˿<C4B6>
} GPIO_InitTypeDef;
u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx);
#endif

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)

BIN
Objects/BLV_C12_Dimm_V19 Normal file

Binary file not shown.

View File

@@ -0,0 +1,54 @@
<html>
<body>
<pre>
<h1><EFBFBD>Vision Build Log</h1>
<h2>Tool Versions:</h2>
IDE-Version: <20><>Vision V5.29.0.0
Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
License Information: cc cc, cc, LIC=9W1BF-6PVU2-D80FM-XPSKK-ZUPXX-GN4UD
Tool Versions:
Toolchain: PK51 Prof. Developers Kit Version: 9.01
Toolchain Path: D:\Keil_v5\C51\BIN
C Compiler: C51.exe V9.01
Assembler: A51.exe V8.02
Linker/Locator: BL51.exe V6.22
Library Manager: LIB51.exe V4.24
Hex Converter: OH51.exe V2.6
CPU DLL: S8051.DLL V3.72
Dialog DLL: DP51.DLL V2.59
Target DLL: STCMON51.DLL V0, 1, 0, 17
Dialog DLL: TP51.DLL V2.58
<h2>Project:</h2>
E:\Git_Project_Sourcode\RCU_C12_Dimming\light_V19.uvproj
Project File Date: 12/15/2025
<h2>Output:</h2>
Rebuild target 'Target 1'
compiling GPIO.c...
compiling main.c...
compiling UART.C...
compiling UART_Set.c...
compiling pwm_control.c...
compiling Start_Init.c...
compiling PWM15bit.c...
compiling timer.c...
compiling key.c...
compiling WDT.c...
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_PRINTBUFFER1?UART
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_PRINTSTRING3?UART
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_QPWM15DUTY?PWM15BIT
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_PWMLEVELSET?PWM15BIT
Program Size: data=77.0 xdata=641 code=15470
creating hex file from ".\Objects\BLV_C12_Dimm_V19"...
".\Objects\BLV_C12_Dimm_V19" - 0 Error(s), 4 Warning(s).
Build Time Elapsed: 00:00:01
</pre>
</body>
</html>

1042
Objects/BLV_C12_Dimm_V19.hex Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
".\Objects\GPIO.obj",
".\Objects\main.obj",
".\Objects\UART.obj",
".\Objects\UART_Set.obj",
".\Objects\pwm_control.obj",
".\Objects\Start_Init.obj",
".\Objects\PWM15bit.obj",
".\Objects\timer.obj",
".\Objects\key.obj",
".\Objects\WDT.obj"
TO ".\Objects\BLV_C12_Dimm_V19"
PRINT(".\Listings\BLV_C12_Dimm_V19.m51") RAMSIZE(256)

534
PWM15bit.c Normal file
View File

@@ -0,0 +1,534 @@
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
/* --- QQ: 800003751 -------------------------------------------------*/
/* <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> */
/*---------------------------------------------------------------------*/
#include "PWM15bit.h"
u16 code PWMxCR[48] = {
0xff14, /* PWM00CR */
0xff1c, /* PWM01CR */
0xff24, /* PWM02CR */
0xff2c, /* PWM03CR */
0xff34, /* PWM04CR */
0xff3c, /* PWM05CR */
0xff44, /* PWM06CR */
0xff4c, /* PWM07CR */
0xff64, /* PWM10CR */
0xff6c, /* PWM11CR */
0xff74, /* PWM12CR */
0xff7c, /* PWM13CR */
0xff84, /* PWM14CR */
0xff8c, /* PWM15CR */
0xff94, /* PWM16CR */
0xff9c, /* PWM17CR */
0xffb4, /* PWM20CR */
0xffbc, /* PWM21CR */
0xffc4, /* PWM22CR */
0xffcc, /* PWM23CR */
0xffd4, /* PWM24CR */
0xffdc, /* PWM25CR */
0xffe4, /* PWM26CR */
0xffec, /* PWM27CR */
0xfc14, /* PWM30CR */
0xfc1c, /* PWM31CR */
0xfc24, /* PWM32CR */
0xfc2c, /* PWM33CR */
0xfc34, /* PWM34CR */
0xfc3c, /* PWM35CR */
0xfc44, /* PWM36CR */
0xfc4c, /* PWM37CR */
0xfc64, /* PWM40CR */
0xfc6c, /* PWM41CR */
0xfc74, /* PWM42CR */
0xfc7c, /* PWM43CR */
0xfc84, /* PWM44CR */
0xfc8c, /* PWM45CR */
0xfc94, /* PWM46CR */
0xfc9c, /* PWM47CR */
0xfcb4, /* PWM50CR */
0xfcbc, /* PWM51CR */
0xfcc4, /* PWM52CR */
0xfccc, /* PWM53CR */
0xfcd4, /* PWM54CR */
0xfcdc, /* PWM55CR */
0xfce4, /* PWM56CR */
0xfcec, /* PWM57CR */
};
u16 code PWMxT1[48] = {
0xff10, /* PWM00T1 */
0xff18, /* PWM01T1 */
0xff20, /* PWM02T1 */
0xff28, /* PWM03T1 */
0xff30, /* PWM04T1 */
0xff38, /* PWM05T1 */
0xff40, /* PWM06T1 */
0xff48, /* PWM07T1 */
0xff60, /* PWM10T1 */
0xff68, /* PWM11T1 */
0xff70, /* PWM12T1 */
0xff78, /* PWM13T1 */
0xff80, /* PWM14T1 */
0xff88, /* PWM15T1 */
0xff90, /* PWM16T1 */
0xff98, /* PWM17T1 */
0xffb0, /* PWM20T1 */
0xffb8, /* PWM21T1 */
0xffc0, /* PWM22T1 */
0xffc8, /* PWM23T1 */
0xffd0, /* PWM24T1 */
0xffd8, /* PWM25T1 */
0xffe0, /* PWM26T1 */
0xffe8, /* PWM27T1 */
0xfc10, /* PWM30T1 */
0xfc18, /* PWM31T1 */
0xfc20, /* PWM32T1 */
0xfc28, /* PWM33T1 */
0xfc30, /* PWM34T1 */
0xfc38, /* PWM35T1 */
0xfc40, /* PWM36T1 */
0xfc48, /* PWM37T1 */
0xfc60, /* PWM40T1 */
0xfc68, /* PWM41T1 */
0xfc70, /* PWM42T1 */
0xfc78, /* PWM43T1 */
0xfc80, /* PWM44T1 */
0xfc88, /* PWM45T1 */
0xfc90, /* PWM46T1 */
0xfc98, /* PWM47T1 */
0xfcb0, /* PWM50T1 */
0xfcb8, /* PWM51T1 */
0xfcc0, /* PWM52T1 */
0xfcc8, /* PWM53T1 */
0xfcd0, /* PWM54T1 */
0xfcd8, /* PWM55T1 */
0xfce0, /* PWM56T1 */
0xfce8, /* PWM57T1 */
};
u16 code PWMxT2[48] = {
0xff12, /* PWM00T2 */
0xff1a, /* PWM01T2 */
0xff22, /* PWM02T2 */
0xff2a, /* PWM03T2 */
0xff32, /* PWM04T2 */
0xff3a, /* PWM05T2 */
0xff42, /* PWM06T2 */
0xff4a, /* PWM07T2 */
0xff62, /* PWM10T2 */
0xff6a, /* PWM11T2 */
0xff72, /* PWM12T2 */
0xff7a, /* PWM13T2 */
0xff82, /* PWM14T2 */
0xff8a, /* PWM15T2 */
0xff92, /* PWM16T2 */
0xff9a, /* PWM17T2 */
0xffb2, /* PWM20T2 */
0xffba, /* PWM21T2 */
0xffc2, /* PWM22T2 */
0xffca, /* PWM23T2 */
0xffd2, /* PWM24T2 */
0xffda, /* PWM25T2 */
0xffe2, /* PWM26T2 */
0xffea, /* PWM27T2 */
0xfc12, /* PWM30T2 */
0xfc1a, /* PWM31T2 */
0xfc22, /* PWM32T2 */
0xfc2a, /* PWM33T2 */
0xfc32, /* PWM34T2 */
0xfc3a, /* PWM35T2 */
0xfc42, /* PWM36T2 */
0xfc4a, /* PWM37T2 */
0xfc62, /* PWM40T2 */
0xfc6a, /* PWM41T2 */
0xfc72, /* PWM42T2 */
0xfc7a, /* PWM43T2 */
0xfc82, /* PWM44T2 */
0xfc8a, /* PWM45T2 */
0xfc92, /* PWM46T2 */
0xfc9a, /* PWM47T2 */
0xfcb2, /* PWM50T2 */
0xfcba, /* PWM51T2 */
0xfcc2, /* PWM52T2 */
0xfcca, /* PWM53T2 */
0xfcd2, /* PWM54T2 */
0xfcda, /* PWM55T2 */
0xfce2, /* PWM56T2 */
0xfcea, /* PWM57T2 */
};
u16 code PWMxHLD[48] = {
0xff15, /* PWM00HLD */
0xff1d, /* PWM01HLD */
0xff25, /* PWM02HLD */
0xff2d, /* PWM03HLD */
0xff35, /* PWM04HLD */
0xff3d, /* PWM05HLD */
0xff45, /* PWM06HLD */
0xff4d, /* PWM07HLD */
0xff65, /* PWM10HLD */
0xff6d, /* PWM11HLD */
0xff75, /* PWM12HLD */
0xff7d, /* PWM13HLD */
0xff85, /* PWM14HLD */
0xff8d, /* PWM15HLD */
0xff95, /* PWM16HLD */
0xff9d, /* PWM17HLD */
0xffb5, /* PWM20HLD */
0xffbd, /* PWM21HLD */
0xffc5, /* PWM22HLD */
0xffcd, /* PWM23HLD */
0xffd5, /* PWM24HLD */
0xffdd, /* PWM25HLD */
0xffe5, /* PWM26HLD */
0xffed, /* PWM27HLD */
0xfc15, /* PWM30HLD */
0xfc1d, /* PWM31HLD */
0xfc25, /* PWM32HLD */
0xfc2d, /* PWM33HLD */
0xfc35, /* PWM34HLD */
0xfc3d, /* PWM35HLD */
0xfc45, /* PWM36HLD */
0xfc4d, /* PWM37HLD */
0xfc65, /* PWM40HLD */
0xfc6d, /* PWM41HLD */
0xfc75, /* PWM42HLD */
0xfc7d, /* PWM43HLD */
0xfc85, /* PWM44HLD */
0xfc8d, /* PWM45HLD */
0xfc95, /* PWM46HLD */
0xfc9d, /* PWM47HLD */
0xfcb5, /* PWM50HLD */
0xfcbd, /* PWM51HLD */
0xfcc5, /* PWM52HLD */
0xfccd, /* PWM53HLD */
0xfcd5, /* PWM54HLD */
0xfcdd, /* PWM55HLD */
0xfce5, /* PWM56HLD */
0xfced, /* PWM57HLD */
};
//========================================================================
// <20><><EFBFBD><EFBFBD>: u8 PWMChannelCtrl(u8 PWM_id, u8 pwm_eno, u8 pwm_ini, u8 pwm_eni, u8 pwm_ent2i, u8 pwm_ent1i)
// <20><><EFBFBD><EFBFBD>: PWMͨ<4D><CDA8><EFBFBD><EFBFBD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: PWM_id: PWMͨ<4D><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ȡֵ 0~57
// pwm_eno: pwm<77><6D><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, 0<><30>ΪGPIO, 1<><31>ΪPWM<57><4D><EFBFBD><EFBFBD>.
// pwm_ini: pwm<77><6D><EFBFBD><EFBFBD><EFBFBD>˵ij<CBB5>ʼ<EFBFBD><CABC>ƽ, 0Ϊ<30>͵<EFBFBD>ƽ, 1Ϊ<31>ߵ<EFBFBD>ƽ.
// pwm_eni: pwmͨ<6D><CDA8><EFBFBD>ж<EFBFBD>ʹ<EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD>, 0Ϊ<30>ر<EFBFBD>PWM<57>ж<EFBFBD>, 1Ϊʹ<CEAA><CAB9>PWM<57>ж<EFBFBD>.
// 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>.
// 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>.
// <20><><EFBFBD><EFBFBD>: 0:<3A><>ȷ, 2:<3A><><EFBFBD><EFBFBD>.
// <20>汾: V1.0, 2020-09-22
//========================================================================
u8 PWMChannelCtrl(u8 PWM_id, u8 pwm_eno, u8 pwm_ini, u8 pwm_eni, u8 pwm_ent2i, u8 pwm_ent1i)
{
u8 xdata *pPWMxCR;
if(PWM_id > PWM57) return 2; //id<69><64><EFBFBD><EFBFBD>
if(pwm_eno > 1) return 2; //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
if(pwm_ini > 1) return 2; //<2F><><EFBFBD><EFBFBD><EFBFBD>˵ij<CBB5>ʼ<EFBFBD><CABC>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
if(pwm_eni > 1) return 2; //<2F>ж<EFBFBD>ʹ<EFBFBD>ܿ<EFBFBD><DCBF>ƴ<EFBFBD><C6B4><EFBFBD>
if(pwm_ent2i > 1) return 2; //<2F>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD>ܿ<EFBFBD><DCBF>ƴ<EFBFBD><C6B4><EFBFBD>
if(pwm_ent1i > 1) return 2; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD>ܿ<EFBFBD><DCBF>ƴ<EFBFBD><C6B4><EFBFBD>
EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չSFR(XSFR) */
pPWMxCR = (u8 *)PWMxCR[PWM_id];
*pPWMxCR = (pwm_eno << 7) | (pwm_ini << 6) | (pwm_eni << 2)| (pwm_ent2i << 1)| pwm_ent1i;
EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չRAM(XRAM) */
return 0;
}
//========================================================================
// <20><><EFBFBD><EFBFBD>: u8 PWMPeriodDuty(u8 PWM_id, u16 Period, u16 dutyL, u16 dutyH)
// <20><><EFBFBD><EFBFBD>: PWM<57><4D><EFBFBD><EFBFBD>, ռ<>ձ<EFBFBD><D5B1><EFBFBD><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: PWM_id: PWMͨ<4D><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ȡֵ 0~57
// dutyL: pwm<77><6D><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽλ<C6BD><CEBB>, ȡֵ 0~0x7fff.
// dutyH: pwm<77><6D><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽλ<C6BD><CEBB>, ȡֵ 0~0x7fff.
// <20><><EFBFBD><EFBFBD>: 0:<3A><>ȷ, 2:<3A><><EFBFBD><EFBFBD>.
// <20>汾: V1.0, 2020-09-22
//========================================================================
u8 PWM15Duty(u8 PWM_id,u16 dutyL)
{
u16 xdata *pPWMxT1;
u16 xdata *pPWMxT2;
if(PWM_id > PWM57) return 2; //id<69><64><EFBFBD><EFBFBD>
if(dutyL > 0x7fff) return 2; //<2F>͵<EFBFBD>ƽʱ<C6BD><CAB1><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
//if(dutyH > 0x7fff) return 2; //<2F>ߵ<EFBFBD>ƽʱ<C6BD><CAB1><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չSFR(XSFR) */
pPWMxT1 = (u16 *)PWMxT1[PWM_id];
*pPWMxT1 = dutyL & 0x7fff;
pPWMxT2 = (u16 *)PWMxT2[PWM_id];
*pPWMxT2 = 0x0000 & 0x7fff;
EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չRAM(XRAM) */
return 0;
}
u8 qPWM15Duty(u8 PWM_id,u16 dutyL, u16 dutyH)
{
u16 xdata *pPWMxT1;
u16 xdata *pPWMxT2;
if(PWM_id > PWM57) return 2; //id<69><64><EFBFBD><EFBFBD>
if(dutyL > 0x7fff) return 2; //<2F>͵<EFBFBD>ƽʱ<C6BD><CAB1><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
if(dutyH > 0x7fff) return 2; //<2F>ߵ<EFBFBD>ƽʱ<C6BD><CAB1><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չSFR(XSFR) */
pPWMxT1 = (u16 *)PWMxT1[PWM_id];
*pPWMxT1 = dutyL & 0x7fff;
pPWMxT2 = (u16 *)PWMxT2[PWM_id];
*pPWMxT2 = dutyH & 0x7fff;
EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չRAM(XRAM) */
return 0;
}
//========================================================================
// <20><><EFBFBD><EFBFBD>: u8 PWMOutputSet(u8 PWM_id, u8 pwm_hldl, u8 pwm_hldh)
// <20><><EFBFBD><EFBFBD>: PWMͨ<4D><CDA8><EFBFBD><EFBFBD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: PWM_id: PWMͨ<4D><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ȡֵ 0~57
// 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>ƽ.
// 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>ƽ.
// <20><><EFBFBD><EFBFBD>: 0:<3A><>ȷ, 2:<3A><><EFBFBD><EFBFBD>.
// <20>汾: V1.0, 2020-09-22
//========================================================================
u8 PWMLevelSet(u8 PWM_id, u8 pwm_hldl, u8 pwm_hldh)
{
u8 xdata *pPWMxHLD;
if(PWM_id > PWM57) return 2; //id<69><64><EFBFBD><EFBFBD>
if(pwm_hldh > 1) return 2; //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
if(pwm_hldl > 1) return 2; //<2F><><EFBFBD><EFBFBD><EFBFBD>˵ij<CBB5>ʼ<EFBFBD><CABC>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չSFR(XSFR) */
pPWMxHLD = (u8 *)PWMxHLD[PWM_id];
*pPWMxHLD = (pwm_hldh << 1) | pwm_hldl;
EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չRAM(XRAM) */
return 0;
}
//========================================================================
// <20><><EFBFBD><EFBFBD>: void PWM15_Init(u8 PWM_id, PWM15_InitTypeDef *PWMx)
// <20><><EFBFBD><EFBFBD>: 15λ<35><CEBB>ǿ<EFBFBD><C7BF>PWM<57><4D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: PWM_id: PWM<57><4D><EFBFBD><EFBFBD>. ȡֵ PWM0,PWM1,PWM2,PWM3,PWM4,PWM5
// PWMx: <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD>,<2C><><EFBFBD>ο<EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: none.
// <20>汾: V1.0, 2020-09-22
//========================================================================
void PWM15_Init(u8 PWM_id, PWM15_InitTypeDef *PWMx)
{
if(PWM_id > PWM5) return; //id<69><64><EFBFBD><EFBFBD>
EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չSFR(XSFR) */
if(PWM_id == PWM0)
{
if(PWMx->PWM_Enable == ENABLE) PWM15_PWM0_Enable(); //ʹ<><CAB9>PWM0
else PWM15_PWM0_Disable(); //<2F>ر<EFBFBD>PWM0
PWM0_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>, 0~15
PWM0C = PWMx->PWM_Period & 0x7fff;
if(PWMx->PWM_Counter == ENABLE) PWM15_Counter0_Enable(); //ʹ<>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>
else PWM15_Counter0_Disable(); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
}
if(PWM_id == PWM1)
{
if(PWMx->PWM_Enable == ENABLE) PWM15_PWM1_Enable(); //ʹ<><CAB9>PWM1
else PWM15_PWM1_Disable(); //<2F>ر<EFBFBD>PWM1
PWM1_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>, 0~15
PWM1C = PWMx->PWM_Period & 0x7fff;
if(PWMx->PWM_Counter == ENABLE) PWM15_Counter1_Enable(); //ʹ<>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>
else PWM15_Counter1_Disable(); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
}
if(PWM_id == PWM2)
{
if(PWMx->PWM_Enable == ENABLE) PWM15_PWM2_Enable(); //ʹ<><CAB9>PWM2
else PWM15_PWM2_Disable(); //<2F>ر<EFBFBD>PWM2
PWM2_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>, 0~15
PWM2C = PWMx->PWM_Period & 0x7fff;
if(PWMx->PWM_Counter == ENABLE) PWM15_Counter2_Enable(); //ʹ<>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>
else PWM15_Counter2_Disable(); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
}
if(PWM_id == PWM3)
{
if(PWMx->PWM_Enable == ENABLE) PWM15_PWM3_Enable(); //ʹ<><CAB9>PWM3
else PWM15_PWM3_Disable(); //<2F>ر<EFBFBD>PWM3
PWM3_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>, 0~15
PWM3C = PWMx->PWM_Period & 0x7fff;
if(PWMx->PWM_Counter == ENABLE) PWM15_Counter3_Enable(); //ʹ<>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>
else PWM15_Counter3_Disable(); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
}
if(PWM_id == PWM4)
{
if(PWMx->PWM_Enable == ENABLE) PWM15_PWM4_Enable(); //ʹ<><CAB9>PWM4
else PWM15_PWM4_Disable(); //<2F>ر<EFBFBD>PWM4
PWM4_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>, 0~15
PWM4C = PWMx->PWM_Period & 0x7fff;
if(PWMx->PWM_Counter == ENABLE) PWM15_Counter4_Enable(); //ʹ<>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>
else PWM15_Counter4_Disable(); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
}
if(PWM_id == PWM5)
{
if(PWMx->PWM_Enable == ENABLE) PWM15_PWM5_Enable(); //ʹ<><CAB9>PWM5
else PWM15_PWM5_Disable(); //<2F>ر<EFBFBD>PWM5
PWM5_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>, 0~15
PWM5C = PWMx->PWM_Period & 0x7fff;
if(PWMx->PWM_Counter == ENABLE) PWM15_Counter5_Enable(); //ʹ<>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>
else PWM15_Counter5_Disable(); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
}
EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,Aָ<41><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>չRAM(XRAM) */
}
//========================================================================
// <20><><EFBFBD><EFBFBD>: void PWM0_Handler (void) interrupt PWM0_VECTOR
// <20><><EFBFBD><EFBFBD>: PWM0<4D>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: None
// <20><><EFBFBD><EFBFBD>: none.
// <20>汾: V1.0, 2020-10-13
//========================================================================
void PWM0_Handler (void) interrupt PWM0_VECTOR
{
char store;
store = P_SW2;
P_SW2 |= 0x80;
if(PWMCFG01 & 0x08) //PWM0<4D>ж<EFBFBD>
{
PWMCFG01 &= ~0x08; //<2F><>PWM0<4D>жϱ<D0B6>־
// TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
}
if(PWM0IF)
{
PWM0IF = 0;
P27 = ~P27;
}
P_SW2 = store;
}
//========================================================================
// <20><><EFBFBD><EFBFBD>: void PWM1_Handler (void) interrupt PWM1_VECTOR
// <20><><EFBFBD><EFBFBD>: PWM1<4D>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: None
// <20><><EFBFBD><EFBFBD>: none.
// <20>汾: V1.0, 2020-10-13
//========================================================================
void PWM1_Handler (void) interrupt PWM1_VECTOR
{
char store;
store = P_SW2;
P_SW2 |= 0x80;
if(PWMCFG01 & 0x80) //PWM1<4D>ж<EFBFBD>
{
PWMCFG01 &= ~0x80; //<2F><>PWM1<4D>жϱ<D0B6>־
// TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
}
if(PWM1IF)
{
PWM1IF = 0;
P26 = ~P26;
}
P_SW2 = store;
}
//========================================================================
// <20><><EFBFBD><EFBFBD>: void PWM2_Handler (void) interrupt PWM2_VECTOR
// <20><><EFBFBD><EFBFBD>: PWM2<4D>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: None
// <20><><EFBFBD><EFBFBD>: none.
// <20>汾: V1.0, 2020-10-13
//========================================================================
void PWM2_Handler (void) interrupt PWM2_VECTOR
{
char store;
store = P_SW2;
P_SW2 |= 0x80;
if(PWMCFG23 & 0x08) //PWM2<4D>ж<EFBFBD>
{
PWMCFG23 &= ~0x08; //<2F><>PWM2<4D>жϱ<D0B6>־
// TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
}
if(PWM2IF)
{
PWM2IF = 0;
P25 = ~P25;
}
P_SW2 = store;
}
//========================================================================
// <20><><EFBFBD><EFBFBD>: void PWM3_Handler (void) interrupt PWM3_VECTOR
// <20><><EFBFBD><EFBFBD>: PWM3<4D>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: None
// <20><><EFBFBD><EFBFBD>: none.
// <20>汾: V1.0, 2020-10-13
//========================================================================
void PWM3_Handler (void) interrupt PWM3_VECTOR
{
char store;
store = P_SW2;
P_SW2 |= 0x80;
if(PWMCFG23 & 0x80) //PWM3<4D>ж<EFBFBD>
{
PWMCFG23 &= ~0x80; //<2F><>PWM3<4D>жϱ<D0B6>־
// TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
}
if(PWM3IF)
{
PWM3IF = 0;
P24 = ~P24;
}
P_SW2 = store;
}
//========================================================================
// <20><><EFBFBD><EFBFBD>: void PWM4_Handler (void) interrupt PWM4_VECTOR
// <20><><EFBFBD><EFBFBD>: PWM4<4D>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: None
// <20><><EFBFBD><EFBFBD>: none.
// <20>汾: V1.0, 2020-10-13
//========================================================================
void PWM4_Handler (void) interrupt PWM4_VECTOR
{
char store;
store = P_SW2;
P_SW2 |= 0x80;
if(PWMCFG45 & 0x08) //PWM4<4D>ж<EFBFBD>
{
PWMCFG45 &= ~0x08; //<2F><>PWM4<4D>жϱ<D0B6>־
// TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
}
if(PWM4IF)
{
PWM4IF = 0;
P23 = ~P23;
}
P_SW2 = store;
}
//========================================================================
// <20><><EFBFBD><EFBFBD>: void PWM5_Handler (void) interrupt PWM5_VECTOR
// <20><><EFBFBD><EFBFBD>: PWM5<4D>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: None
// <20><><EFBFBD><EFBFBD>: none.
// <20>汾: V1.0, 2020-10-13
//========================================================================
//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><EFBFBD><EFBFBD><EFBFBD>
//{
// if(PWMCFG45 & 0x80) //PWM5<4D>ж<EFBFBD>
// {
// PWMCFG45 &= ~0x80; //<2F><>PWM5<4D>жϱ<D0B6>־
// // TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
// }
//}

94
PWM15bit.h Normal file
View File

@@ -0,0 +1,94 @@
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
/* --- QQ: 800003751 -------------------------------------------------*/
/* <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> */
/*---------------------------------------------------------------------*/
#ifndef __PWM15BIT_H
#define __PWM15BIT_H
#include "config.h"
#define PWM0 0
#define PWM1 1
#define PWM2 2
#define PWM3 3
#define PWM4 4
#define PWM5 5
#define PWM00 0
#define PWM01 1
#define PWM02 2
#define PWM03 3
#define PWM04 4
#define PWM05 5
#define PWM06 6
#define PWM07 7
#define PWM10 8
#define PWM11 9
#define PWM12 10
#define PWM13 11
#define PWM14 12
#define PWM15 13
#define PWM16 14
#define PWM17 15
#define PWM20 16
#define PWM21 17
#define PWM22 18
#define PWM23 19
#define PWM24 20
#define PWM25 21
#define PWM26 22
#define PWM27 23
#define PWM30 24
#define PWM31 25
#define PWM32 26
#define PWM33 27
#define PWM34 28
#define PWM35 29
#define PWM36 30
#define PWM37 31
#define PWM40 32
#define PWM41 33
#define PWM42 34
#define PWM43 35
#define PWM44 36
#define PWM45 37
#define PWM46 38
#define PWM47 39
#define PWM50 40
#define PWM51 41
#define PWM52 42
#define PWM53 43
#define PWM54 44
#define PWM55 45
#define PWM56 46
#define PWM57 47
#define PWMn_CLK_SYS 0
#define PWMn_CLK_TM2 1
typedef struct
{
u8 PWM_Enable; //PWMʹ<4D><CAB9>, ENABLE, DISABLE
u8 PWM_Interrupt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9>, ENABLE, DISABLE
u8 PWM_Counter; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, ENABLE, DISABLE
u8 PWM_Clock_Sel; //ʱ<><CAB1>Դѡ<D4B4><D1A1>, PWMn_CLK_SYS, PWMn_CLK_TM2
u8 PWM_Clock_PS; //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>, 0~15
u16 PWM_Period; //PWM<57><4D><EFBFBD><EFBFBD>, 0~0x7fff
} PWM15_InitTypeDef;
void PWM15_Init(u8 PWM_id, PWM15_InitTypeDef *PWMx);
u8 PWMChannelCtrl(u8 PWM_id, u8 pwm_eno, u8 pwm_ini, u8 pwm_eni, u8 pwm_ent2i, u8 pwm_ent1i);
u8 PWM15Duty(u8 PWM_id,u16 dutyL);
u8 PWMLevelSet(u8 PWM_id, u8 pwm_hldl, u8 pwm_hldh);
u8 qPWM15Duty(u8 PWM_id,u16 dutyL, u16 dutyH);
#endif

57
Readme.md Normal file
View File

@@ -0,0 +1,57 @@
### 项目名称RCU_C12_Dimming
### 协议文档:..\RCU-Cx\Document\BLV-BUS-485协议文档
### 共享路径:..\RCU-Cx\Reference\BLV_C12_CH12_Source_Code
# 版本说明
#### 2025-12-15 修改人:曹聪 类型解决BUG
问题描述:调光时间一样的情况下,调光亮与调光灭的实际调光时间不一致
```c
/* 问题点在于pwm_control.c文件中的deal_command1函数处理上
s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i];
s_pwm.doublecurrpwm[i] += s_pwm.every_change_10ms[i];
s_pwm.currpwm[i] = (u16)s_pwm.doublecurrpwm[i];
其中:
currpwm 是当前PWM对应的寄存器值(整数)
doublecurrpwm 是用于计算PWM步进后的值(浮点数)
此逻辑导致用于计算PWM步进后的浮点数直接丢失小数部分然后用于下一次运算导致PWM增加的步进值与降低的步进值不同从而导致实际调光时间不一致
*/
```
#### V18之前版本说明如下
- V18 2024-09-27
修改内容:解决全局亮度设置时变量溢出导致亮度不能调节问题。
- V17 杨鸿锋
修改内容:全局亮度设置增加渐变
- V16 2024-05-06 曹聪
修改内容:修改调光频率导致循环调光时间过短问题 - 调整后与之前循环调光渐变时间差不多(最慢的时候 10S左右)
- V15
修改了pwm调光的频率调成16khz解决了低频主机啸叫的问题
- V14
修改串口接收,最终发布版本
- 以下版本说明全是开发临时记录

2748
STC8xxxx.H Normal file

File diff suppressed because it is too large Load Diff

39
Start_Init.c Normal file
View File

@@ -0,0 +1,39 @@
#include "STC8xxxx.h"
#include "Start_Init.h"
#include "string.h"
#include "UART_Set.h"
#include "timer.h"
#include "pwm_control.h"
void Start_Init(void)
{
u8 i;
memset(&g_Usart,0,sizeof(g_Usart));
memset(&s_recv, 0, sizeof(s_recv));
memset(&g_answer,0,sizeof(g_answer));
g_Usart.lastsn=0xFF;
s_recv.B_min = 0;
s_recv.B_max = 100;
s_recv.global_brightness = 100;
for(i=0;i<12;i++)
{
s_recv.pwm_step[i] = 1;
s_recv.key_status[i] = 1;
s_recv.gradual_time[i] = 300;
}
}
//<2F><>ʱ<EFBFBD><CAB1>2<EFBFBD><32>1ms<6D><73>ʱ
void Timer2_Init_1ms(void)
{
TIM_InitTypeDef TIM_InitStructure; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
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
TIM_InitStructure.TIM_Interrupt = ENABLE; //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>, ENABLE<4C><45>DISABLE. (ע<><D7A2>: Timer2<72>̶<EFBFBD>Ϊ16λ<36>Զ<EFBFBD><D4B6><EFBFBD>װ, <20>жϹ̶<CFB9>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>)
TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; //ָ<><D6B8>ʱ<EFBFBD><CAB1>Դ, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
TIM_InitStructure.TIM_ClkOut = DISABLE; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ENABLE<4C><45>DISABLE
TIM_InitStructure.TIM_Value = 63693UL; //<2F><>ֵ,<2C><>ʱΪ1ms
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
Timer_Inilize(Timer2,&TIM_InitStructure); //<2F><>ʼ<EFBFBD><CABC>Timer2 Timer0,Timer1,Timer2,Timer3,Timer4
}

6
Start_Init.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef START_INIT_H
#define START_INIT_H
void Start_Init(void);
void Timer2_Init_1ms(void);
#endif

484
UART.C Normal file
View File

@@ -0,0 +1,484 @@
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
/* --- QQ: 800003751 -------------------------------------------------*/
/* <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> */
/*---------------------------------------------------------------------*/
#include "UART.h"
#include "timer.h"
#ifdef UART1
COMx_Define COM1;
u8 xdata TX1_Buffer[COM_TX1_Lenth]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
u8 xdata RX1_Buffer[COM_RX1_Lenth]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
#endif
#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
#ifdef UART3
COMx_Define COM3;
u8 xdata TX3_Buffer[COM_TX3_Lenth]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
u8 xdata RX3_Buffer[COM_RX3_Lenth]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
#endif
#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
u8 UART_Configuration(u8 UARTx, COMx_InitDefine *COMx)
{
u8 i;
u32 j;
#ifdef UART1
if(UARTx == UART1)
{
COM1.id = 1;
COM1.TX_read = 0;
COM1.TX_write = 0;
COM1.B_TX_busy = 0;
COM1.RX_Cnt = 0;
COM1.RX_TimeOut = 0;
COM1.B_RX_OK = 0;
for(i=0; i<COM_TX1_Lenth; i++) TX1_Buffer[i] = 0;
for(i=0; i<COM_RX1_Lenth; i++) RX1_Buffer[i] = 0;
if(COMx->UART_Priority > Priority_3) return 2; //<2F><><EFBFBD><EFBFBD>
UART1_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) return 2; //ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
SCON = (SCON & 0x3f) | COMx->UART_Mode;
if((COMx->UART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //<2F>ɱ䲨<C9B1><E4B2A8><EFBFBD><EFBFBD>
{
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_Timer1)
{
TR1 = 0;
AUXR &= ~0x01; //S1 BRT Use Timer1;
TMOD &= ~(1<<6); //Timer1 set As Timer
TMOD &= ~0x30; //Timer1_16bitAutoReload;
AUXR |= (1<<6); //Timer1 set as 1T mode
TH1 = (u8)(j>>8);
TL1 = (u8)j;
ET1 = 0; //<2F><>ֹ<EFBFBD>ж<EFBFBD>
TMOD &= ~0x40; //<2F><>ʱ
INT_CLKO &= ~0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
TR1 = 1;
}
else if(COMx->UART_BRT_Use == BRT_Timer2)
{
AUXR &= ~(1<<4); //Timer stop
AUXR |= 0x01; //S1 BRT Use Timer2;
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; //<2F><><EFBFBD><EFBFBD>
}
else if(COMx->UART_Mode == UART_ShiftRight)
{
if(COMx->BaudRateDouble == ENABLE) AUXR |= (1<<5); //<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SysClk/2
else AUXR &= ~(1<<5); //<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SysClk/12
}
else if(COMx->UART_Mode == UART_9bit) //<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SysClk*2^SMOD/64
{
if(COMx->BaudRateDouble == ENABLE) PCON |= (1<<7); //<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SysClk/32
else PCON &= ~(1<<7); //<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SysClk/64
}
if(COMx->UART_Interrupt == ENABLE) ES = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
else ES = 0; //<2F><>ֹ<EFBFBD>ж<EFBFBD>
if(COMx->UART_RxEnable == ENABLE) REN = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else REN = 0; //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
P_SW1 = (P_SW1 & 0x3f) | (COMx->UART_P_SW & 0xc0); //<2F>л<EFBFBD>IO
return 0;
}
#endif
#ifdef UART2
if(UARTx == UART2)
{
COM2.id = 2;
COM2.TX_read = 0;
COM2.TX_write = 0;
COM2.B_TX_busy = 0;
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
#ifdef UART3
if(UARTx == UART3)
{
COM3.id = 3;
COM3.TX_read = 0;
COM3.TX_write = 0;
COM3.B_TX_busy = 0;
COM3.RX_Cnt = 0;
COM3.RX_TimeOut = 0;
COM3.B_RX_OK = 0;
for(i=0; i<COM_TX3_Lenth; i++) TX3_Buffer[i] = 0;
for(i=0; i<COM_RX3_Lenth; i++) RX3_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>
UART3_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) S3_9bit(); //9bit
else S3_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_Timer3)
{
S3_BRT_UseTimer3(); //S3 BRT Use Timer3;
TH3 = (u8)(j>>8);
TL3 = (u8)j;
T4T3M &= 0xf0;
T4T3M |= 0x0a; //Timer3 set As Timer, 1T mode, Start timer3
}
else if(COMx->UART_BRT_Use == BRT_Timer2)
{
AUXR &= ~(1<<4); //Timer stop
S3_BRT_UseTimer2(); //S3 BRT Use Timer2;
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; //<2F><><EFBFBD><EFBFBD>
}
else return 2; //ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
if(COMx->UART_Interrupt == ENABLE) S3_Int_Enable(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
else S3_Int_Disable(); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
if(COMx->UART_RxEnable == ENABLE) S3_RX_Enable(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else S3_RX_Disable(); //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
P_SW2 = (P_SW2 & ~2) | (COMx->UART_P_SW & 0x02); //<2F>л<EFBFBD>IO
return 0;
}
#endif
#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);
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
return 2; //<2F><><EFBFBD><EFBFBD>
}
/*********************************************************/
/********************* UART1 <20><><EFBFBD><EFBFBD> ************************/
#ifdef UART1
void TX1_write2buff(u8 dat) //д<><EFBFBD>ͻ<EFBFBD><CDBB>壬ָ<E5A3AC><D6B8>+1
{
TX1_Buffer[COM1.TX_write] = dat; //װ<><D7B0><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
if(++COM1.TX_write >= COM_TX1_Lenth) COM1.TX_write = 0;
if(COM1.B_TX_busy == 0) //<2F><><EFBFBD><EFBFBD>
{
COM1.B_TX_busy = 1; //<2F><>־æ
TI = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
}
void PrintString1(u8 *puts)
{
for (; *puts != 0; puts++) TX1_write2buff(*puts); //<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9>0<EFBFBD><30><EFBFBD><EFBFBD>
}
void Printbuffer1(u8 *puts,u8 len)
{
u8 i;
for (i=0; i<len;i++) TX1_write2buff(puts[i]);
}
u8 recv_start_flag=0;
u32 recv_time=0;
void UART1_int (void) interrupt UART1_VECTOR
{
static u8 stage=0;
u8 dat;
if(RI)
{
RI = 0;
recv_start_flag=1;
recv_time=systick_1ms;
if(COM1.B_RX_OK == 0)
{
dat=SBUF;
if(COM1.RX_Cnt >= COM_RX1_Lenth) COM1.RX_Cnt = 0;
if(dat=='D') //<2F><><EFBFBD><EFBFBD>10<31><30>'D',<2C><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>
{
stage++;
}
else
{
stage=0;
}
if(stage==10)
{
IAP_CONTR=0x60;
}
RX1_Buffer[COM1.RX_Cnt++] = SBUF;
COM1.RX_TimeOut = TimeOutSet1;
}
}
if(TI)
{
TI = 0;
if(COM1.TX_read != COM1.TX_write)
{
SBUF = TX1_Buffer[COM1.TX_read];
if(++COM1.TX_read >= COM_TX1_Lenth) COM1.TX_read = 0;
}
else COM1.B_TX_busy = 0;
}
}
#endif
/********************* UART2 <20><><EFBFBD><EFBFBD> ************************/
#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)
{
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
/********************* UART3 <20><><EFBFBD><EFBFBD> ************************/
#ifdef UART3
void TX3_write2buff(u8 dat) //д<><EFBFBD>ͻ<EFBFBD><CDBB>壬ָ<E5A3AC><D6B8>+1
{
TX3_Buffer[COM3.TX_write] = dat; //װ<><D7B0><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
if(++COM3.TX_write >= COM_TX3_Lenth) COM3.TX_write = 0;
if(COM3.B_TX_busy == 0) //<2F><><EFBFBD><EFBFBD>
{
COM3.B_TX_busy = 1; //<2F><>־æ
SET_TI3(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
}
void PrintString3(u8 *puts)
{
for (; *puts != 0; puts++) TX3_write2buff(*puts); //<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9>0<EFBFBD><30><EFBFBD><EFBFBD>
}
void Printbuffer3(u8 *puts,u8 len)
{
u8 i;
for (i=0; i<len;i++) TX3_write2buff(*puts++); //<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9>0<EFBFBD><30><EFBFBD><EFBFBD>
}
void UART3_int (void) interrupt UART3_VECTOR
{
if(RI3) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
{
recv_start_flag=1;
recv_time=systick_1ms;
CLR_RI3();
if(COM3.B_RX_OK == 0)
{
if(COM3.RX_Cnt >= COM_RX3_Lenth) COM3.RX_Cnt = 0;
RX3_Buffer[COM3.RX_Cnt++] = S3BUF;
COM3.RX_TimeOut = TimeOutSet3;
}
}
if(TI3) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
{
CLR_TI3();
if(COM3.TX_read != COM3.TX_write)
{
S3BUF = TX3_Buffer[COM3.TX_read];
if(++COM3.TX_read >= COM_TX3_Lenth) COM3.TX_read = 0;
}
else COM3.B_TX_busy = 0;
}
}
#endif
/********************* UART4 <20><><EFBFBD><EFBFBD> ************************/
#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
/*************** <20><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *****************/
void UART3_config(void)
{
COMx_InitDefine COMx_InitStructure; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //ģʽ, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
COMx_InitStructure.UART_BRT_Use = BRT_Timer3; //ʹ<>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>, BRT_Timer2, BRT_Timer3 (ע<><D7A2>: <20><><EFBFBD><EFBFBD>2<EFBFBD>̶<EFBFBD>ʹ<EFBFBD><CAB9>BRT_Timer2)
COMx_InitStructure.UART_BaudRate = 115200; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 110 ~ 115200
COMx_InitStructure.UART_RxEnable = ENABLE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ENABLE<4C><45>DISABLE
COMx_InitStructure.UART_Interrupt = ENABLE; //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>, ENABLE<4C><45>DISABLE
COMx_InitStructure.UART_Priority = Priority_0; //ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>(<28>͵<EFBFBD><CDB5><EFBFBD>) Priority_0,Priority_1,Priority_2,Priority_3
COMx_InitStructure.UART_P_SW = UART3_SW_P50_P51; //<2F>л<EFBFBD><D0BB>˿<EFBFBD>, UART3_SW_P00_P01,UART3_SW_P50_P51
UART_Configuration(UART3, &COMx_InitStructure); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3 UART1,UART2,UART3,UART4
//PrintString3("STC8 UART3 Test Programme!\r\n"); //UART3<54><33><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
}

138
UART.h Normal file
View File

@@ -0,0 +1,138 @@
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
/* --- QQ: 800003751 -------------------------------------------------*/
/* <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> */
/*---------------------------------------------------------------------*/
#ifndef __UART_H
#define __UART_H
#include "config.h"
#define UART1 1
//#define UART2 2
#define UART3 3
//#define UART4 4
#ifdef UART1
#define COM_TX1_Lenth 32
#define COM_RX1_Lenth 32
#endif
#ifdef UART2
#define COM_TX2_Lenth 128
#define COM_RX2_Lenth 128
#endif
#ifdef UART3
#define COM_TX3_Lenth 32 //32<33><32><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
#define COM_RX3_Lenth 32
#endif
#ifdef UART4
#define COM_TX4_Lenth 128
#define COM_RX4_Lenth 128
#endif
#define UART_ShiftRight 0 //ͬ<><CDAC><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
#define UART_8bit_BRTx (1<<6) //8λ<38><CEBB><EFBFBD><EFBFBD>,<2C>ɱ䲨<C9B1><E4B2A8><EFBFBD><EFBFBD>
#define UART_9bit (2<<6) //9λ<39><CEBB><EFBFBD><EFBFBD>,<2C>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define UART_9bit_BRTx (3<<6) //9λ<39><CEBB><EFBFBD><EFBFBD>,<2C>ɱ䲨<C9B1><E4B2A8><EFBFBD><EFBFBD>
#define UART1_SW_P30_P31 0
#define UART1_SW_P36_P37 (1<<6)
#define UART1_SW_P16_P17 (2<<6)
#define UART1_SW_P43_P44 (3<<6)
#define UART2_SW_P10_P11 0
#define UART2_SW_P46_P47 1
#define UART3_SW_P00_P01 0
#define UART3_SW_P50_P51 2
#define UART4_SW_P02_P03 0
#define UART4_SW_P52_P53 4
#define TimeOutSet1 5
#define TimeOutSet2 5
#define TimeOutSet3 5
#define TimeOutSet4 5
#define BRT_Timer1 1
#define BRT_Timer2 2
#define BRT_Timer3 3
#define BRT_Timer4 4
typedef struct
{
u8 id; //<2F><><EFBFBD>ں<EFBFBD>
u8 TX_read; //<2F><><EFBFBD>Ͷ<EFBFBD>ָ<EFBFBD><D6B8>
u8 TX_write; //<2F><><EFBFBD><EFBFBD>дָ<D0B4><D6B8>
u8 B_TX_busy; //æ<><C3A6>־
u8 RX_Cnt; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֽڼ<D6BD><DABC><EFBFBD>
u8 RX_TimeOut; //<2F><><EFBFBD>ճ<EFBFBD>ʱ
u8 B_RX_OK; //<2F><><EFBFBD>տ<EFBFBD><D5BF><EFBFBD><EFBFBD><EFBFBD>
} COMx_Define;
typedef struct
{
u8 UART_Mode; //ģʽ, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
u8 UART_BRT_Use; //ʹ<>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>, BRT_Timer1,BRT_Timer2
u32 UART_BaudRate; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ENABLE,DISABLE
u8 Morecommunicate; //<2F><><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>, ENABLE,DISABLE
u8 UART_RxEnable; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ENABLE,DISABLE
u8 BaudRateDouble; //<2F><><EFBFBD><EFBFBD><EFBFBD>ʼӱ<CABC>, ENABLE,DISABLE
u8 UART_Interrupt; //<2F>жϿ<D0B6><CFBF><EFBFBD>, ENABLE,DISABLE
u8 UART_Priority; //<2F><><EFBFBD>ȼ<EFBFBD>, Priority_0,Priority_1,Priority_2,Priority_3
u8 UART_P_SW; //<2F>л<EFBFBD><D0BB>˿<EFBFBD>, UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17,UART1_SW_P43_P44
} COMx_InitDefine;
#ifdef UART1
extern COMx_Define COM1;
extern u8 xdata TX1_Buffer[COM_TX1_Lenth]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
extern u8 xdata RX1_Buffer[COM_RX1_Lenth]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
#endif
#ifdef UART2
extern COMx_Define COM2;
extern u8 xdata TX2_Buffer[COM_TX2_Lenth]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
extern u8 xdata RX2_Buffer[COM_RX2_Lenth]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
#endif
#ifdef UART3
extern COMx_Define COM3;
extern u8 xdata TX3_Buffer[COM_TX3_Lenth]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
extern u8 xdata RX3_Buffer[COM_RX3_Lenth]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
#endif
#ifdef UART4
extern COMx_Define COM4;
extern u8 xdata TX4_Buffer[COM_TX4_Lenth]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
extern u8 xdata RX4_Buffer[COM_RX4_Lenth]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
#endif
u8 UART_Configuration(u8 UARTx, COMx_InitDefine *COMx);
#ifdef UART1
void TX1_write2buff(u8 dat); //д<><EFBFBD>ͻ<EFBFBD><CDBB>壬ָ<E5A3AC><D6B8>+1
void PrintString1(u8 *puts);
void Printbuffer1(u8 *puts,u8 len);
#endif
#ifdef UART2
void TX2_write2buff(u8 dat); //д<><EFBFBD>ͻ<EFBFBD><CDBB>壬ָ<E5A3AC><D6B8>+1
void PrintString2(u8 *puts);
#endif
#ifdef UART3
void TX3_write2buff(u8 dat); //д<><EFBFBD>ͻ<EFBFBD><CDBB>壬ָ<E5A3AC><D6B8>+1
void PrintString3(u8 *puts);
void Printbuffer3(u8 *puts,u8 len);
#endif
#ifdef UART4
void TX4_write2buff(u8 dat); //д<><EFBFBD>ͻ<EFBFBD><CDBB>壬ָ<E5A3AC><D6B8>+1
void PrintString4(u8 *puts);
#endif
void UART3_config(void);
extern u8 recv_start_flag;
extern u32 recv_time;
#endif

601
UART_Set.c Normal file
View File

@@ -0,0 +1,601 @@
#include "UART_Set.h"
#include "UART.h"
#include "pwm_control.h"
#include "string.h"
#include "config.h"
#include "timer.h"
#include "STC8xxxx.h"
#include "PWM15bit.h"
G_Usart g_Usart;
G_answer g_answer;
S_recv s_recv;
u8 debug = 0x00;
/*
<EFBFBD>жϽ<EFBFBD><EFBFBD>յ<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>Ϸ<EFBFBD>
*/
void Usart_judge_Data(void)
{
u8 len = 0;
u8 i, sum;
sum = 0;
g_Usart.ok_flag = 0;
if((recv_start_flag==1)&&(systick_1ms-recv_time>8))
{
recv_start_flag=0;
#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
{
len = COM3.RX_Cnt;
for(i=0;i<COM3.RX_Cnt;i++)
{
g_Usart.recv_buffer[i]=RX3_Buffer[i];
}
COM3.RX_Cnt = 0;
memset(RX3_Buffer,0,sizeof(RX3_Buffer));
// if(debug) Printbuffer1(g_Usart.recv_buffer,11);
}
#endif
for (i = 0; i < g_Usart.recv_buffer[UART_FMT_LEN]; i++)
{
sum += g_Usart.recv_buffer[i];
}
if (sum == 0xff)
{
if(len == g_Usart.recv_buffer[UART_FMT_LEN])
{
if ((g_Usart.recv_buffer[UART_FMT_ADDR_RX] == ADDR_RX) && (g_Usart.recv_buffer[UART_FMT_DEV_TYPE] == DEV_TYPE))
{
g_Usart.Sn = g_Usart.recv_buffer[UART_FMT_TYPE]&0x0F;
if ((g_Usart.recv_buffer[UART_FMT_TYPE] & 0x40) == 0x00) //<2F><><EFBFBD>кż<D0BA><C5BC><EFBFBD>׷<EFBFBD>
{
g_Usart.ok_flag = 1; //<2F>׷<EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else //<2F><><EFBFBD>к<EFBFBD>Ϊ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>øı<C3B8><C4B1><EFBFBD><EFBFBD>к<EFBFBD>
{
if (g_Usart.Sn == g_Usart.lastsn)
{
g_Usart.ok_flag = 0;
g_answer.short_answer[UART_FMT_CMD]=0xF0;
g_answer.short_answer_flag=0x01;
}
else
{
g_Usart.ok_flag = 1;
}
}
g_Usart.lastsn = g_Usart.Sn;
}
}
}
}
}
void Usart_Deal_Data(void)
{
u8 i;
if(g_Usart.ok_flag)
{
if(debug)
{
PrintString1("data ok");
}
switch(g_Usart.recv_buffer[UART_FMT_CMD])
{
//<2F><>ѯ״̬<D7B4><CCAC><EFBFBD><EFBFBD>
case USART_CMD_QUEST:
if(debug)
{
PrintString1("ask");
}
g_answer.long_answer[UART_FMT_CMD]=USART_CMD_QUEST_A;
g_answer.long_answer_flag=0x01;
break;
//<2F><><EFBFBD>ðٷֱ<D9B7><D6B1><EFBFBD><EFBFBD><EFBFBD>ֵ
case USART_CMD_SET_BRIGHTNESS:
g_answer.short_answer[UART_FMT_CMD]=USART_CMD_SET_BRIGHTNESS_A;
if(debug)
{
PrintString1("percent");
}
//<2F><>һ<EFBFBD><D2BB>ʹ<EFBFBD><CAB9>λ
for (i = 0; i < 8; i++)
{
if (g_Usart.recv_buffer[7] & (1 << i))
{
s_recv.flag1[i] = 1;
s_recv.flag2[i] = 0;
s_recv.B_Ch[i] = g_Usart.recv_buffer[21 - i];
if (s_recv.B_Ch[i] < s_recv.B_min)
{
s_recv.B_Ch[i] = s_recv.B_min;
}
if (s_recv.B_Ch[i] > s_recv.B_max)
{
s_recv.B_Ch[i] = s_recv.B_max;
}
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];
s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
s_recv.gradual_time[i] = g_Usart.recv_buffer[9] * 10; /*<2A><><EFBFBD>յĽ<D5B5><C4BD><EFBFBD>ʱ<EFBFBD><CAB1>*/
/*
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
*/
if (s_recv.gradual_time[i] == 0)
{
s_recv.gradual_time[i] = 1;
}
/*<2A><><EFBFBD><EFBFBD>10ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pwm<77><6D><EFBFBD><EFBFBD>ֵ*/
if (s_pwm.wanttopwm[i] > s_pwm.currpwm[i])
{
s_pwm.every_change_10ms[i] = (float)(s_pwm.wanttopwm[i] - s_pwm.currpwm[i]) / s_recv.gradual_time[i];
if (s_pwm.every_change_10ms[i] < 1)
{
s_pwm.every_change_10ms[i] = 1;
}
}
if (s_pwm.wanttopwm[i] < s_pwm.currpwm[i])
{
s_pwm.every_change_10ms[i] = (float)(s_pwm.currpwm[i] - s_pwm.wanttopwm[i]) / s_recv.gradual_time[i];
if (s_pwm.every_change_10ms[i] < 1)
{
s_pwm.every_change_10ms[i] = 1;
}
}
}
}
//<2F>ڶ<EFBFBD><DAB6><EFBFBD>ʹ<EFBFBD><CAB9>λ
for (i = 0; i < 4; i++)
{
if (g_Usart.recv_buffer[8] & (1 << i))
{
s_recv.flag1[i+8] = 1;
s_recv.flag2[i+8] = 0;
s_recv.B_Ch[i+8] = g_Usart.recv_buffer[13 - i];
if (s_recv.B_Ch[i+8] < s_recv.B_min)
{
s_recv.B_Ch[i+8] = s_recv.B_min;
}
if (s_recv.B_Ch[i+8] > s_recv.B_max)
{
s_recv.B_Ch[i+8] = s_recv.B_max;
}
s_pwm.wanttopwm[i+8] = PWM_MAX_VALUE - s_recv.B_Ch[i+8] * PWM_MAX_VALUE * s_recv.global_brightness / 100 / 100 * s_recv.key_status[i+8];
s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
s_recv.gradual_time[i+8] = g_Usart.recv_buffer[9] * 10; /*<2A><><EFBFBD>յĽ<D5B5><C4BD><EFBFBD>ʱ<EFBFBD><CAB1>*/
/*
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
*/
if (s_recv.gradual_time[i+8] == 0)
{
s_recv.gradual_time[i+8] = 1;
}
/*<2A><><EFBFBD><EFBFBD>10ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pwm<77><6D><EFBFBD><EFBFBD>ֵ*/
if (s_pwm.wanttopwm[i+8] > s_pwm.currpwm[i+8])
{
s_pwm.every_change_10ms[i+8] = (float)(s_pwm.wanttopwm[i+8] - s_pwm.currpwm[i+8]) / s_recv.gradual_time[i+8];
if (s_pwm.every_change_10ms[i+8] < 1)
{
s_pwm.every_change_10ms[i+8] = 1;
}
}
if (s_pwm.wanttopwm[i+8] < s_pwm.currpwm[i+8])
{
s_pwm.every_change_10ms[i+8] = (float)(s_pwm.currpwm[i+8] - s_pwm.wanttopwm[i+8]) / s_recv.gradual_time[i+8];
if (s_pwm.every_change_10ms[i+8] < 1)
{
s_pwm.every_change_10ms[i+8] = 1;
}
}
}
}
g_answer.short_answer_flag=0x01;
break;
//<2F><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>ѭ<EFBFBD><D1AD>
case USART_CMD_SET_MODE:
g_answer.short_answer[UART_FMT_CMD]=USART_CMD_SET_MODE_A;
if(debug)
{
PrintString1("change light");
}
for (i = 0; i < 8; i++)
{
if (g_Usart.recv_buffer[7] & (1 << i))
{
s_recv.flag1[i] = 0;
s_recv.flag2[i] = 1;
s_recv.mode[i] = g_Usart.recv_buffer[9];
s_recv.pwm_step[i] = g_Usart.recv_buffer[11];
if (s_recv.mode[i] == 0x00)
{
if (g_Usart.recv_buffer[10] == 0x00)
{
s_recv.forward[i] = 0;
}
if (g_Usart.recv_buffer[10] == 0x01)
{
s_recv.forward[i] = 1;
}
if (g_Usart.recv_buffer[10] == 0x02) //<2F><>ת
{
if (s_recv.forward[i] == 0x01)
{
s_recv.forward[i] = 0x00;
continue; // Ϊ<><CEAA>ֹ<EFBFBD><D6B9>ת֮<D7AA><D6AE>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
}
if (s_recv.forward[i] == 0x00)
{
s_recv.forward[i] = 0x01;
continue;
}
}
}
}
}
for (i = 0; i < 4; i++)
{
if (g_Usart.recv_buffer[8] & (1 << i))
{
s_recv.flag1[i+8] = 0;
s_recv.flag2[i+8] = 1;
s_recv.mode[i+8] = g_Usart.recv_buffer[9];
s_recv.pwm_step[i+8] = g_Usart.recv_buffer[11];
if (s_recv.mode[i+8] == 0x00)
{
if (g_Usart.recv_buffer[10] == 0x00)
{
s_recv.forward[i+8] = 0;
}
if (g_Usart.recv_buffer[10] == 0x01)
{
s_recv.forward[i+8] = 1;
}
if (g_Usart.recv_buffer[10] == 0x02) //<2F><>ת
{
if (s_recv.forward[i+8] == 0x01)
{
s_recv.forward[i+8] = 0x00;
continue; // Ϊ<><CEAA>ֹ<EFBFBD><D6B9>ת֮<D7AA><D6AE>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
}
if (s_recv.forward[i+8] == 0x00)
{
s_recv.forward[i+8] = 0x01;
continue;
}
}
}
}
}
g_answer.short_answer_flag=0x01;
break;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case USART_CMD_ALL_BRIGHTNESS:
g_answer.short_answer[UART_FMT_CMD]=USART_CMD_ALL_BRIGHTNESS_A;
if(debug)
{
PrintString1("global light");
}
// s_recv.changeflag = 1;
if (g_Usart.recv_buffer[7] & (1 << 5)) //ȫ<>ֿɵ<D6BF><C9B5><EFBFBD><EFBFBD><EFBFBD>
{
s_recv.B_min = g_Usart.recv_buffer[10];
for (i = 0; i < 12; i++)
{
if ( s_pwm.currvalue[i] < s_recv.B_min)
{
s_pwm.currvalue[i] = s_recv.B_min;
}
}
}
if (g_Usart.recv_buffer[7] & (1 << 6)) //ȫ<>ֿɵ<D6BF><C9B5><EFBFBD><EFBFBD><EFBFBD>
{
s_recv.B_max = g_Usart.recv_buffer[9];
for (i = 0; i < 12; i++)
{
if ( s_pwm.currvalue[i] > s_recv.B_max)
{
s_pwm.currvalue[i] = s_recv.B_max;
}
}
}
if (g_Usart.recv_buffer[7] & (1 << 7)) //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
s_recv.global_brightness = g_Usart.recv_buffer[8];
for (i = 0; i < 12; i++)
{
// 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];
s_recv.flag1[i] = 1;
s_recv.flag2[i] = 0;
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];
s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
if(s_pwm.wanttopwm[i] > PWM_MAX_VALUE)
{
s_pwm.wanttopwm[i] = PWM_MAX_VALUE;
}
/*<2A><><EFBFBD><EFBFBD>10ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pwm<77><6D><EFBFBD><EFBFBD>ֵ*/
if (s_pwm.wanttopwm[i] > s_pwm.currpwm[i])
{
s_pwm.every_change_10ms[i] = (float)(s_pwm.wanttopwm[i] - s_pwm.currpwm[i]) / s_recv.gradual_time[i];
if (s_pwm.every_change_10ms[i] < 1)
{
s_pwm.every_change_10ms[i] = 1;
}
}
if (s_pwm.wanttopwm[i] < s_pwm.currpwm[i])
{
s_pwm.every_change_10ms[i] = (float)(s_pwm.currpwm[i] - s_pwm.wanttopwm[i]) / s_recv.gradual_time[i];
if (s_pwm.every_change_10ms[i] < 1)
{
s_pwm.every_change_10ms[i] = 1;
}
}
}
}
g_answer.short_answer_flag=0x01;
break;
//<2F><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>״̬
case USART_CMD_SWITCH_STATUS:
g_answer.short_answer[UART_FMT_CMD]=USART_CMD_SWITCH_STATUS_A;
if(debug)
{
PrintString1("switch state");
}
for (i = 0; i < 8; i++)
{
if (g_Usart.recv_buffer[7] & (1 << i))
{
if (g_Usart.recv_buffer[9 + i] == 0x01)
{
s_recv.key_status[i] = 0x01;
//s_pwm.currvalue[i] = s_pwm.thenvalue[i];
Open_Light(i);
}
if (g_Usart.recv_buffer[9 + i] == 0x00)
{
//s_pwm.thenvalue[i] = s_pwm.currvalue[i];
Close_Light(i);
s_recv.flag1[i] = 0;
s_recv.flag2[i] = 0;
s_recv.mode[i] = 2;
s_recv.key_status[i] = 0x00;
}
if (g_Usart.recv_buffer[9 + i] == 0x02)
{
if (s_recv.key_status[i] == 0x00)
{
s_recv.key_status[i] = 0x01;
//s_pwm.currvalue[i] = s_pwm.thenvalue[i];
Open_Light(i);
continue;
}
if (s_recv.key_status[i] == 0x01)
{
//s_pwm.thenvalue[i] = s_pwm.currvalue[i];
Close_Light(i);
s_recv.flag1[i] = 0;
s_recv.flag2[i] = 0;
s_recv.mode[i] = 2;
s_recv.key_status[i] = 0x00;
continue;
}
}
}
}
for (i = 0; i < 4; i++)
{
if (g_Usart.recv_buffer[8] & (1 << i))
{
if (g_Usart.recv_buffer[9 + 8 + i] == 0x01)
{
s_recv.key_status[i+8] = 0x01;
//s_pwm.currvalue[i+8] = s_pwm.thenvalue[i];
Open_Light(i+8);
}
if (g_Usart.recv_buffer[9 +8 + i] == 0x00)
{
//s_pwm.thenvalue[i+8] = s_pwm.currvalue[i+8];
Close_Light(i+8);
s_recv.flag1[i+8] = 0;
s_recv.flag2[i+8] = 0;
s_recv.mode[i+8] = 2;
s_recv.key_status[i+8] = 0x00;
}
if (g_Usart.recv_buffer[9 + 8 + i] == 0x02)
{
if (s_recv.key_status[i+8] == 0x00)
{
s_recv.key_status[i+8] = 0x01;
//s_pwm.currvalue[i+8] = s_pwm.thenvalue[i];
Open_Light(i+8);
continue;
}
if (s_recv.key_status[i+8] == 0x01)
{
//s_pwm.thenvalue[i+8] = s_pwm.currvalue[i+8];
Close_Light(i+8);
s_recv.flag1[i+8] = 0;
s_recv.flag2[i+8] = 0;
s_recv.mode[i+8] = 2;
s_recv.key_status[i+8] = 0x00;
continue;
}
}
}
}
g_answer.short_answer_flag=0x01;
break;
case USART_CMD_DEBUG_SET:
g_answer.short_answer[UART_FMT_CMD]=USART_CMD_DEBUG_SET_A;
if(debug)
{
PrintString1("debug");
}
debug = g_Usart.recv_buffer[7];
g_answer.short_answer_flag=0x01;
break;
case Usart_CMD_Version:
g_answer.version_answer[UART_FMT_CMD]=Usart_CMD_Version_A;
g_answer.version_answer_flag=0x01;
if(debug)
{
PrintString1("version");
}
break;
}
g_Usart.ok_flag=0;
}
}
void Usart_answer(void)
{
u8 i=0;
u8 checksum=0;
if(g_answer.long_answer_flag)
{
g_answer.long_answer[UART_FMT_ADDR_TX]=ADDR_RX;
g_answer.long_answer[UART_FMT_TYPE]=g_Usart.Sn;
g_answer.long_answer[UART_FMT_DEV_TYPE]=DEV_TYPE;
g_answer.long_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX];
g_answer.long_answer[UART_FMT_LEN]=0x14;
g_answer.long_answer[7] = s_recv.global_brightness;
for(i=0;i<12;i++)
{
g_answer.long_answer[8+i] = s_pwm.currvalue[11-i];
if(s_recv.key_status[i] == 0x01)
{
g_answer.long_answer[8+i] |= 0x80;
}
}
checksum=sumfunc(g_answer.long_answer,0x14);
g_answer.long_answer[UART_FMT_CKS]=checksum;
Printbuffer3(g_answer.long_answer,0x14); //<2F><><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ
if(debug)
{
// PrintString1("long answer");
}
g_answer.long_answer_flag=0;
memset(g_Usart.recv_buffer,0,32);
}
if(g_answer.short_answer_flag)
{
g_answer.short_answer[UART_FMT_ADDR_TX]=ADDR_RX;
g_answer.short_answer[UART_FMT_TYPE]=g_Usart.Sn;
g_answer.short_answer[UART_FMT_DEV_TYPE]=DEV_TYPE;
g_answer.short_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX];
g_answer.short_answer[UART_FMT_LEN]=0x07;
checksum=sumfunc(g_answer.short_answer,0x07);
g_answer.short_answer[UART_FMT_CKS]=checksum;
Printbuffer3(g_answer.short_answer,0x07);
if(debug)
{
PrintString1("short answer");
}
g_answer.short_answer_flag=0;
memset(g_Usart.recv_buffer,0,32);
}
if(g_answer.version_answer_flag)
{
g_answer.version_answer[UART_FMT_ADDR_TX]=ADDR_RX;
g_answer.version_answer[UART_FMT_TYPE]=g_Usart.Sn;
g_answer.version_answer[UART_FMT_DEV_TYPE]=DEV_TYPE;
g_answer.version_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX];
g_answer.version_answer[UART_FMT_LEN]=0x09;
g_answer.version_answer[UART_FMT_CMD+1]=Version_High;
g_answer.version_answer[UART_FMT_CMD+2]=Version_Low;
checksum=sumfunc(g_answer.version_answer,0x09);
g_answer.version_answer[UART_FMT_CKS]=checksum;
Printbuffer3(g_answer.version_answer,0x09);
if(debug)
{
PrintString1("version_answer");
}
g_answer.version_answer_flag=0;
memset(g_Usart.recv_buffer,0,32);
}
memset(&g_answer,0,sizeof(g_answer));
}
u8 sumfunc(u8* answer,u8 len)
{
u8 m = 0;
u8 j;
for (j = 0; j < len; j++)
{
if (5 == j) continue;
m += *(answer+j);
}
return ~m;
}

100
UART_Set.h Normal file
View File

@@ -0,0 +1,100 @@
#ifndef _UART_SET_H
#define _UART_SET_H
#include "STC8xxxx.h"
#define USART_CMD_QUEST 0x20
#define USART_CMD_SET_BRIGHTNESS 0x21
#define USART_CMD_SET_MODE 0x22
#define USART_CMD_ALL_BRIGHTNESS 0x23
#define USART_CMD_SWITCH_STATUS 0x24
#define USART_CMD_DEBUG_SET 0x25 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2>ÿ<EFBFBD><C3BF>ƣ<EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ<EFBFBD><CEAA>
#define Usart_CMD_Version 0x26
#define USART_TEST_MODE 0xE0
#define USART_TEST_DATA 0xE1
#define USART_CMD_QUEST_A 0x30
#define USART_CMD_SET_BRIGHTNESS_A 0x31
#define USART_CMD_SET_MODE_A 0x32
#define USART_CMD_ALL_BRIGHTNESS_A 0x33
#define USART_CMD_SWITCH_STATUS_A 0x34
#define USART_CMD_DEBUG_SET_A 0x35
#define Usart_CMD_Version_A 0x36
#define USART_TEST_MODE_A 0xF0
#define USART_TEST_DATA_A 0xF1
#define ADDR_RX 0x01 //C12_CH12<31>ĵ<EFBFBD>ַ
#define DEV_TYPE 0x03
#define Version_High 0x13 //<2F><><EFBFBD><EFBFBD><EFBFBD>
#define Version_Low 0x00
typedef enum
{
UART_FMT_ADDR_TX = 0x00,
UART_FMT_TYPE,
UART_FMT_DEV_TYPE,
UART_FMT_ADDR_RX,
UART_FMT_LEN,
UART_FMT_CKS,
UART_FMT_CMD,
} UART_FMT_e;
typedef struct Usart
{
u8 lastsn;
u8 Sn;
u8 ok_flag;
u8 recv_buffer[32];
}xdata G_Usart;
typedef struct answer
{
u8 short_answer[7];
u8 long_answer[20];
u8 long_answer_flag;
u8 short_answer_flag;
u8 version_answer_flag;
u8 version_answer[9];
}xdata G_answer;
//<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݵĽṹ<C4BD><E1B9B9>
/*
* <20>ĸ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʹ<EFBFBD>ܱ<EFBFBD>־λ
* flag1ָ<31><D6B8><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>0x21
* flag2ָ<32><D6B8><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>0x22
* <20><><EFBFBD>߻<EFBFBD><DFBB><EFBFBD><E2A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>
*/
typedef struct
{
u16 flag1[12];
u16 flag2[12];
//0x21
u16 gradual_time[12];
u16 B_Ch[12];
//0x22
u16 mode[12];
u16 forward[12];
u16 pwm_step[12];
//0x23
u16 global_brightness;
u16 B_max;
u16 B_min;
// u16 changeflag;
//0x24
u16 key_status[12];
}xdata S_recv;
extern S_recv s_recv;
extern G_answer g_answer;
extern G_Usart g_Usart;
void Usart_Deal_Data(void);
void Usart_judge_Data(void);
void Usart_answer(void);
u8 sumfunc(u8* answer,u8 len);
extern u8 debug;
#endif

35
WDT.c Normal file
View File

@@ -0,0 +1,35 @@
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
/* --- QQ: 800003751 -------------------------------------------------*/
/* <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> */
/*---------------------------------------------------------------------*/
#include "WDT.h"
//========================================================================
// <20><><EFBFBD><EFBFBD>: void WDT_Inilize(WDT_InitTypeDef *WDT)
// <20><><EFBFBD><EFBFBD>: <20><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: WDT: <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD>,<2C><><EFBFBD>ο<EFBFBD>WDT.h<><68><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: none.
// <20>汾: V1.0, 2020-09-16
//========================================================================
void WDT_Inilize(WDT_InitTypeDef *WDT)
{
if(WDT->WDT_Enable == ENABLE) WDT_CONTR = D_EN_WDT; //ʹ<>ܿ<EFBFBD><DCBF>Ź<EFBFBD>
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
if(WDT->WDT_IDLE_Mode == WDT_IDLE_STOP) WDT_CONTR &= ~0x08; //IDLEģʽֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
else WDT_CONTR |= 0x08; //IDLEģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
/********************* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD><EFBFBD> *************************/
void WDT_Clear (void)
{
WDT_CONTR |= D_CLR_WDT; // ι<><CEB9>
}

40
WDT.h Normal file
View File

@@ -0,0 +1,40 @@
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
/* --- QQ: 800003751 -------------------------------------------------*/
/* <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> */
/*---------------------------------------------------------------------*/
#ifndef __WDT_H
#define __WDT_H
#include "config.h"
#define WDT_IDLE_STOP 0
#define WDT_IDLE_RUN 1
#define WDT_SCALE_2 0 /* WDT Timeout=(12*32768*SCALE)/SYSclk */
#define WDT_SCALE_4 1
#define WDT_SCALE_8 2
#define WDT_SCALE_16 3
#define WDT_SCALE_32 4
#define WDT_SCALE_64 5
#define WDT_SCALE_128 6
#define WDT_SCALE_256 7
typedef struct
{
u8 WDT_Enable; //<2F><><EFBFBD>Ź<EFBFBD>ʹ<EFBFBD><CAB9> ENABLE,DISABLE
u8 WDT_IDLE_Mode; //IDLEģʽֹͣ<CDA3><D6B9><EFBFBD><EFBFBD> WDT_IDLE_STOP,WDT_IDLE_RUN
u8 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
} WDT_InitTypeDef;
void WDT_Inilize(WDT_InitTypeDef *WDT);
void WDT_Clear (void);
#endif

19
config.h Normal file
View File

@@ -0,0 +1,19 @@
#ifndef __CONFIG_H
#define __CONFIG_H
/*********************************************************/
#define MAIN_Fosc 22118400L //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//#define MAIN_Fosc 12000000L //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//#define MAIN_Fosc 11059200L //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//#define MAIN_Fosc 5529600L //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//#define MAIN_Fosc 24000000L //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
#define STC8Gxx //STC8Gϵ<47><CFB5>
/*********************************************************/
#define DEBUG_ 0
#include "STC8xxxx.H"
#endif

155
key.c Normal file
View File

@@ -0,0 +1,155 @@
#include "key.h"
#include "GPIO.h"
#include "timer.h"
#include "string.h"
#include "pwm_control.h"
KEY_t g_Key;
void Key_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure1; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
/***********************************1*******************************************/
GPIO_InitStructure1.Pin = GPIO_Pin_4; //ָ<><D6B8>Ҫ<EFBFBD><D2AA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>IO 4
GPIO_InitStructure1.Mode = GPIO_PullUp; //ָ<><D6B8>IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ,GPIO_PullUp
GPIO_Inilize(GPIO_P4,&GPIO_InitStructure1); //<2F><>ʼ<EFBFBD><CABC>
memset(&g_Key, 0, sizeof(g_Key));
}
void Key_ScanTask(void)
{
u8 i;
static u32 update_10ms = 0;
if (systick_1ms - update_10ms > 10)
{
update_10ms = systick_1ms;
for (i = 0; i < KEY_CHN_MAX; i++)
{
switch (g_Key.KEY_STA[i])
{
case KEY_STA_S0:
if ( P44 == KEY_PRESS )
{
if (g_Key.delayCnt[i] < KEY_DELAY_COUNT)
{
g_Key.delayCnt[i]++;
}
else
{
g_Key.KEY_STA[i] = KEY_STA_S1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_Key.key_time[i] = 0;
g_Key.delayCnt[i] = 0;
}
}
else
{
g_Key.delayCnt[i] = 0;
g_Key.KEY_STA[i] = KEY_STA_S0;
g_Key.key_val[i] = KEY_VAL_NOT;
}
break;
case KEY_STA_S1:
g_Key.key_time[i] ++;
if ( g_Key.key_time[i] < KEY_DELAY_COUNT_LONG )
{
if ( P44 == KEY_LOOSEN ) //<2F>ɿ<EFBFBD>
{
g_Key.key_val[i] = KEY_VAL_SHORT_PRESS; //<2F>̰<EFBFBD><CCB0>ɿ<EFBFBD>
g_Key.key_time[i] = 0;
g_Key.KEY_STA[i] = KEY_STA_S0;
}
}
else
{
g_Key.KEY_STA[i] = KEY_STA_S2;
g_Key.key_time[i] = 0;
g_Key.key_longPress[i] = KEY_VAL_SINGLE_LONG_PRESS; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_Key.key_val[i] = KEY_VAL_CONT_LONG_PRESS; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
break;
case KEY_STA_S2:
g_Key.key_longPress[i] = KEY_VAL_NOT;
if ( P44 == KEY_LOOSEN )
{
g_Key.KEY_STA[i] = KEY_STA_S0;
g_Key.key_val[i] = KEY_VAL_LONG_PRESS_LOOSEN; //<2F><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
}
break;
}
}
}
}
void KEY_TEST(void)
{
u8 flag;
if (g_Key.key_val[KEY_CH1] == KEY_VAL_SHORT_PRESS)
{
g_Key.key_val[KEY_CH1] = KEY_VAL_NOT;
s_pwm.key_value++;
switch (s_pwm.key_value)
{
case 1:
s_pwm.currpwm[0] = 2000ul; //90%<25><><EFBFBD><EFBFBD>
s_pwm.currvalue[0]=0x5A;
break;
case 2:
s_pwm.currpwm[1] = 2000ul;
s_pwm.currvalue[1]=0x5A;
break;
case 3:
s_pwm.currpwm[2] = 2000ul;
s_pwm.currvalue[2]=0x5A;
break;
case 4:
s_pwm.currpwm[3] = 2000ul;
s_pwm.currvalue[3]=0x5A;
break;
case 5:
s_pwm.currpwm[4] = 2000ul;
s_pwm.currvalue[4]=0x5A;
break;
case 6:
s_pwm.currpwm[5] = 2000ul;
s_pwm.currvalue[5]=0x5A;
break;
case 7:
s_pwm.currpwm[6] = 2000ul;
s_pwm.currvalue[6]=0x5A;
break;
case 8:
s_pwm.currpwm[7] = 2000ul;
s_pwm.currvalue[7]=0x5A;
break;
case 9:
s_pwm.currpwm[8] = 2000ul;
s_pwm.currvalue[8]=0x5A;
break;
case 10:
s_pwm.currpwm[9] = 2000ul;
s_pwm.currvalue[9]=0x5A;
break;
case 11:
s_pwm.currpwm[10] = 2000ul;
s_pwm.currvalue[10]=0x5A;
break;
case 12:
s_pwm.currpwm[11] = 2000ul;
s_pwm.currvalue[11]=0x5A;
break;
case 13:
for(flag=0;flag<12;flag++)
{
s_pwm.currpwm[flag] = PWM_MAX_VALUE;
s_pwm.currvalue[flag]=0x00;
}
s_pwm.key_value = 0;
break;
default:
break;
}
}
}

50
key.h Normal file
View File

@@ -0,0 +1,50 @@
#ifndef KEY_H
#define KEY_H
#include "STC8xxxx.h"
#define DELAY_TIME 10
#define KEY_DELAY_COUNT 2
#define KEY_DELAY_COUNT_LONG 100
#define KEY_PRESS 0
#define KEY_LOOSEN 1
typedef enum
{
KEY_CH1,
KEY_CHN_MAX,
}KEY_CHN_e;
typedef enum
{
KEY_STA_S0 = 0,
KEY_STA_S1 = 1,
KEY_STA_S2 = 2,
}KEY_STA_e;
typedef enum
{
KEY_VAL_NOT, //û<><C3BB><EFBFBD><EFBFBD>
KEY_VAL_SHORT_PRESS, //<2F><><EFBFBD><EFBFBD>
KEY_VAL_CONT_LONG_PRESS, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
KEY_VAL_SINGLE_LONG_PRESS, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
KEY_VAL_LONG_PRESS_LOOSEN, //<2F><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
}KEY_VAL_e;
typedef struct
{
u8 Key_pin[KEY_CHN_MAX];
u8 KEY_STA[KEY_CHN_MAX];
u8 key_val[KEY_CHN_MAX]; //0:û<><C3BB><EFBFBD><EFBFBD>, 1:<3A>̰<EFBFBD><CCB0>ɿ<EFBFBD>, 2:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 3:<3A><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
u8 key_longPress[KEY_CHN_MAX]; //0:û<><C3BB><EFBFBD><EFBFBD>, 1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 key_time[KEY_CHN_MAX];
u8 delayCnt[KEY_CHN_MAX];
}KEY_t;
void Key_Init(void);
void Key_ScanTask(void);
void KEY_TEST(void);
extern KEY_t g_Key;
#endif

1923
light_V19.uvgui.cc Normal file

File diff suppressed because one or more lines are too long

293
light_V19.uvopt Normal file
View File

@@ -0,0 +1,293 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj; *.o</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<TargetOption>
<CLK51>35000000</CLK51>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>1</RunSim>
<RunTarget>0</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>0</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>120</PageWidth>
<PageLength>65</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\Listings\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>0</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>0</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>0</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>9</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>BIN\STCMON51.DLL</pMon>
</DebugOpt>
<Breakpoint/>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
<aLwin>0</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>0</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
</TargetOption>
</Target>
<Group>
<GroupName>Source Group 1</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\GPIO.c</PathWithFileName>
<FilenameWithoutPath>GPIO.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\UART.C</PathWithFileName>
<FilenameWithoutPath>UART.C</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\UART_Set.c</PathWithFileName>
<FilenameWithoutPath>UART_Set.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\pwm_control.c</PathWithFileName>
<FilenameWithoutPath>pwm_control.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Start_Init.c</PathWithFileName>
<FilenameWithoutPath>Start_Init.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\PWM15bit.c</PathWithFileName>
<FilenameWithoutPath>PWM15bit.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\timer.c</PathWithFileName>
<FilenameWithoutPath>timer.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\key.c</PathWithFileName>
<FilenameWithoutPath>key.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\WDT.c</PathWithFileName>
<FilenameWithoutPath>WDT.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

435
light_V19.uvproj Normal file
View File

@@ -0,0 +1,435 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
<SchemaVersion>1.1</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>STC8G2K64S4 Series</Device>
<Vendor>STC</Vendor>
<Cpu>IRAM(0-0xFF) XRAM(0-0x07FF) IROM(0-0xFFF8) CLOCK(35000000) MODP2</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId>63332</DeviceId>
<RegisterFile>STC8.H</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile></SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath>D:\keil_v5\C51\BIN\</BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath></RegisterFilePath>
<DBRegisterFilePath>STC\</DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\Objects\</OutputDirectory>
<OutputName>BLV_C12_Dimm_V19</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath>.\Listings\</ListingPath>
<HexFormatSelection>0</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
<nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
<nStopB2X>0</nStopB2X>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>0</GenerateAssemblyFile>
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
<BankNo>65535</BankNo>
</CommonProperty>
<DllOption>
<SimDllName>S8051.DLL</SimDllName>
<SimDllArguments></SimDllArguments>
<SimDlgDll>DP51.DLL</SimDlgDll>
<SimDlgDllArguments>-pDP8051</SimDlgDllArguments>
<TargetDllName>S8051.DLL</TargetDllName>
<TargetDllArguments></TargetDllArguments>
<TargetDlgDll>TP51.DLL</TargetDlgDll>
<TargetDlgDllArguments>-p51</TargetDlgDllArguments>
</DllOption>
<DebugOption>
<OPTHX>
<HexSelection>0</HexSelection>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
<Simulator>
<UseSimulator>0</UseSimulator>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>1</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
<RestoreSysVw>1</RestoreSysVw>
</Simulator>
<Target>
<UseTarget>1</UseTarget>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>0</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<RestoreTracepoints>0</RestoreTracepoints>
<RestoreSysVw>1</RestoreSysVw>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>9</TargetSelection>
<SimDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
</SimDlls>
<TargetDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
<Driver>BIN\STCMON51.DLL</Driver>
</TargetDlls>
</DebugOption>
<Utilities>
<Flash1>
<UseTargetDll>1</UseTargetDll>
<UseExternalTool>0</UseExternalTool>
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>
<Capability>0</Capability>
<DriverSelection>-1</DriverSelection>
</Flash1>
<bUseTDR>0</bUseTDR>
<Flash2></Flash2>
<Flash3>"" ()</Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<Target51>
<Target51Misc>
<MemoryModel>0</MemoryModel>
<RTOS>0</RTOS>
<RomSize>2</RomSize>
<DataHold>0</DataHold>
<XDataHold>0</XDataHold>
<UseOnchipRom>0</UseOnchipRom>
<UseOnchipArithmetic>0</UseOnchipArithmetic>
<UseMultipleDPTR>0</UseMultipleDPTR>
<UseOnchipXram>0</UseOnchipXram>
<HadIRAM>1</HadIRAM>
<HadXRAM>1</HadXRAM>
<HadIROM>1</HadIROM>
<Moda2>0</Moda2>
<Moddp2>0</Moddp2>
<Modp2>1</Modp2>
<Mod517dp>0</Mod517dp>
<Mod517au>0</Mod517au>
<Mode2>0</Mode2>
<useCB>0</useCB>
<useXB>0</useXB>
<useL251>0</useL251>
<useA251>0</useA251>
<Mx51>0</Mx51>
<ModC812>0</ModC812>
<ModCont>0</ModCont>
<Lp51>0</Lp51>
<useXBS>0</useXBS>
<ModDA>0</ModDA>
<ModAB2>0</ModAB2>
<Mx51P>0</Mx51P>
<hadXRAM2>0</hadXRAM2>
<uocXram2>0</uocXram2>
<hadXRAM3>0</hadXRAM3>
<ModC2>0</ModC2>
<ModH2>0</ModH2>
<Mdu_R515>0</Mdu_R515>
<Mdu_F120>0</Mdu_F120>
<Psoc>0</Psoc>
<hadIROM2>0</hadIROM2>
<hadIROM3>0</hadIROM3>
<ModSmx2>0</ModSmx2>
<cBanks>0</cBanks>
<xBanks>0</xBanks>
<OnChipMemories>
<RCB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0xffff</Size>
</RCB>
<RXB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</RXB>
<Ocm1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm1>
<Ocm2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm2>
<Ocm3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm3>
<Ocr1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr1>
<Ocr2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr2>
<Ocr3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr3>
<IRO>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0xfff9</Size>
</IRO>
<IRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x100</Size>
</IRA>
<XRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x800</Size>
</XRA>
<XRA512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA512>
<IROM512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM512>
<XRA513>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA513>
<IROM513>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM513>
</OnChipMemories>
</Target51Misc>
<C51>
<RegisterColoring>0</RegisterColoring>
<VariablesInOrder>0</VariablesInOrder>
<IntegerPromotion>1</IntegerPromotion>
<uAregs>0</uAregs>
<UseInterruptVector>1</UseInterruptVector>
<Fuzzy>3</Fuzzy>
<Optimize>8</Optimize>
<WarningLevel>2</WarningLevel>
<SizeSpeed>1</SizeSpeed>
<ObjectExtend>1</ObjectExtend>
<ACallAJmp>0</ACallAJmp>
<InterruptVectorAddress>0</InterruptVectorAddress>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</C51>
<Ax51>
<UseMpl>0</UseMpl>
<UseStandard>1</UseStandard>
<UseCase>0</UseCase>
<UseMod51>0</UseMod51>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Ax51>
<Lx51>
<useFile>0</useFile>
<linkonly>0</linkonly>
<UseMemoryFromTarget>1</UseMemoryFromTarget>
<CaseSensitiveSymbols>0</CaseSensitiveSymbols>
<WarningLevel>2</WarningLevel>
<DataOverlaying>1</DataOverlaying>
<OverlayString></OverlayString>
<MiscControls></MiscControls>
<DisableWarningNumbers></DisableWarningNumbers>
<LinkerCmdFile></LinkerCmdFile>
<Assign></Assign>
<ReserveString></ReserveString>
<CClasses></CClasses>
<UserClasses></UserClasses>
<CSection></CSection>
<UserSection></UserSection>
<CodeBaseAddress></CodeBaseAddress>
<XDataBaseAddress></XDataBaseAddress>
<PDataBaseAddress></PDataBaseAddress>
<BitBaseAddress></BitBaseAddress>
<DataBaseAddress></DataBaseAddress>
<IDataBaseAddress></IDataBaseAddress>
<Precede></Precede>
<Stack></Stack>
<CodeSegmentName></CodeSegmentName>
<XDataSegmentName></XDataSegmentName>
<BitSegmentName></BitSegmentName>
<DataSegmentName></DataSegmentName>
<IDataSegmentName></IDataSegmentName>
</Lx51>
</Target51>
</TargetOption>
<Groups>
<Group>
<GroupName>Source Group 1</GroupName>
<Files>
<File>
<FileName>GPIO.c</FileName>
<FileType>1</FileType>
<FilePath>.\GPIO.c</FilePath>
</File>
<File>
<FileName>main.c</FileName>
<FileType>1</FileType>
<FilePath>.\main.c</FilePath>
</File>
<File>
<FileName>UART.C</FileName>
<FileType>1</FileType>
<FilePath>.\UART.C</FilePath>
</File>
<File>
<FileName>UART_Set.c</FileName>
<FileType>1</FileType>
<FilePath>.\UART_Set.c</FilePath>
</File>
<File>
<FileName>pwm_control.c</FileName>
<FileType>1</FileType>
<FilePath>.\pwm_control.c</FilePath>
</File>
<File>
<FileName>Start_Init.c</FileName>
<FileType>1</FileType>
<FilePath>.\Start_Init.c</FilePath>
</File>
<File>
<FileName>PWM15bit.c</FileName>
<FileType>1</FileType>
<FilePath>.\PWM15bit.c</FilePath>
</File>
<File>
<FileName>timer.c</FileName>
<FileType>1</FileType>
<FilePath>.\timer.c</FilePath>
</File>
<File>
<FileName>key.c</FileName>
<FileType>1</FileType>
<FilePath>.\key.c</FilePath>
</File>
<File>
<FileName>WDT.c</FileName>
<FileType>1</FileType>
<FilePath>.\WDT.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
</Project>

128
main.c Normal file
View File

@@ -0,0 +1,128 @@
#include "config.h"
#include "gpio.h"
#include "UART.h"
#include "string.h"
#include "UART_Set.h"
#include "pwm_control.h"
#include "Start_Init.h"
#include "key.h"
#include "WDT.h"
/************* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> **************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̻<EFBFBD><EFBFBD><EFBFBD>STC8H8K64UΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>STC8G<EFBFBD><EFBFBD>STC8Hϵ<EFBFBD><EFBFBD>оƬ<EFBFBD><EFBFBD>ͨ<EFBFBD>òο<EFBFBD>.
˫<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ˫<EFBFBD><EFBFBD><EFBFBD>жϷ<EFBFBD>ʽ<EFBFBD>շ<EFBFBD>ͨѶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ͨ<EFBFBD><EFBFBD>PC<EFBFBD><EFBFBD>MCU<EFBFBD><EFBFBD><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.
ͨ<EFBFBD><EFBFBD><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>
<EFBFBD>ö<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>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>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ, ѡ<><D1A1>ʱ<EFBFBD><CAB1> 22.1184MHz (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>"config.h"<22><><EFBFBD>޸<EFBFBD>).
/******************* IO<49><4F><EFBFBD>ú<EFBFBD><C3BA><EFBFBD> *******************/
void GPIO1_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1; //ָ<><D6B8>Ҫ<EFBFBD><D2AA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>IO, GPIO_Pin_0 ~ GPIO_Pin_7
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_OUT_PP
GPIO_Inilize(GPIO_P3,&GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>
}
/*************** <20><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *****************/
void UART1_config(void)
{
COMx_InitDefine COMx_InitStructure; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //ģʽ, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
COMx_InitStructure.UART_BRT_Use = BRT_Timer1; //ʹ<>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>, BRT_Timer1, BRT_Timer2 (ע<><D7A2>: <20><><EFBFBD><EFBFBD>2<EFBFBD>̶<EFBFBD>ʹ<EFBFBD><CAB9>BRT_Timer2)
COMx_InitStructure.UART_BaudRate = 115200; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, һ<><D2BB> 110 ~ 115200
COMx_InitStructure.UART_RxEnable = ENABLE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ENABLE<4C><45>DISABLE
COMx_InitStructure.BaudRateDouble = DISABLE; //<2F><><EFBFBD><EFBFBD><EFBFBD>ʼӱ<CABC>, ENABLE<4C><45>DISABLE
COMx_InitStructure.UART_Interrupt = ENABLE; //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>, ENABLE<4C><45>DISABLE
COMx_InitStructure.UART_Priority = Priority_0; //ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>(<28>͵<EFBFBD><CDB5><EFBFBD>) Priority_0,Priority_1,Priority_2,Priority_3
COMx_InitStructure.UART_P_SW = UART1_SW_P30_P31; //<2F>л<EFBFBD><D0BB>˿<EFBFBD>, UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17,UART1_SW_P43_P44
UART_Configuration(UART1, &COMx_InitStructure); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 UART1,UART2,UART3,UART4
//PrintString1("STC8H8K64U UART1 Test Programme!\r\n"); //UART1<54><31><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
}
/********************WDT INT<4E><54><EFBFBD><EFBFBD> ********************/
void WDT_config(void)
{
WDT_InitTypeDef WDT_InitStructure; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
WDT_InitStructure.WDT_Enable = ENABLE; //<2F>ж<EFBFBD>ʹ<EFBFBD><CAB9> ENABLE<4C><45>DISABLE
WDT_InitStructure.WDT_IDLE_Mode = WDT_IDLE_STOP; //IDLEģʽ<C4A3>Ƿ<EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD> WDT_IDLE_STOP,WDT_IDLE_RUN
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
WDT_Inilize(&WDT_InitStructure); //<2F><>ʼ<EFBFBD><CABC>
}
u8 count_flag=0;
void main(void)
{
GPIO_config();
UART3_config();
Start_Init();
pwm_config();
Timer2_Init_1ms();
Key_Init();
GPIO1_config();
UART1_config();
WDT_config(); //<2F><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD>629ms<6D><73>λ
PCON &= ~POF; //<2F><><EFBFBD><EFBFBD>LVD<56>жϱ<D0B6>־λ
RSTCFG = 0x41; //LVD:2.4V<EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD>λ
EA = 1;
if(debug)
{
PrintString1("MCU Start");
}
while (1)
{
WDT_Clear(); //<2F>
count_flag++;
//Ϊ<>˱<EFBFBD>֤ij<D6A4><C4B3>ѹ2.2V<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(count_flag==1)
{
P10=1;
}
if(count_flag==8)
{
P10=0;
}
if(count_flag==10)
{
count_flag=0;
}
Usart_judge_Data();
Usart_Deal_Data();
deal_command1();
deal_command2();
// checkpwm();
show_light();
Usart_answer();
Key_ScanTask();
KEY_TEST();
}
}

358
pwm_control.c Normal file
View File

@@ -0,0 +1,358 @@
#include "pwm_control.h"
#include "GPIO.h"
#include "STC8xxxx.h"
#include "PWM15bit.h"
#include "timer.h"
#include "UART_Set.h"
#include "string.h"
S_PWM s_pwm;
/*
*1.<2E><><EFBFBD><EFBFBD>5.0/5.1<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><EFBFBD>
*2.<2E><>ʼ<EFBFBD><CABC>PWM<57><4D><EFBFBD><EFBFBD>
*3.LED_DRV_12V_EN<45>õ<EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
/******************* IO<49><4F><EFBFBD>ú<EFBFBD><C3BA><EFBFBD> *******************/
void GPIO_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
/***********************************1*******************************************/
GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1; //ָ<><D6B8>Ҫ<EFBFBD><D2AA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>IO, GPIO_Pin_0 ~ GPIO_Pin_7
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_OUT_PP
GPIO_Inilize(GPIO_P5,&GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>
/***********************************2*******************************************/
GPIO_InitStructure.Pin = GPIO_Pin_All; //ָ<><D6B8>Ҫ<EFBFBD><D2AA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>IO, GPIO_Pin_0 ~ GPIO_Pin_7
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_OUT_PP
GPIO_Inilize(GPIO_P0,&GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>
GPIO_InitStructure.Pin = GPIO_Pin_Left; //ָ<><D6B8>Ҫ<EFBFBD><D2AA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>IO, GPIO_Pin_0 ~ GPIO_Pin_7
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_OUT_PP
GPIO_Inilize(GPIO_P2,&GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>
/***********************************3*******************************************/
GPIO_InitStructure.Pin = GPIO_Pin_0; //ָ<><D6B8>Ҫ<EFBFBD><D2AA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>IO, GPIO_Pin_0 ~ GPIO_Pin_7
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_OUT_PP
GPIO_Inilize(GPIO_P1,&GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>
}
void pwm_config(void)
{
u8 i;
PWM15_InitTypeDef PWM15_InitStructure;
PWM15_InitStructure.PWM_Enable = ENABLE; //PWMʹ<4D><CAB9>, ENABLE, DISABLE
PWM15_InitStructure.PWM_Period = 0x04E2; //PWM<57><4D><EFBFBD><EFBFBD>, 1250,Ƶ<><C6B5>Ϊ16khz
PWM15_InitStructure.PWM_Clock_Sel = PWMn_CLK_SYS; //ʱ<><CAB1>Դѡ<D4B4><D1A1>, PWMn_CLK_SYS, PWMn_CLK_TM2
PWM15_InitStructure.PWM_Clock_PS = 0; //ϵͳʱ<CDB3>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>(PS+1<><31>Ƶ), 0~15
PWM15_InitStructure.PWM_Counter = ENABLE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>, ENABLE, DISABLE
PWM15_Init(PWM0,&PWM15_InitStructure); //<2F><>ʼ<EFBFBD><CABC>PWM0
PWM15_Init(PWM2,&PWM15_InitStructure); //<2F><>ʼ<EFBFBD><CABC>PWM2
PWM15Duty(PWM00,initial_Val); //PWM_ID, <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽλ<C6BD><CEBB>, <20><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽλ<C6BD><CEBB>
PWM15Duty(PWM01,initial_Val); //PWM_ID, <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽλ<C6BD><CEBB>, <20><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽλ<C6BD><CEBB>
PWM15Duty(PWM02,initial_Val); //PWM_ID, <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽλ<C6BD><CEBB>, <20><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽλ<C6BD><CEBB>
PWM15Duty(PWM03,initial_Val); //PWM_ID, <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽλ<C6BD><CEBB>, <20><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽλ<C6BD><CEBB>
PWM15Duty(PWM04,initial_Val);
PWM15Duty(PWM05,initial_Val);
PWM15Duty(PWM06,initial_Val);
PWM15Duty(PWM07,initial_Val);
PWM15Duty(PWM20,initial_Val);
PWM15Duty(PWM21,initial_Val);
PWM15Duty(PWM22,initial_Val);
PWM15Duty(PWM23,initial_Val);
memset(&s_pwm,0,sizeof(s_pwm));
for(i=0;i<12;i++)
{
s_pwm.currpwm[i]=initial_Val;
}
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><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
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><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
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><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
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><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
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><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
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><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
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><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
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><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
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><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
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><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
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><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
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><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>, <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
//10ms<6D><73><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
void deal_command1(void)
{
int i=0;
static u32 systick_command1 = 0;
if (systick_1ms - systick_command1 >= 10)
{
systick_command1 = systick_1ms;
for (i = 0; i < 12; i++)
{
if (s_recv.flag1[i])
{
if (s_pwm.wanttopwm[i] > s_pwm.currpwm[i])
{
//s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i];
s_pwm.doublecurrpwm[i] += s_pwm.every_change_10ms[i];
s_pwm.currpwm[i] = (u16)s_pwm.doublecurrpwm[i];
if(s_recv.global_brightness==0)
{
s_pwm.currvalue[i]=0;
}
else
{
s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_brightness;
}
if ( s_pwm.wanttopwm[i] < s_pwm.currpwm[i])
{
s_pwm.currpwm[i] = s_pwm.wanttopwm[i];
}
}
//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4>ڵ<EFBFBD>ǰֵʱ
if (s_pwm.wanttopwm[i] < s_pwm.currpwm[i])
{
//s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i];
s_pwm.doublecurrpwm[i] -= s_pwm.every_change_10ms[i];
s_pwm.currpwm[i] = (u16)s_pwm.doublecurrpwm[i];
if(s_recv.global_brightness==0)
{
s_pwm.currvalue[i]=0;
}
else
{
s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_brightness;
}
if (s_pwm.currpwm[i] < s_pwm.wanttopwm[i] + s_pwm.every_change_10ms[i])
{
s_pwm.currpwm[i] = 0;
s_pwm.currpwm[i] = s_pwm.wanttopwm[i];
}
}
if (s_pwm.wanttopwm[i] == s_pwm.currpwm[i])
{
s_pwm.currvalue[i] = s_recv.B_Ch[i];
s_recv.flag1[i] = 0;
}
}
}
}
}
void deal_command2(void)
{
int i=0;
static u32 systick_command2 = 0;
if (systick_1ms - systick_command2 >= 10)
{
systick_command2 = systick_1ms;
for (i = 0; i < 12; i++)
{
if (s_recv.flag2[i])
{
switch (s_recv.mode[i])
{
//<2F><><EFBFBD><EFBFBD>ֹͣģʽ
case 0x00:
//<2F><><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>
if (s_recv.forward[i] == 0x00)
{
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];
s_pwm.currpwm[i] += s_recv.pwm_step[i];
if(s_recv.global_brightness==0)
{
s_pwm.currvalue[i]=0;
}
else
{
s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_brightness;
}
if (s_pwm.currpwm[i] >= s_pwm.wanttopwm[i])
{
s_recv.flag2[i] = 0;
s_pwm.currpwm[i] = s_pwm.wanttopwm[i];
s_pwm.currvalue[i] = s_recv.B_min; //<2F><><EFBFBD>ڻظ<DABB><D8B8><EFBFBD><EFBFBD><EFBFBD>
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (s_recv.forward[i] == 0x01)
{
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];
if (s_pwm.currpwm[i] <= s_pwm.wanttopwm[i] + s_recv.pwm_step[i])
{
s_recv.flag2[i] = 0;
s_pwm.currpwm[i] = s_pwm.wanttopwm[i];
s_pwm.currvalue[i] = s_recv.B_max;
}
else
{
s_pwm.currpwm[i] -= s_recv.pwm_step[i];
if(s_recv.global_brightness==0)
{
s_pwm.currvalue[i]=0;
}
else
{
s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_brightness;
}
}
}
break;
//˫<><CBAB>ѭ<EFBFBD><D1AD>ģʽ
case 0x01:
//<2F>ݼ<EFBFBD>
if (s_recv.forward[i] == 0x00)
{
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];
s_pwm.currpwm[i] += s_recv.pwm_step[i];
if(s_recv.global_brightness==0)
{
s_pwm.currvalue[i]=0;
}
else
{
s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_brightness;
}
if (s_pwm.currpwm[i] >= s_pwm.wanttopwm[i])
{
s_recv.forward[i] = 0x01;
s_pwm.currpwm[i] = s_pwm.wanttopwm[i];
s_pwm.currvalue[i] = s_recv.B_min; //<2F><><EFBFBD>ڻظ<DABB><D8B8><EFBFBD><EFBFBD><EFBFBD>
}
}
//<2F><><EFBFBD><EFBFBD>
if (s_recv.forward[i] == 0x01)
{
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];
if (s_pwm.currpwm[i] <= s_pwm.wanttopwm[i] + s_recv.pwm_step[i])
{
s_recv.forward[i] = 0x00;
s_pwm.currpwm[i] = s_pwm.wanttopwm[i];
s_pwm.currvalue[i] = s_recv.B_max;
}
else
{
s_pwm.currpwm[i] -= s_recv.pwm_step[i];
if(s_recv.global_brightness==0)
{
s_pwm.currvalue[i]=0;
}
else
{
s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_brightness;
}
}
}
break;
case 0x02:
//ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
s_recv.flag2[i] = 0;
break;
}
}
}
}
}
//ֱ<>ӹص<D3B9><D8B5><EFBFBD>,<2C><><EFBFBD><EFBFBD>¼״̬
void Close_Light(u8 i)
{
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>
}
//<2F>򿪵<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Open_Light(u8 pin)
{
s_pwm.currpwm[pin] = PWM_MAX_VALUE - s_pwm.currvalue[pin] * PWM_MAX_VALUE * s_recv.global_brightness / 100 / 100;
}
void PWM_write(u8 i, u16 Val)
{
switch (i)
{
case 0:
PWM15Duty(PWM07,Val);
break;
case 1:
PWM15Duty(PWM06,Val);
break;
case 2:
PWM15Duty(PWM05,Val);
break;
case 3:
PWM15Duty(PWM04,Val);
break;
case 4:
PWM15Duty(PWM03,Val);
break;
case 5:
PWM15Duty(PWM02,Val);
break;
case 6:
PWM15Duty(PWM01,Val);
break;
case 7:
PWM15Duty(PWM00,Val);
break;
case 8:
PWM15Duty(PWM23,Val);
break;
case 9:
PWM15Duty(PWM22,Val);
break;
case 10:
PWM15Duty(PWM21,Val);
break;
case 11:
PWM15Duty(PWM20,Val);
break;
}
}
void show_light(void)
{
int i;
for (i = 0; i < 12; i++)
{
if(s_pwm.currpwm[i]==20000ul)
{
Close_Light(i);
}
else
{
PWM_write(i, s_pwm.currpwm[i]);
}
}
}
//void checkpwm(void)
//{
// int i;
// for (i = 0; i < 12; i++)
// {
// if ((s_recv.flag1[i] == 0) && (s_recv.flag2[i] == 0) && (s_recv.changeflag == 1))
// {
// if (s_pwm.wanttopwmflash[i] != s_pwm.currpwm[i])
// {
// s_pwm.currpwm[i] = s_pwm.wanttopwmflash[i];
// }
// }
// }
// s_recv.changeflag = 0;
//}

51
pwm_control.h Normal file
View File

@@ -0,0 +1,51 @@
#ifndef PWM_CONTROL_H
#define PWM_CONTROL_H
#include "STC8xxxx.h"
#define PWM_MAX_VALUE 1250ul
#define initial_Val 1251ul
/*
#define LED_DRV_CH1 P07
#define LED_DRV_CH2 P06
#define LED_DRV_CH3 P05
#define LED_DRV_CH4 P04
#define LED_DRV_CH5 P03
#define LED_DRV_CH6 P02
#define LED_DRV_CH7 P01
#define LED_DRV_CH8 P00
#define LED_DRV_CH9 P23
#define LED_DRV_CH10 P22
#define LED_DRV_CH11 P21
#define LED_DRV_CH12 P20
*/
#define LED_DRV_12V_EN P10
typedef struct
{
u16 currpwm[12];
u16 thenvalue[12];
float doublecurrpwm[12];
u16 wanttopwm[12];
u16 currvalue[12]; //<2F><>ǰ<EFBFBD>ٷֱ<D9B7>ֵ
u16 changetime[12];
u16 wanttovalue[12];
float every_change_10ms[12];
// u16 wanttopwmflash[12];
u8 key_value;
}xdata S_PWM;
extern S_PWM s_pwm;
void Close_Light(u8 pin);
void Open_Light(u8 pin);
void PWM_write(u8 i, u16 pwm);
void deal_command1(void);
void deal_command2(void);
void show_light(void);
void checkpwm(void);
void GPIO_config(void);
void pwm_config(void);
#endif

160
timer.c Normal file
View File

@@ -0,0 +1,160 @@
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
/* --- QQ: 800003751 -------------------------------------------------*/
/* <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> */
/*---------------------------------------------------------------------*/
/************* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> **************
<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ΪSTC8ϵ<EFBFBD>еĶ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϳ<EFBFBD><EFBFBD><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>.
******************************************/
#include "timer.h"
u32 systick_1ms=0;
/********************* Timer0<72>жϺ<D0B6><CFBA><EFBFBD>************************/
void timer0_int (void) interrupt TIMER0_VECTOR
{
P67 = ~P67;
}
/********************* Timer1<72>жϺ<D0B6><CFBA><EFBFBD>************************/
void timer1_int (void) interrupt TIMER1_VECTOR
{
P66 = ~P66;
}
/********************* Timer2<72>жϺ<D0B6><CFBA><EFBFBD>************************/
void timer2_int (void) interrupt TIMER2_VECTOR
{
systick_1ms++;
}
/********************* Timer3<72>жϺ<D0B6><CFBA><EFBFBD>************************/
void timer3_int (void) interrupt TIMER3_VECTOR
{
}
/********************* Timer4<72>жϺ<D0B6><CFBA><EFBFBD>************************/
void timer4_int (void) interrupt TIMER4_VECTOR
{
P63 = ~P63;
}
//========================================================================
// <20><><EFBFBD><EFBFBD>: u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx)
// <20><><EFBFBD><EFBFBD>: <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: TIMx: <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD>,<2C><><EFBFBD>ο<EFBFBD>timer.h<><68><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>.
// <20><><EFBFBD><EFBFBD>: <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>0, <20>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1,<2C><><EFBFBD>󷵻<EFBFBD>2.
// <20>汾: V1.0, 2012-10-22
//========================================================================
u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx)
{
if(TIM > Timer4) return 1; //<2F>ղ<EFBFBD><D5B2><EFBFBD>
if(TIM == Timer0)
{
Timer0_Stop(); //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
if(TIMx->TIM_Interrupt == ENABLE) Timer0_InterruptEnable(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
else Timer0_InterruptDisable(); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
if(TIMx->TIM_Priority > Priority_3) return 2; //<2F><><EFBFBD><EFBFBD>
Timer0_Priority(TIMx->TIM_Priority); //ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>(<28>͵<EFBFBD><CDB5><EFBFBD>) Priority_0,Priority_1,Priority_2,Priority_3
if(TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) return 2; //<2F><><EFBFBD><EFBFBD>
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>װ
if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer0_12T(); //12T
if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer0_1T(); //1T
if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer0_AsCounter(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
else Timer0_AsTimer(); //<2F><>ʱ
if(TIMx->TIM_ClkOut == ENABLE) Timer0_CLKO_Enable(); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
else Timer0_CLKO_Disable(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
T0_Load(TIMx->TIM_Value);
if(TIMx->TIM_Run == ENABLE) Timer0_Run(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
return 0; //<2F>ɹ<EFBFBD>
}
if(TIM == Timer1)
{
Timer1_Stop(); //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
if(TIMx->TIM_Interrupt == ENABLE) Timer1_InterruptEnable(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
else Timer1_InterruptDisable(); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
if(TIMx->TIM_Priority > Priority_3) return 2; //<2F><><EFBFBD><EFBFBD>
Timer1_Priority(TIMx->TIM_Priority); //ָ<><D6B8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>(<28>͵<EFBFBD><CDB5><EFBFBD>) Priority_0,Priority_1,Priority_2,Priority_3
if(TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) return 2; //<2F><><EFBFBD><EFBFBD>
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>װ
if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer1_12T(); //12T
if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer1_1T(); //1T
if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer1_AsCounter(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
else Timer1_AsTimer(); //<2F><>ʱ
if(TIMx->TIM_ClkOut == ENABLE) Timer1_CLKO_Enable(); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
else Timer1_CLKO_Disable(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
T1_Load(TIMx->TIM_Value);
if(TIMx->TIM_Run == ENABLE) Timer1_Run(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
return 0; //<2F>ɹ<EFBFBD>
}
if(TIM == Timer2) //Timer2,<2C>̶<EFBFBD>Ϊ16λ<36>Զ<EFBFBD><D4B6><EFBFBD>װ, <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
{
Timer2_Stop(); //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
if(TIMx->TIM_Interrupt == ENABLE) Timer2_InterruptEnable(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
else Timer2_InterruptDisable(); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2;
if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer2_12T(); //12T
if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer2_1T(); //1T
if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer2_AsCounter(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
else Timer2_AsTimer(); //<2F><>ʱ
if(TIMx->TIM_ClkOut == ENABLE) Timer2_CLKO_Enable(); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
else Timer2_CLKO_Disable(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
T2_Load(TIMx->TIM_Value);
if(TIMx->TIM_Run == ENABLE) Timer2_Run(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
return 0; //<2F>ɹ<EFBFBD>
}
if(TIM == Timer3) //Timer3,<2C>̶<EFBFBD>Ϊ16λ<36>Զ<EFBFBD><D4B6><EFBFBD>װ, <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
{
Timer3_Stop(); //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
if(TIMx->TIM_Interrupt == ENABLE) Timer3_InterruptEnable(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
else Timer3_InterruptDisable(); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2;
if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer3_12T(); //12T
if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer3_1T(); //1T
if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer3_AsCounter(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
else Timer3_AsTimer(); //<2F><>ʱ
if(TIMx->TIM_ClkOut == ENABLE) Timer3_CLKO_Enable(); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
else Timer3_CLKO_Disable(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
T3_Load(TIMx->TIM_Value);
if(TIMx->TIM_Run == ENABLE) Timer3_Run(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
return 0; //<2F>ɹ<EFBFBD>
}
if(TIM == Timer4) //Timer3,<2C>̶<EFBFBD>Ϊ16λ<36>Զ<EFBFBD><D4B6><EFBFBD>װ, <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
{
Timer4_Stop(); //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
if(TIMx->TIM_Interrupt == ENABLE) Timer4_InterruptEnable(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
else Timer4_InterruptDisable(); //<2F><>ֹ<EFBFBD>ж<EFBFBD>
if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2;
if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer4_12T(); //12T
if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer4_1T(); //1T
if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer4_AsCounter(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
else Timer4_AsTimer(); //<2F><>ʱ
if(TIMx->TIM_ClkOut == ENABLE) Timer4_CLKO_Enable(); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
else Timer4_CLKO_Disable(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
T4_Load(TIMx->TIM_Value);
if(TIMx->TIM_Run == ENABLE) Timer4_Run(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
return 0; //<2F>ɹ<EFBFBD>
}
return 2; //<2F><><EFBFBD><EFBFBD>
}

47
timer.h Normal file
View File

@@ -0,0 +1,47 @@
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
/* --- QQ: 800003751 -------------------------------------------------*/
/* <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> */
/*---------------------------------------------------------------------*/
#ifndef __TIMER_H
#define __TIMER_H
#include "config.h"
#define Timer0 0
#define Timer1 1
#define Timer2 2
#define Timer3 3
#define Timer4 4
#define TIM_16BitAutoReload 0
#define TIM_16Bit 1
#define TIM_8BitAutoReload 2
#define TIM_16BitAutoReloadNoMask 3
#define TIM_CLOCK_1T 0
#define TIM_CLOCK_12T 1
#define TIM_CLOCK_Ext 2
typedef struct
{
u8 TIM_Mode; //<2F><><EFBFBD><EFBFBD>ģʽ, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
u8 TIM_Priority; //<2F><><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD> Priority_0,Priority_1,Priority_2,Priority_3
u8 TIM_Interrupt; //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD> ENABLE,DISABLE
u8 TIM_ClkSource; //ʱ<><CAB1>Դ TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
u8 TIM_ClkOut; //<2F>ɱ<EFBFBD><C9B1><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ENABLE,DISABLE
u16 TIM_Value; //װ<>س<EFBFBD>ֵ
u8 TIM_Run; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> ENABLE,DISABLE
} TIM_InitTypeDef;
extern u32 systick_1ms;
u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx);
#endif