From afb698ed3d2d21b9274abff160409287fe854dd7 Mon Sep 17 00:00:00 2001 From: cyp0633 Date: Mon, 22 Aug 2022 14:51:00 +0800 Subject: [PATCH] Initial commit --- 1/2-1.uvopt | 197 +++++++++++++++ 1/2-1.uvproj | 448 +++++++++++++++++++++++++++++++++++ 1/main.c | 32 +++ 2-1/2.uvopt | 197 +++++++++++++++ 2-1/2.uvproj | 395 ++++++++++++++++++++++++++++++ 2-1/main.c | 38 +++ 2-2/2-2.uvopt | 173 ++++++++++++++ 2-2/2-2.uvproj | 383 ++++++++++++++++++++++++++++++ 2-2/main.c | 33 +++ 3-1/3-1.uvopt | 197 +++++++++++++++ 3-1/3-1.uvproj | 395 ++++++++++++++++++++++++++++++ 3-1/main.c | 31 +++ 3-2/3-2.uvproj | 0 3-2/main.c | 33 +++ inc/Beep.h | 28 +++ inc/DS1302.h | 75 ++++++ inc/EXT.h | 64 +++++ inc/FM_Radio.h | 49 ++++ inc/IR.h | 85 +++++++ inc/Key.h | 34 +++ inc/M24C02.h | 32 +++ inc/STC15F2K60S2.H | 237 ++++++++++++++++++ inc/StepMotor.h | 50 ++++ inc/Vib.h | 25 ++ inc/adc.h | 79 ++++++ inc/displayer.h | 26 ++ inc/hall.h | 24 ++ inc/music.h | 104 ++++++++ inc/sys.h | 63 +++++ inc/uart1.h | 58 +++++ inc/uart2.h | 65 +++++ inc/universal_decode_table.h | 9 + 32 files changed, 3659 insertions(+) create mode 100644 1/2-1.uvopt create mode 100644 1/2-1.uvproj create mode 100644 1/main.c create mode 100644 2-1/2.uvopt create mode 100644 2-1/2.uvproj create mode 100644 2-1/main.c create mode 100644 2-2/2-2.uvopt create mode 100644 2-2/2-2.uvproj create mode 100644 2-2/main.c create mode 100644 3-1/3-1.uvopt create mode 100644 3-1/3-1.uvproj create mode 100644 3-1/main.c create mode 100644 3-2/3-2.uvproj create mode 100644 3-2/main.c create mode 100644 inc/Beep.h create mode 100644 inc/DS1302.h create mode 100644 inc/EXT.h create mode 100644 inc/FM_Radio.h create mode 100644 inc/IR.h create mode 100644 inc/Key.h create mode 100644 inc/M24C02.h create mode 100644 inc/STC15F2K60S2.H create mode 100644 inc/StepMotor.h create mode 100644 inc/Vib.h create mode 100644 inc/adc.h create mode 100644 inc/displayer.h create mode 100644 inc/hall.h create mode 100644 inc/music.h create mode 100644 inc/sys.h create mode 100644 inc/uart1.h create mode 100644 inc/uart2.h create mode 100644 inc/universal_decode_table.h diff --git a/1/2-1.uvopt b/1/2-1.uvopt new file mode 100644 index 0000000..a99d45e --- /dev/null +++ b/1/2-1.uvopt @@ -0,0 +1,197 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + Target 1 + 0x0 + MCS-51 + + 35000000 + + 1 + 1 + 1 + 0 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + -1 + + + + + + + + + + + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Source Group 1 + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 1 + 2 + 4 + 0 + 0 + 0 + .\STCBSP_V3.6.LIB + STCBSP_V3.6.LIB + 0 + 0 + + + +
diff --git a/1/2-1.uvproj b/1/2-1.uvproj new file mode 100644 index 0000000..d98dd80 --- /dev/null +++ b/1/2-1.uvproj @@ -0,0 +1,448 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x0 + MCS-51 + 0 + + + STC15F2K60S2 Series + STC + IRAM(0-0xFF) XRAM(0-0x6FF) IROM(0-0xEFF8) CLOCK(35000000) MODP2 + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 62472 + STC15F2K60S2.H + + + + + + + + + + + 0 + 0 + + + + STC\ + STC\ + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + 2-1 + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + 65535 + + + S8051.DLL + + DP51.DLL + -pDP8051 + S8051.DLL + + TP51.DLL + -p51 + + + + 0 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + -1 + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + -1 + + 0 + + + + + + + 0 + + + + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x10000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0xeff9 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x700 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 8 + 2 + 1 + 1 + 0 + 0 + + + + + + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 1 + 0 + 2 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source Group 1 + + + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + 65535 + + + + 2 + 2 + 2 + 2 + 2 + 8 + 10 + 3 + 2 + 2 + 2 + 0 + + + + + ..\inc + + + + 2 + 2 + 2 + 2 + + + + + + + + + + + + main.c + 1 + .\main.c + + + STCBSP_V3.6.LIB + 4 + .\STCBSP_V3.6.LIB + + + + + + + +
diff --git a/1/main.c b/1/main.c new file mode 100644 index 0000000..176be32 --- /dev/null +++ b/1/main.c @@ -0,0 +1,32 @@ +// This project is used for demonstrating digital tubes of BSP library. +#include "STC15F2K60S2.H" +#include "sys.h" +#include "uart1.h" + +code unsigned long SysClock = 11059200; //必须。定义系统工作时钟频率(Hz),用户必须修改成与实际工作频率(下载时选择的)一致 +char buffer[10],*match; + +void sendBack() +{ + char temp; + int i; + for(i=0;i<5;i++) + { + temp=buffer[i]; + buffer[i]=buffer[9-i]; + buffer[9-i]=temp; + } + Uart1Print(buffer,10); +} + +void main() +{ + Uart1Init(2400); //初始化串口1,波特率为2400 + SetUart1Rxd(buffer,10,match,0); + SetEventCallBack(enumEventUart1Rxd,sendBack); + MySTC_Init(); + while (1) + { + MySTC_OS(); + } +} diff --git a/2-1/2.uvopt b/2-1/2.uvopt new file mode 100644 index 0000000..ddd7689 --- /dev/null +++ b/2-1/2.uvopt @@ -0,0 +1,197 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + Target 1 + 0x0 + MCS-51 + + 35000000 + + 1 + 1 + 1 + 0 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + -1 + + + + + + + + + + + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 1 + 2 + 4 + 0 + 0 + 0 + .\STCBSP_V3.6.LIB + STCBSP_V3.6.LIB + 0 + 0 + + + +
diff --git a/2-1/2.uvproj b/2-1/2.uvproj new file mode 100644 index 0000000..1e32476 --- /dev/null +++ b/2-1/2.uvproj @@ -0,0 +1,395 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x0 + MCS-51 + 0 + + + STC15F2K60S2 Series + STC + IRAM(0-0xFF) XRAM(0-0x6FF) IROM(0-0xEFF8) CLOCK(35000000) MODP2 + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 62472 + STC15F2K60S2.H + + + + + + + + + + + 0 + 0 + + + + STC\ + STC\ + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + 2 + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + 65535 + + + S8051.DLL + + DP51.DLL + -pDP8051 + S8051.DLL + + TP51.DLL + -p51 + + + + 0 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + -1 + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + -1 + + 0 + + + + + + + 0 + + + + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x10000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0xeff9 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x700 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 8 + 2 + 1 + 1 + 0 + 0 + + + + + ..\inc + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 1 + 0 + 2 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source Group 1 + + + main.c + 1 + .\main.c + + + STCBSP_V3.6.LIB + 4 + .\STCBSP_V3.6.LIB + + + + + + + +
diff --git a/2-1/main.c b/2-1/main.c new file mode 100644 index 0000000..3d0e1fa --- /dev/null +++ b/2-1/main.c @@ -0,0 +1,38 @@ +// receiver +#include "STC15F2K60S2.H" +#include "sys.h" +#include "uart2.h" + +code unsigned long SysClock = 11059200; //必须。定义系统工作时钟频率(Hz),用户必须修改成与实际工作频率(下载时选择的)一致 +char num[5]={0x01,0x03,0x05,0x07,0x09}; +int countdown=10; + +void sendData() +{ + int i; + if(countdown) + { + countdown--; + } + countdown=10; + Uart2Print(num,5); + for(i=0;i<5;i++) + { + num[i]++; + if(num[i]>0x09) + { + num[i]=0x01; + } + } +} + +void main() +{ + Uart2Init(1200,Uart2Usedfor485); //初始化串口2,波特率为2400 + SetEventCallBack(enumEventSys1S,sendData); + MySTC_Init(); + while (1) + { + MySTC_OS(); + } +} diff --git a/2-2/2-2.uvopt b/2-2/2-2.uvopt new file mode 100644 index 0000000..21bc78f --- /dev/null +++ b/2-2/2-2.uvopt @@ -0,0 +1,173 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + Target 1 + 0x0 + MCS-51 + + 35000000 + + 1 + 1 + 1 + 0 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 255 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + -1 + + + + + + + + + + + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/2-2/2-2.uvproj b/2-2/2-2.uvproj new file mode 100644 index 0000000..e1a2a9c --- /dev/null +++ b/2-2/2-2.uvproj @@ -0,0 +1,383 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x0 + MCS-51 + 0 + + + STC15F2K60S2 Series + STC + IRAM(0-0xFF) XRAM(0-0x6FF) IROM(0-0xEFF8) CLOCK(35000000) MODP2 + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 62472 + STC15F2K60S2.H + + + + + + + + + + + 0 + 0 + + + + STC\ + STC\ + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + 2-2 + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + 65535 + + + S8051.DLL + + DP51.DLL + -pDP8051 + S8051.DLL + + TP51.DLL + -p51 + + + + 0 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + -1 + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + -1 + + 0 + + + + + + + 0 + + + + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x10000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0xeff9 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x700 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 8 + 2 + 1 + 1 + 0 + 0 + + + + + ..\inc + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 1 + 0 + 2 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source Group 1 + + + + + +
diff --git a/2-2/main.c b/2-2/main.c new file mode 100644 index 0000000..8244068 --- /dev/null +++ b/2-2/main.c @@ -0,0 +1,33 @@ +// receiver +#include "STC15F2K60S2.H" +#include "displayer.h" +#include "sys.h" +#include "uart2.h" + +code unsigned long SysClock = 11059200; //必须。定义系统工作时钟频率(Hz),用户必须修改成与实际工作频率(下载时选择的)一致 +char buffer[10], *match; +int sum; + +void sendBack() +{ + int i; + for (i = 0; i < 5; i++) + { + sum += buffer[i]; + } + // print least 8 bits + LedPrint(sum & 0xFF); +} + +void main() +{ + Uart2Init(1200, Uart2Usedfor485); //初始化串口2,波特率为2400 + DisplayerInit(); + SetUart2Rxd(buffer, 5, match, 0); //设置串口2接收缓冲区,接收5个字节,匹配0个字节 + SetEventCallBack(enumEventUart2Rxd, sendBack); + MySTC_Init(); + while (1) + { + MySTC_OS(); + } +} diff --git a/3-1/3-1.uvopt b/3-1/3-1.uvopt new file mode 100644 index 0000000..a99d45e --- /dev/null +++ b/3-1/3-1.uvopt @@ -0,0 +1,197 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + Target 1 + 0x0 + MCS-51 + + 35000000 + + 1 + 1 + 1 + 0 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + -1 + + + + + + + + + + + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Source Group 1 + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 1 + 2 + 4 + 0 + 0 + 0 + .\STCBSP_V3.6.LIB + STCBSP_V3.6.LIB + 0 + 0 + + + +
diff --git a/3-1/3-1.uvproj b/3-1/3-1.uvproj new file mode 100644 index 0000000..9537bfa --- /dev/null +++ b/3-1/3-1.uvproj @@ -0,0 +1,395 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x0 + MCS-51 + 0 + + + STC15F2K60S2 Series + STC + IRAM(0-0xFF) XRAM(0-0x6FF) IROM(0-0xEFF8) CLOCK(35000000) MODP2 + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 62472 + STC15F2K60S2.H + + + + + + + + + + + 0 + 0 + + + + STC\ + STC\ + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + 3-1 + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + 65535 + + + S8051.DLL + + DP51.DLL + -pDP8051 + S8051.DLL + + TP51.DLL + -p51 + + + + 0 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + -1 + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + -1 + + 0 + + + + + + + 0 + + + + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x10000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0xeff9 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x700 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 8 + 2 + 1 + 1 + 0 + 0 + + + + + ..\inc + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 1 + 0 + 2 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source Group 1 + + + main.c + 1 + .\main.c + + + STCBSP_V3.6.LIB + 4 + .\STCBSP_V3.6.LIB + + + + + + + +
diff --git a/3-1/main.c b/3-1/main.c new file mode 100644 index 0000000..beab051 --- /dev/null +++ b/3-1/main.c @@ -0,0 +1,31 @@ +// receiver +#include "IR.h" +#include "STC15F2K60S2.H" +#include "sys.h" + +code unsigned long SysClock = 11059200; //必须。定义系统工作时钟频率(Hz),用户必须修改成与实际工作频率(下载时选择的)一致 +char tmp[5]; +int sum = 0; + +void IrRxd() +{ + int i; + for (i = 0; i < 5; i++) + { + sum += tmp[i]; + } + // print least 8 bits + LedPrint(sum & 0xFF); +} + +void main() +{ + IrInit(NEC_R05d); + SetIrRxd(tmp, 5); + SetEventCallBack(enumEventIrRxd, IrRxd); + MySTC_Init(); + while (1) + { + MySTC_OS(); + } +} diff --git a/3-2/3-2.uvproj b/3-2/3-2.uvproj new file mode 100644 index 0000000..e69de29 diff --git a/3-2/main.c b/3-2/main.c new file mode 100644 index 0000000..8244068 --- /dev/null +++ b/3-2/main.c @@ -0,0 +1,33 @@ +// receiver +#include "STC15F2K60S2.H" +#include "displayer.h" +#include "sys.h" +#include "uart2.h" + +code unsigned long SysClock = 11059200; //必须。定义系统工作时钟频率(Hz),用户必须修改成与实际工作频率(下载时选择的)一致 +char buffer[10], *match; +int sum; + +void sendBack() +{ + int i; + for (i = 0; i < 5; i++) + { + sum += buffer[i]; + } + // print least 8 bits + LedPrint(sum & 0xFF); +} + +void main() +{ + Uart2Init(1200, Uart2Usedfor485); //初始化串口2,波特率为2400 + DisplayerInit(); + SetUart2Rxd(buffer, 5, match, 0); //设置串口2接收缓冲区,接收5个字节,匹配0个字节 + SetEventCallBack(enumEventUart2Rxd, sendBack); + MySTC_Init(); + while (1) + { + MySTC_OS(); + } +} diff --git a/inc/Beep.h b/inc/Beep.h new file mode 100644 index 0000000..f026d92 --- /dev/null +++ b/inc/Beep.h @@ -0,0 +1,28 @@ +/**********************************Beep V2.0 说明 ************************************************************************ +Beep用于控制“STC-B学习板”上无源蜂鸣器的发声。Beep模块共提供1个驱动函数、2个应用函数: + (1) BeepInit():蜂鸣器模块驱动函数 + (2) Set_Beep(unsigned int Beep_freq, unsigned char Beep_time):控制蜂鸣器发声,非阻塞型 + 函数参数: + Beep_freq:指定发声频率,单位Hz。小于10将无输出 + Beep_time:指定发声时长。发声时长=10*Beep_time (mS) ,最长 655350mS + 函数返回值:enumSetBeepOK:调用成功,enumSetBeepFail:调用失败(或因蜂鸣器正在发音) + (3) GetBeepStatus(void): 获取Beep当前状态,enmuBeepFree:空闲, enumBeepBusy ,正在发音 + (4) Beep模块使用了STC内部CCP模块1通道 + +编写:徐成(电话18008400450) 2021年3月3日设计,2021年3月26日更新 +*/ + +#ifndef _beep_H_ +#define _beep_H_ + +extern void BeepInit(); // 蜂鸣器初始化 + +extern char SetBeep(unsigned int Beep_freq, unsigned int Beep_time); // 发指定频率声音, 发声时长=10×Beep_time (mS) ,最长 655350mS + // Beep_freq < 10 Hz, 不发音 + // 函数返回 enumSetBeepOK:调用成功, enumSetBeepFail:调用失败(调用时正在发音) + +extern unsigned char GetBeepStatus(void); // 获取状态,enumBeepFree:自由, enumBeepBusy,正在发声 + +enum BeepActName {enumBeepFree=0,enumBeepBusy,enumSetBeepOK,enumSetBeepFail}; + +#endif \ No newline at end of file diff --git a/inc/DS1302.h b/inc/DS1302.h new file mode 100644 index 0000000..377b96e --- /dev/null +++ b/inc/DS1302.h @@ -0,0 +1,75 @@ +/**********************************DS1302 V1.1 ˵ ************************************************************************ +DS1302ģڿơSTC-Bѧϰ塱DS1302оƬ +DS1302ṩRTCʵʱʱӣNVMʧ洢ܣϵRTCNVMŦ۵BATάֹģУ + RTCṩꡢ¡աڡʱ֡빦 + NVMṩ31 Bytesʧ洢(ַΪ030УַΪ30ĵԪDS1302Init()ڼDS1302Ƿ磬ûʹ) +DS1302ģ鹲ṩ14Ӧú + + (1) void DS1302Init(struct_DS1302_RTC time)DS1302ʹDS1302øúʼһ + ṹstruct_DS1302_RTC time + DS1302磨ʼʱRTCʧЧԲtimeʱʼRTC + ֵ + + (2) struct_DS1302_RTC RTC_Read(void)ȡDS1302ڲʵʱʱRTC + + ֵṹstruct_DS1302ṹstruct_DS1302壩 + + (3) void RTC_Write(struct_DS1302_RTC time) дDS1302ڲʵʱʱRTC + ṹstruct_DS1302 timeṹstruct_DS1302壩 + ֵ + + (4) unsigned char NVM_Read(unsigned char NVM_addr): ȡNVMһַָ + + NVM_addrָʧ洢ԪַЧֵ03031Ԫ + ֵʱNVMжӦԪĴ洢ֵ1Byte + ʱenumDS1302_error + + (5) unsigned char NVM_Write(unsigned char NVM_addr, unsigned char NVM_data)NVMһַָдֵ + + NVM_addrָʧ洢ԪַЧֵ03031ԪУ30ԪDS1302Init()ڼDS1302Ƿ磬ûʹ) + NVM_dataдNVMԪֵ1Byte + ֵʱenumDS1302_OK + ʱenumDS1302_error + +ṹstruct_DS1302_RTC壺μDS1302Zֲᣩ +typedef struct + { unsigned char second; //루BCD룬¾ΪBCD룩 + unsigned char minute; // + unsigned char hour; //ʱ + unsigned char day; // + unsigned char month; // + unsigned char week; // + unsigned char year; // + } struct_DS1302_RTC; + +DS1302ڲʧԴ洢˵ + DS1302ṩķʧԴ洢Ϊ͹RAMṹŦ۵رֵ洢ݲ䡣 + M24C01С31ֽڣޡд⣬дں̣ܶɺԣд֮ȴ + дDS1302ڲNVMÿһֽھҪһʱ䣨ʮuS + Ҫʱʹ϶ддҪضֽݣӦЧظ + +дɣ绰18008400450 202185ƣ2021815ոĽ +*/ + +#ifndef _DS1302_H_ +#define _DS1302_H_ + +typedef struct + { unsigned char second; //루BCD룬¾ΪBCD룩 + unsigned char minute; // + unsigned char hour; //ʱ + unsigned char day; // + unsigned char month; // + unsigned char week; // + unsigned char year; // + } struct_DS1302_RTC; + +extern void DS1302Init(struct_DS1302_RTC time); //DS1302ʼ +extern struct_DS1302_RTC RTC_Read(void); //RTCRTCʱݣ +extern void RTC_Write(struct_DS1302_RTC time); //дRTCУRTCʱӣ +extern unsigned char NVM_Read(unsigned char NVM_addr); //NVMDS1302еķʧ洢Ԫݣ +extern unsigned char NVM_Write(unsigned char NVM_addr, unsigned char NVM_data); //дNVMдDS1302еķʧ洢Ԫ + +enum DS1302name {enumDS1302_OK,enumDS1302_error}; + +#endif \ No newline at end of file diff --git a/inc/EXT.h b/inc/EXT.h new file mode 100644 index 0000000..65b8b87 --- /dev/null +++ b/inc/EXT.h @@ -0,0 +1,64 @@ +/********************************** EXT V1.0 ˵ *********************************************** + +EXTģڿơSTC-Bѧϰ塱չӿEXTز +EXTģӦҪӦģ򲿼󣬿ʵֶӦܡṩӦAPI +EXTģṩ1ɸӦòAPI +EXTģAPIͬʱЧģǸݳʼֱͬЧ + + (1) void EXTInit(char EXTfunction)EXTʼ + EXTfunctionEXTӿڹ + EXTfunction ȡֵenumEXTWeightأHX710HX711ɵĵӳӣ + enumEXTPWM ƣڿֱתٶȣȵȣ + enumEXTDecodeʽ + enumEXTUltraSonic ࣩ + ֵ + ע⣺EXTչӿڴ2ʱTTL UartڴͨšģӵȣʹUart2Init()ʼEXT󣬲ҪʹEXTInit()ܳͻ + + (2)API + (a) ӳӡEXTInit(char EXTfunction)ʹenumEXTWeightʱGetWeightЧ + int GetWeight(void) //ȡӳADCݣ16bitδ㡢δ궨μHX710HX711ֲᣨ16bit + + (b) PWMEXTInit(char EXTfunction)ʹenumEXTPWMʱSetPWMЧ + void SetPWM(unsigned char PWM1, unsigned char freq1, unsigned char PWM2, unsigned char freq2); + //EXTPWMPWMΪռձȣߵƽʱı0100,λ%freqxΪƵʣ1255Hz + //ʵƵ = 1000/int(1000/freqx)1000/i=456...10002502001671431251111009183...1 + //ڿֱתת٣Hʽ·ȣ + + (c) תʽEXTInit(char EXTfunction)ʹenumEXTDecodeʱGetDecodeЧ + int GetDecode(void); //ȡֵϴζȡ + + (d) ࡣEXTInit(char EXTfunction)ʹenumEXTUltraSonicʱGetUltraSonicЧ + int GetUltraSonic(void); //ȡֵÿ5βֵλcm + + (e) RFIDݻ + (g) ڣ2 + (h) ݲɼӳߡ£ADC +ע + + +дɣ绰18008400450 2021824 +*/ + +#ifndef _EXT_H_ +#define _EXT_H_ + +extern void EXTInit(char EXTfunction); //չӿڳʼ +enum EXTname {enumEXTWeight //ӳ + ,enumEXTPWM, //PWMֱת򡢿 + ,enumEXTDecode //ʽת + ,enumEXTUltraSonic // + //2uart2ģ + //ݲɼӳߡǹȣADC + }; +extern int GetWeight(void); //ȡӳADCݣHX710HX71116bitδ㡢δ궨 +extern int GetDecode(void); //ȡֵϴζȡ +extern int GetUltraSonic(void); //ȡֵÿ5βֵλcm +extern void SetPWM(unsigned char PWM1, unsigned char freq1, unsigned char PWM2, unsigned char freq2); + //EXTPWMPWMΪռձȣߵƽʱı0100,λ%freqxΪƵʣ1255Hz + //ʵƵ = 1000/int(1000/freqx)1000/i=456...10002502001671431251111009183...1 + //ڿֱתת٣Hʽ·ȣ + + + + +#endif \ No newline at end of file diff --git a/inc/FM_Radio.h b/inc/FM_Radio.h new file mode 100644 index 0000000..3b15155 --- /dev/null +++ b/inc/FM_Radio.h @@ -0,0 +1,49 @@ +/********************************** FMRadio V1.1 ˵ ************************************************************************ +FMRadioģڿơSTC-Bѧϰ塱FM +FMRadioģģ鹲ṩ1ʼ2Ӧú + + (1) void FMRadioInit(struct_FMRadio FMRadio); //ģʼúִֻһΡʼ¸Ӧúȷʹá + FMRadio (ṹstruct_FMRadio) + ֵ + + (2) void SetFMRadio(struct_FMRadio FMRadio); //FMƲ + FMRadio (ṹstruct_FMRadio) + ֵ + + 3 struct_FMRadio GetFMRadio(void); //ȡǰFM + + ֵFMģ(ṹstruct_FMRadio) + +ṹstruct_FMRadio壺 + typedef struct //FMģ + { unsigned int frequency; // FMƵ (frequencyΧ8871080λ0.1MHz88788.7MHz뵱ǰֵޱ仯 + unsigned char volume; // FM (volumeΧ0150ΪС뵱ǰֵޱ仯 + unsigned char GP1; // FMָʾ1 =0 ͣGP1 !=0 ߣGP1 + unsigned char GP2; // FMָʾ2 =0 ͣGP1 !=0 ߣGP1 + unsigned char GP3; // FMָʾ3 =0 ͣGP1 !=0 ߣGP1 + } struct_FMRadio; + +ע + 1汾δгԶ̨źŵȿƺ״̬ϢˣݲԶ̨ܡ + 2FMUSBתģ飨CH340ʱӣӲԭ򣩣ҪUSBӿڣ硢ͨţUSB豸CH340ʱӲ + STC-BѧϰUSBӿҪӵһUSB豸USBʱUSB籦ʱUSBӿڣFMܲ + +дɣ绰18008400450 2021810ƣ2021816ոĽ +*/ + +#ifndef _FM_Radio_H_ +#define _FM_Radio_H_ + +typedef struct //FMģ + { unsigned int frequency; // FMƵ (frequencyΧ8871080λ0.1MHz88788.7MHz뵱ǰֵޱ仯 + unsigned char volume; // FM (volumeΧ0150ΪС뵱ǰֵޱ仯 + unsigned char GP1; // FMָʾ1 =0 ͣGP1 !=0 ߣGP1 + unsigned char GP2; // FMָʾ2 =0 ͣGP1 !=0 ߣGP1 + unsigned char GP3; // FMָʾ3 =0 ͣGP1 !=0 ߣGP1 + } struct_FMRadio; + +extern void FMRadioInit(struct_FMRadio FMRadio); //ģʼFMģݣ޷ֵʼ¸Ӧúȷʹ +extern void SetFMRadio(struct_FMRadio FMRadio); //FMƲFMģݣ޷ֵ +extern struct_FMRadio GetFMRadio(void); //ȡǰFMFMģ + +#endif \ No newline at end of file diff --git a/inc/IR.h b/inc/IR.h new file mode 100644 index 0000000..a5b7a36 --- /dev/null +++ b/inc/IR.h @@ -0,0 +1,85 @@ +/********************************** IR V3.5a 说明 *********************************************** + +IR模块用于控制“STC-B学习板”上红外发送与接收控制,支持PWM、PPM红外编码协议的发送,PWM红外编码的接收,可用于制作红外遥控器、红外通信等。 +IR模块提供1个驱动函数、5个API应用函数、1个红外接收事件(enumEventIrRxd:红外Ir上收到一个数据包)。 +IR模块已不与串口通信(uart和uart2)冲突,可用与它们同时工作。(以前冲突) + + (1) void IrInit(unsigned char Protocol):IR模块初始化函数。 + 函数参数:unsigned char Protocol,定义红外协议。 + Protocol 暂仅提供取值:NEC_R05d(定义红外协议基本时间片时长 = 13.1*Protocol uS) + 函数返回值:无 + + (2) char IrTxdSet(unsigned char *pt,unsigned char num):以自由编码方式控制IR发送:可用于编写任意编码协议的红外发送,如各种电器红外遥控器等 + 函数参数:unsigned char *pt,指向待发送红外编码数据的首地址。编码规则如下: + 码1红外发送时长,码1红外发送停止时长 //单位:协议基本时间片的个数值,最大255。如当协议基本时间片为0.56mS时, + ,码2红外发送时长,码2红外发送停止时长 //如当协议基本时间片为0.56mS时,数值1代表0.56mS时长,3代表1.68mS时长,...... + ...... + ...... + ,码n红外发送时长,码n红外发送停止时长 + unsigned char num,待发送红外编码数据的大小(字节数) + 函数返回值:enumIrTxOK:调用成功,即所设定的发送数据包请求已被系统sys正确接受,sys将尽硬件资源最大可能及时发送数据。 + enumIrTxFailure:调用失败(主要原因是:红外发送正忙(上一数据包未发完)、或红外正在接收一个数据包进行中 + (同IrPrint()函数返回值) + 补充说明:参照该格式定义和电器遥控器编码格式,可实现任何38KHz红外遥控器功能。 + + (3) char IrPrint(void *pt, unsigned char num)://以NEC的PWM编码方式发送数据,可用于符合该函数发送格式的部分电器遥控器;与GetIrRxNum()、SetIrRxd()配合,可进行红外双机通信;等 + //红外发送数据格式为:引导码:发(16*基本时间片),停(8*基本时间片)。0.56mS时:发9mS、停4.5mS + 数据编码:"0" -- 发(1*基本时间片),停(1*基本时间片) + "1" -- 发(1*基本时间片),停(3*基本时间片) + 先发高位、后发低位 + 结束码:发(1*基本时间片),停(1*基本时间片) + //非阻塞函数,该函数从被调用到返回大约1uS左右时间,但所指定的数据经红外发送完毕则需要较长时间(每字节大约需要10mS量级时间)。 + //IrPrint()函数用法完全类似与uart模块的Uart1Print()和Uart2Print()用法,(仅num参数为unsigned char,可参照使用) + 函数参数:void *pt :指定发送数据包位置(数据包不含引导码、结束码信息,仅待发送的有效数据) + unsigned char num:发送数据包大小(字节数,不含引导码、结束码) + 函数返回值:enumIrTxOK:调用成功,即所设定的发送数据包请求已被系统sys正确接受,sys将尽硬件资源最大可能及时发送数据。 + enumIrTxFailure:调用失败(主要原因是:红外发送正忙(上一数据包未发完)、或红外正在接收一个数据包进行中 + (同IrTxdSet()函数返回值) + + (4) void SetIrRxd(void *RxdPt,unsigned char RxdNmax):设置红外接收数据包存放位置、每个数据包最大字节数。 + 收到一个数据包(至少1字节数据)时将产生numEventIrRxd事件。与它机IrPrint()函数配合,可实现红外数据通信 + 函数参数: void char *RxdPt:指定接收数据包存放区(首地址) + unsigned char RxdNmax:指定每个数据包接收最大字节数。当收到的数据大于Nmax后,将被丢弃。 + 函数返回值:无 + + (5) unsigned char GetIrRxNum(void):获取收到的红外接收数据包实际字节数。与SetIrRxd()配合,可实现红外数据包接收。(它机应使用IrPrint()函数发送数据包) + 返回取值 <= Ir接收缓冲区最大字节数(RxdNmax定义)。如果实际红外数据包字节数大于RxdNmax,收到的多余字节数将不被存储(也不进行计数) + 函数参数: 无 + 函数返回值:红外接收数据包大小(字节数)。 + 当收到一个数据包的numEventIrRxd事件产生后,可用该函数获取红外接收数据包的大小(字节数)。其它时间访问,其值不确定 + + (6) char GetIrStatus(void): 获取Ir状态 + 函数返回值:enumIrFree:红外空闲 + enumIrBusy:红外正忙(正在发送数据包,或正在接收数据包) + + (7) 红外接收事件enumEventIrRxd:红外Ir上收到一个符合格式的数据包(红外格式见IrPrint()函数说明)。 + 如果接收数据包实际字节数大于Ir接收缓冲区最大字节数(RxdNmax定义),也在收到数据包结束符后产生enumEventIrRxd事件 + +补充说明: + (1) 串口1、串口2波特率可独立设置,互不影响. + (2) 串口1、串口2、红外通信可同时工作,互不影响 + (3) 串口1、串口2用法基本上完全一致,红外通信用法也基本相同。不同地方是: + a,串口1固定在USB接口上,可用于与计算机通信;而串口2可初始化在EXT扩展、或485接口上(在485接口上时仅单工工作); + b,红外通信速率固定不可变(大约相当于500~800 bps),通信时没有包头匹配功能。红外模块除通信功能外,还提供用于电器红外遥控的应用函数; + c,红外通信模块仅为单工工作。不发送时自动进入接收状态;有数据发送时自动进入发送状态,但正在接收数据包过程中不会进入发送状态。 + +编写:徐成(电话18008400450) 2021年8月24日设计,2021年11月5日更新 +*/ + +#ifndef _IR_H_ +#define _IR_H_ + +extern void IrInit(unsigned char Protocol); //IR模块初始化。参数:定义红外IR基本周期 +enum IrProtocalName {NEC_R05d=43}; //定义红外IR协议基本周期 = 43*1000/76 = 566 (uS) + +extern char IrTxdSet(unsigned char *pt,unsigned char num); //以自由编码方式控制IR发送:可用于编写任意编码协议的红外发送,如各种电器红外遥控器等 +extern char IrPrint(void *pt, unsigned char num); //以NEC的PWM编码方式发送数据,可用于符合该函数发送格式的部分电器遥控器;与SetIrRxd()配合,可进行红外双机通信;等 +extern void SetIrRxd(void *RxdPt,unsigned char RxdNmax); //设置红外接收数据包存放位置、每个数据包最大字节数。收到一个数据包(至少1字节数据)时将产生numEventIrRxd事件。与它机IrPrint()函数配合,可实现红外数据通信 +extern unsigned char GetIrRxNum(void); //当收到一个数据包的numEventIrRxd事件产生后,可用该函数获取红外接收数据包的大小(字节数)。其它时间访问,其值不确定 +extern char GetIrStatus(void); //获取Ir状态,enumIrFree:红外接口空闲, enumIrBusy,红外接口正忙 + +enum IrActName {enumIrFree=0 //红外发送空闲 + ,enumIrBusy // 忙 + ,enumIrTxOK // 发送成功 + ,enumIrTxFailure}; // 发送失败(正忙) +#endif \ No newline at end of file diff --git a/inc/Key.h b/inc/Key.h new file mode 100644 index 0000000..4902f4a --- /dev/null +++ b/inc/Key.h @@ -0,0 +1,34 @@ +/**********************************key V2.0 说明 ************************************************************************ +Key模块用于获取“STC-B学习板”上三个按键的状态。提供按键模块加载和一个应用函数,一个“按键事件:enumEventKey: + (1) KeyInit():按键模块加载函数; + (2) char GetKeyAct(char Key):获取按键状态。 + 函数参数:Key,指定要获取状态的按键。Key取值: + enumKey1 + enumKey2 + enumKey3 +(当参数取值超出有效范围,函数将返回fail) + 函数返回值: + enumKeyNull(无按键动作) + enumKeyPress(按下) + enumKeyRelease(抬起) + enumKeyFail(失败) + 返回值是经过多次检测按键实时状态和统计检测结果后(软件消抖)的有效事件。 + 每个按键查询一次后,事件值变成enumKeyNull。事件值仅查询一次有效。 + (3) 按键事件:enumEventKey + 当三个按键(enumKey1,enumKey2,enumKey3)中任意一个按键有”按下“或”抬起“动作时,将产生一个”按键事件“,响应按键事件的用户处理函数由用户编写,并有sys中提供的SetEventCallBack函数设置. + +补充说明:如果启用了ADC模块,按键3(Key3)任何操作在本模块不可检测到和有任何信息反应,这时按键3(Key3)任何操作将在ADC模块中检测和反应。使用方法相同,具体见ADC模块说明。 + +编写:徐成(电话18008400450) 2021年3月5日设计,2021年8月26日更新 +*/ + +#ifndef _key_H_ +#define _key_H_ + +extern void KeyInit(); +extern unsigned char GetKeyAct(char Key) ; //获取按键enumKey1,enumKey2,enumKey3事件 + //返回值:enumKeyNull——无,enumKeyPress——下降沿,enumKeyRelease——上升沿,enumKeyFail——错误 +enum KeyName {enumKey1,enumKey2,enumKey3}; //按键名 +enum KeyActName {enumKeyNull,enumKeyPress,enumKeyRelease,enumKeyFail}; //按键动作名 + +#endif \ No newline at end of file diff --git a/inc/M24C02.h b/inc/M24C02.h new file mode 100644 index 0000000..fc135cd --- /dev/null +++ b/inc/M24C02.h @@ -0,0 +1,32 @@ +/**********************************M24C02 V1.0 ˵ ************************************************************************ +M24C02ģڿơSTC-Bѧϰ塱IICӿڵķʧ洢(NVM)M24C02оƬ +M24C02ṩ2K bits256 Bytesʧ洢(NVM)(ʧ洢ԪַΪ000xff +M24C0402ģ鹲ṩ2Ӧú(ģ鲻Ҫʼ + + (1) unsigned char M24C02_Read(unsigned char NVM_addr): ȡM24C02һַָ + + NVM_addrָʧ洢ԪַЧֵ000xff256Ԫ + ֵM24C02жӦԪĴ洢ֵ1Byte + + (2) void M24C02_Write(unsigned char NVM_addr, unsigned char NVM_data)M24C02һַָдֵ + + NVM_addrָʧ洢ԪַЧֵ000xff256Ԫ + NVM_dataдM24C02Ԫֵ1Byte + +˵ + M24C02ΪʧԴ洢Ҫصǣ洢ڶϵܼ棬һڱϵ豣Ĺϵͳ + дM24C02ڲÿһֽھҪһʱ䣨ÿζдԼʮuSдΪ510mSСдƣÿһԪԼдΪ10 + DS1302ڲNVMM24C02ṩ256ֽڣM24CXXϵṩ64KֽڣСдƣһΪʮΡддڳ510mS + ˣд֮510mSϣ + Ҫʱʹ϶ддҪضֽݣӦЧظ + +дɣ绰18008400450 202188 +*/ + +#ifndef _M24C02_H_ +#define _M24C02_H_ + +extern unsigned char M24C02_Read(unsigned char NVM_addr); //NVMM24C02еķʧ洢Ԫݣ +extern void M24C02_Write(unsigned char NVM_addr, unsigned char NVM_data); //дNVMдM24C02еķʧ洢Ԫ + +#endif \ No newline at end of file diff --git a/inc/STC15F2K60S2.H b/inc/STC15F2K60S2.H new file mode 100644 index 0000000..96d807b --- /dev/null +++ b/inc/STC15F2K60S2.H @@ -0,0 +1,237 @@ +#ifndef __STC15F2K60S2_H_ +#define __STC15F2K60S2_H_ + +///////////////////////////////////////////////// + +//ͷļ,ٰ"REG51.H" + +//ں⹦ܼĴ // λֵ +sfr ACC = 0xE0; //0000,0000 ۼAccumulator +sfr B = 0xF0; //0000,0000 BĴ +sfr PSW = 0xD0; //0000,0000 ״̬ +sbit CY = PSW^7; +sbit AC = PSW^6; +sbit F0 = PSW^5; +sbit RS1 = PSW^4; +sbit RS0 = PSW^3; +sbit OV = PSW^2; +sbit P = PSW^0; +sfr SP = 0x81; //0000,0111 ջָ +sfr DPL = 0x82; //0000,0000 ָֽ +sfr DPH = 0x83; //0000,0000 ָֽ + +//I/O ⹦ܼĴ +sfr P0 = 0x80; //1111,1111 ˿0 +sbit P00 = P0^0; +sbit P01 = P0^1; +sbit P02 = P0^2; +sbit P03 = P0^3; +sbit P04 = P0^4; +sbit P05 = P0^5; +sbit P06 = P0^6; +sbit P07 = P0^7; +sfr P1 = 0x90; //1111,1111 ˿1 +sbit P10 = P1^0; +sbit P11 = P1^1; +sbit P12 = P1^2; +sbit P13 = P1^3; +sbit P14 = P1^4; +sbit P15 = P1^5; +sbit P16 = P1^6; +sbit P17 = P1^7; +sfr P2 = 0xA0; //1111,1111 ˿2 +sbit P20 = P2^0; +sbit P21 = P2^1; +sbit P22 = P2^2; +sbit P23 = P2^3; +sbit P24 = P2^4; +sbit P25 = P2^5; +sbit P26 = P2^6; +sbit P27 = P2^7; +sfr P3 = 0xB0; //1111,1111 ˿3 +sbit P30 = P3^0; +sbit P31 = P3^1; +sbit P32 = P3^2; +sbit P33 = P3^3; +sbit P34 = P3^4; +sbit P35 = P3^5; +sbit P36 = P3^6; +sbit P37 = P3^7; +sfr P4 = 0xC0; //1111,1111 ˿4 +sbit P40 = P4^0; +sbit P41 = P4^1; +sbit P42 = P4^2; +sbit P43 = P4^3; +sbit P44 = P4^4; +sbit P45 = P4^5; +sbit P46 = P4^6; +sbit P47 = P4^7; +sfr P5 = 0xC8; //xxxx,1111 ˿5 +sbit P50 = P5^0; +sbit P51 = P5^1; +sbit P52 = P5^2; +sbit P53 = P5^3; +sbit P54 = P5^4; +sbit P55 = P5^5; +sbit P56 = P5^6; +sbit P57 = P5^7; +sfr P6 = 0xE8; //0000,0000 ˿6 +sbit P60 = P6^0; +sbit P61 = P6^1; +sbit P62 = P6^2; +sbit P63 = P6^3; +sbit P64 = P6^4; +sbit P65 = P6^5; +sbit P66 = P6^6; +sbit P67 = P6^7; +sfr P7 = 0xF8; //0000,0000 ˿7 +sbit P70 = P7^0; +sbit P71 = P7^1; +sbit P72 = P7^2; +sbit P73 = P7^3; +sbit P74 = P7^4; +sbit P75 = P7^5; +sbit P76 = P7^6; +sbit P77 = P7^7; +sfr P0M0 = 0x94; //0000,0000 ˿0ģʽĴ0 +sfr P0M1 = 0x93; //0000,0000 ˿0ģʽĴ1 +sfr P1M0 = 0x92; //0000,0000 ˿1ģʽĴ0 +sfr P1M1 = 0x91; //0000,0000 ˿1ģʽĴ1 +sfr P2M0 = 0x96; //0000,0000 ˿2ģʽĴ0 +sfr P2M1 = 0x95; //0000,0000 ˿2ģʽĴ1 +sfr P3M0 = 0xB2; //0000,0000 ˿3ģʽĴ0 +sfr P3M1 = 0xB1; //0000,0000 ˿3ģʽĴ1 +sfr P4M0 = 0xB4; //0000,0000 ˿4ģʽĴ0 +sfr P4M1 = 0xB3; //0000,0000 ˿4ģʽĴ1 +sfr P5M0 = 0xCA; //0000,0000 ˿5ģʽĴ0 +sfr P5M1 = 0xC9; //0000,0000 ˿5ģʽĴ1 +sfr P6M0 = 0xCC; //0000,0000 ˿6ģʽĴ0 +sfr P6M1 = 0xCB; //0000,0000 ˿6ģʽĴ1 +sfr P7M0 = 0xE2; //0000,0000 ˿7ģʽĴ0 +sfr P7M1 = 0xE1; //0000,0000 ˿7ģʽĴ1 + +//ϵͳ⹦ܼĴ +sfr PCON = 0x87; //0001,0000 ԴƼĴ +sfr AUXR = 0x8E; //0000,0000 Ĵ +sfr AUXR1 = 0xA2; //0000,0000 Ĵ1 +sfr P_SW1 = 0xA2; //0000,0000 ˿лĴ1 +sfr CLK_DIV = 0x97; //0000,0000 ʱӷƵƼĴ +sfr BUS_SPEED = 0xA1; //xx10,x011 ٶȿƼĴ +sfr P1ASF = 0x9D; //0000,0000 ˿1ģ⹦üĴ +sfr P_SW2 = 0xBA; //xxxx,x000 ˿лĴ + +//ж⹦ܼĴ +sfr IE = 0xA8; //0000,0000 жϿƼĴ +sbit EA = IE^7; +sbit ELVD = IE^6; +sbit EADC = IE^5; +sbit ES = IE^4; +sbit ET1 = IE^3; +sbit EX1 = IE^2; +sbit ET0 = IE^1; +sbit EX0 = IE^0; +sfr IP = 0xB8; //0000,0000 жȼĴ +sbit PPCA = IP^7; +sbit PLVD = IP^6; +sbit PADC = IP^5; +sbit PS = IP^4; +sbit PT1 = IP^3; +sbit PX1 = IP^2; +sbit PT0 = IP^1; +sbit PX0 = IP^0; +sfr IE2 = 0xAF; //0000,0000 жϿƼĴ2 +sfr IP2 = 0xB5; //xxxx,xx00 жȼĴ2 +sfr INT_CLKO = 0x8F; //0000,0000 ⲿжʱƼĴ + +//ʱ⹦ܼĴ +sfr TCON = 0x88; //0000,0000 T0/T1ƼĴ +sbit TF1 = TCON^7; +sbit TR1 = TCON^6; +sbit TF0 = TCON^5; +sbit TR0 = TCON^4; +sbit IE1 = TCON^3; +sbit IT1 = TCON^2; +sbit IE0 = TCON^1; +sbit IT0 = TCON^0; +sfr TMOD = 0x89; //0000,0000 T0/T1ģʽĴ +sfr TL0 = 0x8A; //0000,0000 T0ֽ +sfr TL1 = 0x8B; //0000,0000 T1ֽ +sfr TH0 = 0x8C; //0000,0000 T0ֽ +sfr TH1 = 0x8D; //0000,0000 T1ֽ +sfr T4T3M = 0xD1; //0000,0000 T3/T4ģʽĴ +sfr T3T4M = 0xD1; //0000,0000 T3/T4ģʽĴ +sfr T4H = 0xD2; //0000,0000 T4ֽ +sfr T4L = 0xD3; //0000,0000 T4ֽ +sfr T3H = 0xD4; //0000,0000 T3ֽ +sfr T3L = 0xD5; //0000,0000 T3ֽ +sfr T2H = 0xD6; //0000,0000 T2ֽ +sfr T2L = 0xD7; //0000,0000 T2ֽ +sfr WKTCL = 0xAA; //0000,0000 绽Ѷʱֽ +sfr WKTCH = 0xAB; //0000,0000 绽Ѷʱֽ +sfr WDT_CONTR = 0xC1; //0000,0000 ŹƼĴ + +//п⹦ܼĴ +sfr SCON = 0x98; //0000,0000 1ƼĴ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; +sfr SBUF = 0x99; //xxxx,xxxx 1ݼĴ +sfr S2CON = 0x9A; //0000,0000 2ƼĴ +sfr S2BUF = 0x9B; //xxxx,xxxx 2ݼĴ +sfr S3CON = 0xAC; //0000,0000 3ƼĴ +sfr S3BUF = 0xAD; //xxxx,xxxx 3ݼĴ +sfr S4CON = 0x84; //0000,0000 4ƼĴ +sfr S4BUF = 0x85; //xxxx,xxxx 4ݼĴ +sfr SADDR = 0xA9; //0000,0000 ӻַĴ +sfr SADEN = 0xB9; //0000,0000 ӻַμĴ + +//ADC ⹦ܼĴ +sfr ADC_CONTR = 0xBC; //0000,0000 A/DתƼĴ +sfr ADC_RES = 0xBD; //0000,0000 A/Dת8λ +sfr ADC_RESL = 0xBE; //0000,0000 A/Dת2λ + +//SPI ⹦ܼĴ +sfr SPSTAT = 0xCD; //00xx,xxxx SPI״̬Ĵ +sfr SPCTL = 0xCE; //0000,0100 SPIƼĴ +sfr SPDAT = 0xCF; //0000,0000 SPIݼĴ + +//IAP/ISP ⹦ܼĴ +sfr IAP_DATA = 0xC2; //0000,0000 EEPROMݼĴ +sfr IAP_ADDRH = 0xC3; //0000,0000 EEPROMַֽ +sfr IAP_ADDRL = 0xC4; //0000,0000 EEPROMַֽ +sfr IAP_CMD = 0xC5; //xxxx,xx00 EEPROMĴ +sfr IAP_TRIG = 0xC6; //0000,0000 EEPRPMĴ +sfr IAP_CONTR = 0xC7; //0000,x000 EEPROMƼĴ + +//PCA/PWM ⹦ܼĴ +sfr CCON = 0xD8; //00xx,xx00 PCAƼĴ +sbit CF = CCON^7; +sbit CR = CCON^6; +sbit CCF2 = CCON^2; +sbit CCF1 = CCON^1; +sbit CCF0 = CCON^0; +sfr CMOD = 0xD9; //0xxx,x000 PCA ģʽĴ +sfr CL = 0xE9; //0000,0000 PCAֽ +sfr CH = 0xF9; //0000,0000 PCAֽ +sfr CCAPM0 = 0xDA; //0000,0000 PCAģ0PWMĴ +sfr CCAPM1 = 0xDB; //0000,0000 PCAģ1PWMĴ +sfr CCAPM2 = 0xDC; //0000,0000 PCAģ2PWM Ĵ +sfr CCAP0L = 0xEA; //0000,0000 PCAģ0IJ׽/ȽϼĴֽ +sfr CCAP1L = 0xEB; //0000,0000 PCAģ1IJ׽/ȽϼĴֽ +sfr CCAP2L = 0xEC; //0000,0000 PCAģ2IJ׽/ȽϼĴֽ +sfr PCA_PWM0 = 0xF2; //xxxx,xx00 PCAģ0PWMĴ +sfr PCA_PWM1 = 0xF3; //xxxx,xx00 PCAģ1PWMĴ +sfr PCA_PWM2 = 0xF4; //xxxx,xx00 PCAģ1PWMĴ +sfr CCAP0H = 0xFA; //0000,0000 PCAģ0IJ׽/ȽϼĴֽ +sfr CCAP1H = 0xFB; //0000,0000 PCAģ1IJ׽/ȽϼĴֽ +sfr CCAP2H = 0xFC; //0000,0000 PCAģ2IJ׽/ȽϼĴֽ + +///////////////////////////////////////////////// + +#endif + diff --git a/inc/StepMotor.h b/inc/StepMotor.h new file mode 100644 index 0000000..167a007 --- /dev/null +++ b/inc/StepMotor.h @@ -0,0 +1,50 @@ +/**********************************StepMotor 说明 ************************************************************************ +StepMotor用于STC-B板控制步进电机。共提供1个驱动函数、3个应用函数: + (1) StepMotorInit():步进电机模块驱动函数 + (2) SetStepMotor(char StepMotor,unsigned char speed ,int steps ) 指定步进电机、按指定转动速度、转动指定步 + 函数参数:StepMotor 指定步进电机,取值(enum StepMotorName中定义) + enumStepMotor1: SM 接口上的步进电机 + enumStepMotor2: 此时,用L0~L3四个LED模拟一个4相步进电机 + enumStepMotor3: 此时,用L4~L7四个LED模拟一个4相步进电机 + speed 步进电机转动速度(0~255),单位:步/S。 (实际每步时间=int(1000mS/speed) mS),与设置速度可能存在一定误差 + steps 步进电机转动步数(-32768~32767),负值表示反转 + 函数返回:enumSetStepMotorOK: 调用成功(enum StepMotorActName中定义) + enumSetStepMotorFail:调用失败(电机名不在指定范围,或speed=0,或调用时正在转动) + (3)EmStop(char StepMotor) 紧急停止指定步进电机转动 + 函数参数:StepMotor 指定步进电机。函数参数不对将返回0值。 + 函数返回:剩余未转完的步数 + (4)GetStepMotorStatus(char StepMotor) 获取指定步进电机状态 + 函数参数:StepMotor 指定步进电机 + 函数返回:enumStepMotorFree:自由(enum StepMotorActName中定义) + enumStepMotorBusy,忙(正在转动) + enumSetStepMotorFail:调用失败(步进电机名不在指定范围) + +编写:徐成(电话18008400450) 2021年4月16日设计,2021年4月18日更新 +*/ + +#ifndef _StepMotor_H_ +#define _StepMotor_H_ + +extern void StepMotorInit(); // 步进电机模块初始化 +extern char SetStepMotor(char StepMotor,unsigned char speed ,int steps ); // 指定步进电机、按指定转动速度、转动指定步 + // 函数参数:StepMotor 指定步进电机,取值(enum StepMotorName中定义) + // enumStepMotor1: SM 接口上的步进电机 + // enumStepMotor2: 此时,用L0~L3四个LED模拟一个4相步进电机 + // enumStepMotor3: 此时,用L4~L7四个LED模拟一个4相步进电机 + // speed 步进电机转动速度(0~255),单位:步/S (实际每步时间=int(1000mS/speed) mS),与设置速度可能存在一定误差 + // steps 步进电机转动步数(-32768~32767),负值表示反转 + // 函数返回: + // enumSetStepMotorOK:调用成功 + // enumSetStepMotorFail:调用失败(电机名不在指定范围,或speed=0,或调用时正在转动) +extern int EmStop(char StepMotor); // 紧急停止指定步进电机转动 + // 函数参数:StepMotor 指定步进电机(函数参数不对将返回0值) + // 函数返回:剩余未转完的步数 +extern unsigned char GetStepMotorStatus(char StepMotor); // 获取指定步进电机状态 + // 函数参数:StepMotor 指定步进电机 + // 函数返回:enumStepMotorFree:自由 + // enumStepMotorBusy,忙(正在转动) + // enumSetStepMotorFail:调用失败(步进电机名不在指定范围) +enum StepMotorName {enumStepMotor1=0,enumStepMotor2,enumStepMotor3}; +enum StepMotorActName {enumStepMotorFree,enumStepMotorBusy,enumSetStepMotorOK,enumSetStepMotorFail}; + +#endif \ No newline at end of file diff --git a/inc/Vib.h b/inc/Vib.h new file mode 100644 index 0000000..d05d8a7 --- /dev/null +++ b/inc/Vib.h @@ -0,0 +1,25 @@ +/**********************************振动传感器SV V2.0 说明 ************************************************************************ +SV用于获取"STC-B学习板"上Vib传感器状态.提供一个模块加载函数和一个应用函数,一个Vib事件enumEventVib: + (1) VibInit():振动传感器Vib模块初始化函数; + (2) char GetVibAct():获取Vib事件。 + 函数返回值:返回当前Vib传感器事件,返回值:enumVibNull——无,enumVibQuake——发生过振动 + 查询一次后,事件值变成 enumVibNull (仅查询一次有效) + (3) Vib传感器事件enumEventVib: + 当Vib检测到有”振动“事件时,将产生一个”振动事件“,响应事件的用户处理函数由用户编写, + 并有sys中提供的SetEventCallBack()函数设置. + +编写:徐成(电话18008400450) 2021年3月5日设计,2021年3月26日更新 +*/ + +#ifndef _Vib_H_ +#define _Vib_H_ + +extern void VibInit(); +extern unsigned char GetVibAct(void) reentrant; //获取Vib事件 +enum VibActName +{ + enumVibNull, + enumVibQuake +}; //返回值:enuVibNull——无,enuVibQuake——发生过振动 + +#endif \ No newline at end of file diff --git a/inc/adc.h b/inc/adc.h new file mode 100644 index 0000000..9afdb92 --- /dev/null +++ b/inc/adc.h @@ -0,0 +1,79 @@ +/**********************************ADC V3.5a 说明 ************************************************************************ +ADC模块用于“STC-B学习板”上与ADC相关电路:温度Rt、光照Rop、导航按键Nav、扩展接口EXT上的ADC转换。提供ADC模块初始化函数、2个应用函数,2个事件: + (1) AdcInit(char ADCsel):ADC模块初始化函数; + 函数参数: ADCsel选择扩展接口EXT是否用作ADC功能,取值: + ADCincEXT : 含对扩展接口EXT设置ADC功能(EXT上P1.0、P1.1不可作数字IO功能使用) + ADCexpEXT : 不含对扩展接口EXT设置ADC功能(EXT上P1.0、P1.1可作数字IO功能使用) + (2) struct_ADC GetADC():获取ADC值。 + 函数参数:无 + 函数返回值:返回数据结构 struct_ADC。 + 数据结构定义: + typedef struct //ADC转换结果 + { unsigned int EXT_P10; // 扩展接口EXT上P1.0脚ADC(10bit) + unsigned int EXT_P11; // 扩展接口EXT上P1.1脚ADC(10bit) + unsigned int Rt; // 热敏电阻上ADC(10bit) + unsigned int Rop; // 光敏电阻上ADC(10bit) + unsigned int Nav; // 导航按键上ADC(10bit) + } struct_ADC; + +说明1:每个数字表示 VCC/1024(单位:V),其中VCC为电路板供电电压(USB接口一般为5V左右) +说明2:对于导航按键,下面GetAdcNavAct函数输出消抖后导航按键事件和状态,更方便使用; + + (3) char GetAdcNavAct(char Nav_button):获取导航按键(包含K3)状态 + 函数参数:Nav_button:指定要获取状态的导航按键。取值: + enumAdcNavKey3(K3键), + enumAdcNavKeyRight(右按), + enumAdcNavKeyDown(下按), + enumAdcNavKeyCenter(中心按) + enumAdcNavKeyLeft(左按), + enumAdcNavKeyUp(上按). +(当参数取值不在有效范围,函数将返回enumKeyFail) + 函数返回值:返回当前按键事件,返回值:(同Key模块GetAdcKeyAct()返回值) + enumKeyNull(无按键动作), + enumKeyPress(按下), + enumKeyRelease(抬起), + enumKeyFail(失败) + 返回值是经过多次检测按键实时状态和统计检测结果后(软件消抖)的有效事件。 + 每个按键查询一次后,事件值变成 enumKeyNull (仅查询一次有效) + (4) 导航按键事件“:enumEventNav + 当导航按键5个方向或按键K3有任意”按下“或”抬起“动作时,将产生一个”导航按键事件“enumEventNav。响应导航按键事件的用户回调函数由用户编写,并由sys提供的SetEventCallBack()函数设置响应函数. + (5) 扩展接口EXT上P1.0、P1.1两个端口有新的AD值事件“:enumEventXADC + 当ADC模块对P1.0、P1.1进行ADC转换,获得了它们新的ADC结果时,将产生enumEventXADC事件,通知用户进行处理。响应enumEventXADC事件的用户回调函数由用户编写,并有sys提供的SetEventCallBack()函数设置响应函数. + ADC模块对P1.0、P1.1进行ADC转换速度为3mS,也即每3mS或每秒钟333次转换. + (6) 补充说明: + a:对EXT上P1.0、P1.0的转换速度为3mS,也即每秒钟提供333次转换结果,提供了有新转换结果事件:enumEventXADC,方便用户处理 +b:对于Rt、Rop,转换速度为9mS,也即每秒钟提供111次转换结果。没有提供相应“事件”,用户随时用函数GetAdcResult()查询和使用 + c:对导航按键进行了软件消抖处理,最快可支持导航按键每秒12次操作速度,提供了导航按键发生了操作事件:enumEventNav + d:由于导航按键与K3键共用了单片机同一个端口(P1.7),启用ADC模块后,P1.7口IO功能失效,只能用GetAdcNavAct(char Nav_button)函数获取K3按键的事件或状态。 + e: STC-B板上Rt型号为:10K/3950 NTC热敏电阻,光敏电阻Rop型号为:GL5516. 它们的ADC值与温度、光照强度关系请参阅它们的数据手册与STC-B电路图进行换算。 + + +编写:徐成(电话18008400450) 2021年3月25日设计,2021年8月30日修改 +*/ + +#ifndef _adc_H_ +#define _adc_H_ + +#define ADCincEXT 0x9B +#define ADCexpEXT 0x98 + +typedef struct //ADC转换结果 + { unsigned int EXT_P10; // 扩展接口EXT上P1.0脚ADC + unsigned int EXT_P11; // 扩展接口EXT上P1.1脚ADC + unsigned int Rt; // 热敏电阻上ADC + unsigned int Rop; // 光敏电阻上ADC + unsigned int Nav; // 导航按键上ADC + } struct_ADC; + +extern void AdcInit(char ADCsel); + +extern struct_ADC GetADC(); +extern unsigned char GetAdcNavAct(char Nav_button); //获取导航按键5个方向(右、下、中心、左、上)操作,以及按键K3操作的事件 + //返回值:enuKeyNull(无按键动作),enuKeyPress(按下),enuKeyRelease(抬起),enuKeyFail(失败) +enum KN_name {enumAdcNavKey3=0, //导航按键:按键K3 + enumAdcNavKeyRight, //导航按键:右 + enumAdcNavKeyDown, //导航按键:下 + enumAdcNavKeyCenter, //导航按键:中心 + enumAdcNavKeyLeft, //导航按键:左 + enumAdcNavKeyUp}; //导航按键:上 +#endif \ No newline at end of file diff --git a/inc/displayer.h b/inc/displayer.h new file mode 100644 index 0000000..7888dcc --- /dev/null +++ b/inc/displayer.h @@ -0,0 +1,26 @@ +/**********************************display V2.0 说明 ************************************************************************ +displayer用于控制“STC-B学习板”上8个7段数码管(Seg7)和8个指示灯(Led)工作.提供显示模块加载和三个应用函数: + + (1) displayerInit():显示模块加载函数; + + (2) SetDisplayerArea(char Begin_of_scan,char Ending_of_Scan):设置LED启用区域。8个数码管从左至右编号分别为0——7,函数参数 + Begin_of_scan设定启用数码管起始编号,Ending_of_Scan为结束编号。设定范围内的数码管才工作和显示。 + 注:正常情况下,两个参数取值范围为0——7,且Ending_of_Scan>Begin_of_scan。但利用动态扫描和人眼视觉效果,可设置超出 + 该范围的参数,以实现特殊显示效果:如软件调整显示亮度,或非灯亮度显示,等; + + (3) Seg7Print(char d0,char d1,char d2,char d3,char d4,char d5,char d6,char d7):将8个参数值分别译码显示到对应的数码管上。 + 显示译码表(code char decode_table[])在main.c中,用户可以修改和增减. + + (4) LedPrint(char led_val):控制8个指示灯开关。参数light_val的8个bit位对应8个指示灯的开关,“1”——指示灯“亮” + +编写:徐成(电话18008400450) 2021年2月26日设计,2021年3月15日更新 +*/ + +#ifndef _displayer_H_ +#define _displayer_H_ +extern void DisplayerInit(); //加载显示模块工作 +extern void SetDisplayerArea(char Begin_of_scan,char Ending_of_Scan); //设置有效显示区域 +extern void Seg7Print(char d0,char d1,char d2,char d3,char d4,char d5,char d6,char d7); //在数码管上输出 +extern void LedPrint(char led_val); +#endif + diff --git a/inc/hall.h b/inc/hall.h new file mode 100644 index 0000000..3e09c25 --- /dev/null +++ b/inc/hall.h @@ -0,0 +1,24 @@ +/**********************************hall V2.0 说明 ************************************************************************ +Hall模块用于获取“STC-B学习板”上hall传感器状态。hall模块共提供1个加载函数、1个应用函数,一个Hall事件:enumEventHall + (1)HallInit():hall模块初始化函数 + (2)unsigned char GetHallAct(void):获取hall事件。 + 函数返回值: + enumHallNull(无变化) + enumHallGetClose(磁场接近) + enumHallGetAway(磁场离开) + 查询一次后,事件值变成enumEventHall (仅查询一次有效) + (3)hall传感器事件: + 当Hall检测到有"磁场接近"或"磁场离开"事件时,将产生一个Hall传感器事件(enumEventHall).响应事件的用户处理函数由用户编写, 并有sys中提供的SetEventCallBack()函数设置事件响应函数. + + +编写:徐成(电话18008400450) 2021年3月15日设计 2021年3月26日修改 +*/ + +#ifndef _hall_H_ +#define _hall_H_ + +extern void HallInit(void); //加载hall模块 +extern unsigned char GetHallAct(void); //获取hall事件 +enum HallActName {enumHallNull,enumHallGetClose,enumHallGetAway}; //返回值:enumHallNull——无,enumHallGetClose——下降沿(磁场接近),enumHallGetAway——上升沿(磁场离开) + +#endif \ No newline at end of file diff --git a/inc/music.h b/inc/music.h new file mode 100644 index 0000000..130a80c --- /dev/null +++ b/inc/music.h @@ -0,0 +1,104 @@ +/********************************** music V2.0 说明 ************************************************************************ +Music模块在Beep和Displayer模块基础上再次封装,用于控制“STC-B学习板”上播放音乐。加载该模块,将同时加载Beep模块、displayer模块。music模块共提供1个music驱动函数、4个应用函数: + (1)MusicPlayerInit():驱动music模块; + (2)char PlayTone(unsigned char tone, unsigned char beatsPM ,unsigned char scale, unsigned char beats):播放音乐音阶,实现用指定音调、指定节拍率、发指定音阶、发音节拍数。 +函数参数: + tone:指定音调,有效值:0xFA、0xFB、0xFC、0xFD、0xFE、0xFF、0xF9分别对应音乐A、B、C、D、E、F、G调 + beatsPM:节拍率,即每分钟节拍数,值范围10~255拍/分钟 + scale:音乐简谱音高,1字节。 +0x00——休止符 +高4位:1——低8度音 2——中8度音 3——高8度音 +低3位:1-7对应简谱音。其它值无效。 +如:0x13表示低音3(mi) + beats:音长(节拍数),单位1/16拍。 +如:16(0x10)对应1拍,32(0x20)对应2拍,8(0x08)对应半拍...... 。 +函数返回值:(见Beep.h中定义BeepActName)enum BeepActName {enumBeepFree=0,enumBeepBusy,enumSetBeepOK,enumSetBeepFail}; + (3)SetMusic(unsigned char beatsPM, unsigned char tone, unsigned char *pt, unsigned int datasize, unsigned char display):设定或改变要播放音乐和播放参数。 +函数参数: + beatsPM:节拍率,即每分钟节拍数,值范围10~255拍/分钟,如果参数值为enumModeInvalid将不改变原beatsPM; + tone:指定音调, 有效值:0xFA、0xFB、0xFC、0xFD、0xFE、0xFF、0xF9分别对应音乐A、B、C、D、E、F、G调,参数值为enumModeInvalid或其它值将不改变原tone + *pt :指向要播放的音乐编码的首地址 。*pt 和 datasize 只有有一个参数 = enumModeInvalid,将不改变 *pt 和 datasize + datasize:要播放的音乐编码的长度(字节数) 。*pt 和 datasize 只有有一个参数 = enumModeInvalid,将不改变 *pt 和 datasize + display:Seg7和Led是否用来显示播放音乐信息,取值: + enumMscNull —— 不用 + enumMscDrvSeg7 —— 用7段数码管Seg7(显示信息) + enumMscDrvLed —— 用Led指示灯(打拍) enumMscDrvSeg7andLed —— 用Seg7 和 Led + 参数值为enumModeInvalid或其它值将不改变原display +音乐编码规则: +1,常规音乐简谱发音编码(成对出现,不可分开,中间不能插入其它编码和控制字) + 基本格式:音高(1字节),节拍数(1字节),音高,节拍,...... + 其中“音高”部分: +0x11 — 0x17 :对应低音 do、re、mi、fa、so、la、si、 +0x21 — 0x27 :对应中音 do、re、mi、fa、so、la、si + 0x31 — 0x37 :对应高音 do、re、mi、fa、so、la、si + 其中“节拍数”部分: +0x01-0xFF:单位1/16拍。也即十六进制中,高4位表示整拍数,低4位表示分拍数(1/16) + 如:发音2拍: 0x20 + 发音半拍: 0x08 + 发音1拍半:0x18 + 2,音乐编码中可以插入以下控制字,用于设定音乐播放参数等(前6个也可以通过函数,用程序设定和实现): + enumMscNull : 不用 + enumMscDrvSeg7 : 用7段数码管Seg7(显示信息) + enumMscDrvLed : 用Led指示灯(打拍) + enumMscDrvSeg7andLed : 用Seg7 和 Led + enumMscSetBeatsPM : 设置节拍率, 后面再跟 节拍率(1字节) + enumMscSetTone : 设置音调, 后面再跟 音调(1字节) +0xFA 或 0xFB 或 0xFC 或 0xFD 或 0xFE 或 0xFF 或 0xF9 +分别对应音乐:A调 或B调……… + enumMscRepeatBegin : 设置音乐播放重复开始处。重复一次(暂不支持多次),暂不能嵌套(嵌套无效或可能导致不可预期结果) + enumMscRepeatEnd : 设置音乐播放重复结束处 + + (4)SetPlayerMode(unsigned char play_ctrl) :音乐播放控制函数。 + 函数参数: + play_ctrl:enumModePlay : ”播放“ + enumModePause : ”暂停“ + enumModeStop :”停止/结束“ + (其它参数无效) +所有操作在当前”音“播放完成后生效; + (5)char GetPlayerMode(void): 获取当前播放状态 + 函数返回值:(play_ctrl值) + enumModePlay : 播放状态 + enumModePause : 暂停状态 + enumModeStop : 停止/结束 +(其它功能应用型函数可根据需要设置和增加) + + +编写:徐成(电话18008400450) 2021年3月5日设计,2021年9月5日更新 +*/ + +#ifndef _music_H_ +#define _music_H_ + +extern void MusicPlayerInit(); +extern char PlayTone(unsigned char tone, unsigned char beatsPM, unsigned char scale, unsigned char beats); +// tone: 音调。F9,FA,FB,FC,FD,FE,FF分别对应G\A\B\C\D\E\F调,其它值无效 +// beatsPM:节凑,单位:每分钟节拍数 +// scale: 音高。0x00——休止符,高4位:1——低8度音 2——中8度音 3——高8度音,低3位:1-7简谱音。其它无效 +// beats: 音长(节拍数),单位1/16拍。16(0x10)对应1拍,32(0x20)对应2拍,8(0x08)对应半拍...... +extern void SetMusic(unsigned char beatsPM, unsigned char tone, unsigned char *pt, unsigned int datasize, unsigned char display); +//可设置或改变:全部、或部分播放参数(节拍率、音调、显示方式、音乐原数据) +//其中节拍率、音调、显示方式 也可以在音乐编码中设置 +extern void SetPlayerMode(unsigned char play_ctrl); +//操作播放:enumModePlay 或 enumModePause 或 enumModeStop,分别设置音乐”播放“、”暂停“、”停止/结束“,所有操作在当前”音“播放完成后生效; +extern char GetPlayerMode(void); //获取当前播放状态 + +enum PlayerMode +{ + enumModeInvalid = 0, //播放模式非法 + enumModePlay, //播放 + enumModePause, //暂停(可恢复续放) + enumModeStop +}; //停止(结束) +enum MusicKeyword +{ + enumMscNull = 0xF0, //播放音乐时,不用7段数码管、LED指示灯(显示音乐播放相关信息) + enumMscDrvSeg7, //播放音乐时, 用7段数码管 + enumMscDrvLed, //播放音乐时, 用 LED指示灯 + enumMscDrvSeg7andLed, //播放音乐时, 用7段数码管、LED指示灯 + enumMscSetBeatsPM, //音乐编码中关键字: 设置 音乐节拍 + enumMscSetTone, //音乐编码中关键字: 设置 音调 + enumMscRepeatBegin, //音乐编码中关键字: 设置 重复开始 + enumMscRepeatEnd +}; //音乐编码中关键字: 设置 重复结束 + +#endif \ No newline at end of file diff --git a/inc/sys.h b/inc/sys.h new file mode 100644 index 0000000..f00f784 --- /dev/null +++ b/inc/sys.h @@ -0,0 +1,63 @@ +/******************************* sys Ver3.6 说明 ************************************************ + (1) sys.c构成STC程序基本架构。提供: + a, 系统初始化MySTC_Init(),系统调度函数MySTC_OS(),加载用户回调函数SetEventCallBack() + b, 若干可设置和触发回调函数的事件; + enumEventSys1mS : 1mS定时到 + enumEventSys10mS : 10mS定时到 + enumEventSys100mS : 100mS定时到 + enumEventSys1S : 1S定时到 + enumEventKey : 按键事件 + enumEventNav : 导航按键事件“ + enumEventHall : hall传感器事件 + enumEventVib : 振动传感器事件 + enumEventXADC : 扩展接口上新的AD值事件 + enumEventUart1Rxd : 串口1上收到一个符合格式定义的数据包事件。串口1:USB上与PC机通信 + enumEventUart2Rxd : 串口2上收到一个符合格式定义的数据包事件。串口2:485上UART、EXT上UART、或485上ModBus协议(2022年5月2日新增) + enumEventIrRxd : 红外收到一个数据包事件 + c, 获取系统运行性能评价参数 + + (2) MySTC_Init():sys初始化函数,必须执行一次。 + (3) MySTC_OS(): sys调度函数,应在while(1)循环中。 + (4) SetEventCallBack(char event, void *(user_callback)):加载"事件"用户回调函数. + (5) SysPerF GetSysPerformance(void) :获取系统运行性能评估参数 + 函数参数:无 + 函数返回值:结构 struct SysPerF。定义如下: + typedef struct //系统性能评估参数,每秒更新一次 + { unsigned long MainLoops; //SysPerformance.MainLoops 每秒主循环次数(应大于1000以上) + unsigned char PollingMisses; //SysPerformance.PollingMisses 每秒轮询丢失次数(理想值为0。如果有非0情况,说明用户程序或算法存在问题) + } SysPerF; + + (6) 补充说明: + sys.c 基本调度时间为1mS,非抢占式,要求用户程序片段,其单次循环执行时间累加起来应小于1mS。 + +编写:徐成(电话18008400450) 2021年2月26日设计,2022年5月2日更新 +*/ + +#ifndef _sys_h_ +#define _sys_h_ + +typedef struct //系统性能评估参数,每秒更新一次 + { unsigned long MainLoops; //SysPerformance.MainLoops 每秒主循环次数(应大于1000以上) + unsigned char PollingMisses; //SysPerformance.PollingMisses 每秒轮询丢失次数(理想值为0。如果有非0情况,说明用户程序或算法存在问题) + } struct_SysPerF; + +extern void MySTC_Init(); //sys初始化函数 +extern void MySTC_OS(); //sys调度函数,应在while(1)循环中 +extern void SetEventCallBack(char event, void *(user_callback)); //加载"事件"用户回调函数. +extern struct_SysPerF GetSysPerformance(void); + +enum event{enumEventSys1mS, //系统1mS事件 + enumEventSys10mS, //系统10mS事件 + enumEventSys100mS, //系统100mS事件 + enumEventSys1S, //系统1S事件 + enumEventKey, //按键事件 + enumEventHall, //hall传感器事件 + enumEventVib, //振动传感器事件 + enumEventNav, //导航按键事件“ + enumEventXADC, //扩展接口上新的AD值事件 + enumEventUart1Rxd, //串口1上收到一个符合格式定义的事件 + enumEventUart2Rxd, //串口2上收到一个符合格式定义("数据包格式"、或"ModBus协议+数据包格式")的事件。 (2022年5月2日新增) + enumEventIrRxd //红外Ir上收到一个数据包 + }; + +#endif \ No newline at end of file diff --git a/inc/uart1.h b/inc/uart1.h new file mode 100644 index 0000000..4b81e5d --- /dev/null +++ b/inc/uart1.h @@ -0,0 +1,58 @@ +/**********************************Uart1串行通信模块 V2.0 说明 ************************************************************************ +Uart1模块提供Uart1模块初始化函数、3个应用函数,1个事件(enumEventRxd): +(1) Uart1Init(unsigned long band):Uart1模块初始化函数。 + 函数参数:unsigned long band定义串口1的通信波特率(单位:bps)(8个数据位、1个停止位,无奇偶校验位) + 函数返回值:无 + +(2) void SetUart1Rxd(char *RxdPt, unsigned int Nmax, char *matchhead, unsigned int matchheadsize); + 设置串口1接收参数:数据包存放位置、大小,包头匹配字符、匹配字符个数。收到符合条件的数据包时将产生enumEventRxd事件。 + 函数参数: char *RxdPt:指定接收数据包存放区(首地址) + unsigned int Nmax:接收数据包大小(字节数),最大65535。当收到的数据大于Nmax后,将被丢弃 (2022年5月2日更改) + char *matchhead: 需要匹配的数据包头(首地址) + unsigned int matchheadsize:需要匹配的字节数 + 补充说明: + Nmax=1:为单字节接收,即收到一个字节就产生enumUart1EventRxd事件(如果定义了匹配,还需满足匹配条件); + 0 < matchheadsize < Nmax:要求接收数据中连续matchheadsize个字节与*matchhead处数据完全匹配,才在收到Nmax数据时产生enumEventRxd事件; + matchheadsize = Nmax:设定接收数据包完全匹配 + matchheadsize=0 或 matchheadsize > Nmax:将不做匹配,接收到任意Nmax数据时产生enumEventRxd事件; + 在enumEventRxd事件发出后,用户回调函数返回才接收下一个数据包 (2022年5月2日更改) + 函数返回值:无 + + (3) char Uart1Print(void *pt, unsigned int num):发送数据包,非阻塞函数(即函数不等到所设定任务全部完成才返回),该函数从被调用到返回大约1uS左右时间。 + 函数参数: void *pt :指定发送数据包位置 + unsigned int num:发送数据包大小; + 函数返回值:enumTxOK:调用成功,即所设定的发送数据包请求已被系统sys正确接受,sys将尽硬件资源最大可能及时发送数据。 + enumTxFailure:调用失败(主要原因是:串口正忙(上一数据包未发完) + 补充说明:串口上发送1个字节数据大约需要时间0.1mS~10mS(视所设定的波特率),对计算机来说,如果发送多个字节是一个很要时间才能完成的事。类似于 + 前面用蜂鸣器演奏音乐,对这类事件与程序"异步"的问题,编程时不仅要注意程序逻辑性、还有注意程序时效性。(这个问题其实总是要注意、必须要注意的) + + (4) char GetUart1TxStatus(void): 获取Uart1发送状态 + 函数返回值:enumUart1TxFree:串口1发送空闲 + enumUart1TxBusy,串口1发送正忙 + + (5) Uart1接收事件:enumEventUart1Rxd。表示收到了一个符合指定要求(数据包头匹配、数据包大小一致)的数据包。 + 补充说明:串口(1和2)上收到的两个数据包之时间间隔要求不小于1mS(原因:系统内部调度方法限制) + +补充说明: + (1) 串口1、串口2波特率可独立设置,互不影响. + (2) 串口1、串口2、红外通信可同时工作,互不影响 + (3) 串口1、串口2用法基本上完全一致,红外通信用法也基本相同。不同地方是: + a,串口1固定在USB接口上,可用于与计算机通信;而串口2可初始化在EXT扩展、或485接口上(在485接口上时仅单工工作); + b,红外通信速率固定不可变(大约相当于500~800 bps),通信时没有包头匹配功能。红外模块除通信功能外,还提供用于电器红外遥控的应用函数; + c,红外通信模块仅为单工工作。不发送时自动进入接收状态;有数据发送时自动进入发送状态,但正在接收数据包过程中不会进入发送状态。 + + +编写:徐成(电话18008400450) 2021年3月28日设计 2021年11月8日更新 +*/ + + +#ifndef _uart1_H_ +#define _uart1_H_ + +extern void Uart1Init(unsigned long band); //串口初始化,参数:波特率 +extern void SetUart1Rxd(void *RxdPt, unsigned int Nmax, void *matchhead, unsigned int matchheadsize); //设置接收条件:数据包存放位置、大小,包头匹配字符、匹配字符个数。符合条件的包将产生enumEventRxd事件 +extern char Uart1Print(void *pt, unsigned int num); //发送数据包。非阻塞函数。数据包位置、大小。返回值enumTxOK调用成功,enumTxFailure失败(串口忙,上一数据包未发完) +extern char GetUart1TxStatus(void); //获取串口1发送状态,enumUart1TxFree:串口1发送空闲, enumUart1TxBusy,串口1发送正忙 +enum Uart1ActName {enumUart1TxFree=0,enumUart1TxBusy,enumUart1TxOK,enumUart1TxFailure}; + +#endif \ No newline at end of file diff --git a/inc/uart2.h b/inc/uart2.h new file mode 100644 index 0000000..eac183e --- /dev/null +++ b/inc/uart2.h @@ -0,0 +1,65 @@ +/********************************** Uart2串行通信模块 V2.0 说明 *************************************************************** +Uart2模块提供Uart2模块初始化函数、3个应用函数,1个事件(enumUart2EventRxd): +(1) Uart2Init(unsigned long band,unsigned char Uart2mode):Uart2模块初始化函数。 + 函数参数:unsigned long band:定义串口2的通信波特率(单位:bps)(固定8个数据位、1个停止位,无奇偶校验位) + unsigned char Uart2mode:定义串口2位置 + 取值:Uart2UsedforEXT —— 串口2在EXT扩展插座上(TTL标准串口) + Uart2Usedfor485 —— 串口2用于485通信(半双工。发送数据包时不能接收数据) + Uart2Usedfor485ModBus —— 串口2用于485上,ModBus协议收发 (2022年5月2日新增) +(2) void SetUart2Rxd(char *RxdPt, unsigned int Nmax, char *matchhead, unsigned int matchheadsize); + 设置串口2接收参数:数据包存放位置、大小,包头匹配字符、匹配字符个数。收到符合条件的数据包时将产生enumEventRxd事件。 + 函数参数: char *RxdPt:指定接收数据包存放区(首地址) + unsigned int Nmax:接收数据包大小(字节数),最大65535。当收到的数据大于Nmax后,将被丢弃 (2022年5月2日更改) + char *matchhead: 需要匹配的数据包头(首地址) + unsigned int matchheadsize:需要匹配的字节数 + 补充说明: + Nmax=1:为单字节接收,即收到一个字节就产生enumEventUart2Rxd事件(如果定义了匹配,还需满足匹配条件); + 0 < matchheadsize < Nmax:要求接收数据中连续matchheadsize个字节与*matchhead处数据完全匹配,才在收到Nmax数据时产生enumEventRxd事件; + matchheadsize = Nmax:设定接收数据包完全匹配 + matchheadsize=0 或 matchheadsize > Nmax:将不做匹配,接收到任意Nmax数据时产生enumEventRxd事件; + 在enumEventRxd事件发出后,用户回调函数返回才接收下一个数据包 (2022年5月2日更改) +(3) char Uart2Print(void *pt, unsigned int num):发送数据包,非阻塞函数(即函数不等到所设定任务全部完成才返回),该函数从被调用到返回大约1uS左右时间。 + 函数参数: void *pt :指定发送数据包位置 + unsigned int num:发送数据包大小; + 函数返回值:enumTxOK:调用成功,即所设定的发送数据包请求已被系统sys正确接受,sys将尽硬件资源最大可能及时发送数据。 + enumTxFailure:调用失败(主要原因是:串口正忙(上一数据包未发完) + 补充说明:串口上发送1个字节数据大约需要时间0.1mS~10mS(视所设定的波特率),对计算机来说,如果发送多个字节是一个很要时间才能完成的事。 + 类似于前面用蜂鸣器演奏音乐,对这类事件与程序"异步"的问题,编程时不仅要注意程序逻辑性、还有注意程序时效性。(这个问题其实总是要注意、必须要注意的) +(4) char GetUart2TxStatus(void): 获取Uart2发送状态 + 函数返回值:enumUart2TxFree:串口2发送空闲 + enumUart2TxBusy,串口2发送正忙 +(5) Uart2接收事件:enumUart2EventRxd。表示收到了一个符合指定要求(数据包头匹配、数据包大小一致)的数据包。 + 当串口2工作于: Uart2UsedforEXT 或 Uart2Usedfor485 方式时, + Uart2接收事件为:同串口1性质一致,即:数据包头匹配、数据包大小一致 + 当串口2工作于: Uart2Usedfor485ModBus 方式时, (2022年5月2日新增) + Uart2接收事件为:收到一个ModBus数据帧(数据包内字节间间隔<4字节收发时间),且帧内包头内容与设定内容匹配 + 但:1,数据帧内未进行CRC校验。建议用户在回调函数中,为了验证数据包正确性,应对数据包进行CRC校验 + 2,未返回ModBus数据帧有效字节数。用户可从收到的指令类型(第2字节)及对应帧内数据(一般第5、6字节)判断帧字节数 + 补充说明:串口(1和2)上收到的两个数据包之时间间隔要求不小于1mS(原因:系统内部调度方法限制) + +补充说明: + (1) 串口1、串口2波特率可独立设置,互不影响. + (2) 串口1、串口2、红外通信可同时工作,互不影响 + (3) 串口1、串口2(除开ModBus)用法基本上完全一致,红外通信用法也基本相同。不同地方是: + a,串口1固定在USB接口上,可用于与计算机通信;而串口2可初始化在EXT扩展、或485接口上(在485接口上时仅单工工作); + b,红外通信速率固定不可变(大约相当于500~800 bps),通信时没有包头匹配功能。红外模块除通信功能外,还提供用于电器红外遥控的应用函数; + c,红外通信模块仅为单工工作。不发送时自动进入接收状态;有数据发送时自动进入发送状态,但正在接收数据包过程中不会进入发送状态。 + (4)2022年5月2日新增串口2在485接口上支持ModBus协议数据帧监测功能,使"STC-B学习板"方便实现ModBus协议的节点等功能 (2022年5月2日新增) + +编写:徐成(电话18008400450) 2021年3月28日设计 2022年5月2日更新 +*/ + + +#ifndef _uart2_H_ +#define _uart2_H_ + +extern void Uart2Init(unsigned long band,unsigned char Uart2mode); //串口2初始化,参数:波特率、串口2位置 +enum Uart2PortName {Uart2UsedforEXT,Uart2Usedfor485,Uart2Usedfor485ModBus}; // Uart2UsedforEXT —— 串口2在EXT扩展插座上(TTL标准串口) + // Uart2Usedfor485 —— 串口2用于485通信(半双工。发送数据包时不能接收数据) + // Uart2Usedfor485ModBus —— 串口2用于485上,ModBus协议收发 +extern void SetUart2Rxd(void *RxdPt, unsigned int Nmax, void *matchhead, unsigned int matchheadsize); //设置接收条件:数据包存放位置、大小,包头匹配字符、匹配字符个数。符合条件的包将产生enumUart2EventRxd事件 +extern char Uart2Print(void *pt, unsigned int num); //发送数据包。非阻塞函数。数据包位置、大小。返回值enumUart2TxOK调用成功,enumUart2TxFailure失败(串口忙,上一数据包未发完) +extern char GetUart2TxStatus(void); //获取串口2发送状态,enumUart2TxFree:串口2发送空闲, enumUart2TxBusy,串口2发送正忙 +enum Uart2ActName {enumUart2TxFree=0,enumUart2TxBusy,enumUart2TxOK,enumUart2TxFailure}; + +#endif \ No newline at end of file diff --git a/inc/universal_decode_table.h b/inc/universal_decode_table.h new file mode 100644 index 0000000..61deed5 --- /dev/null +++ b/inc/universal_decode_table.h @@ -0,0 +1,9 @@ +#ifndef UNIV_DECODE_TABLE_H +#define UNIV_DECODE_TABLE_H + +code char decode_table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x00, 0x08, 0x40, 0x01, 0x41, 0x48, + /* 序号: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ + /* 显示: 0 1 2 3 4 5 6 7 8 9 (无) 下- 中- 上- 上中- 中下- */ + 0x3f | 0x80, 0x06 | 0x80, 0x5b | 0x80, 0x4f | 0x80, 0x66 | 0x80, 0x6d | 0x80, 0x7d | 0x80, 0x07 | 0x80, 0x7f | 0x80, 0x6f | 0x80}; + +#endif \ No newline at end of file