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..2ae2d39
--- /dev/null
+++ b/inc/IR.h
@@ -0,0 +1,85 @@
+/********************************** IR V3.5a ˵ ***********************************************
+
+IRģڿơSTC-Bѧϰ塱Ϻⷢտƣ֧PWMPPMЭķͣPWMĽգңͨŵȡ
+IRģṩ15APIӦú1¼enumEventIrRxdIrյһݰ
+IRģѲ봮ͨţuartuart2ͻͬʱǰͻ
+
+ (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ʱֵ10.56mSʱ31.68mSʱ......
+ ......
+ ......
+ nⷢʱnֹⷢͣʱ
+ unsigned char numͺݵĴСֽ
+ ֵenumIrTxOKóɹ趨ķݰѱϵͳsysȷܣsysӲԴܼʱݡ
+ enumIrTxFailureʧܣҪԭǣⷢæһݰδ꣩ڽһݰ
+ ͬIrPrint()ֵ
+ ˵ոøʽ͵ңʽʵκ38KHzңܡ
+
+ (3) char IrPrint(void *pt, unsigned char num)//NECPWM뷽ʽݣڷϸúʽIJֵң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) ¼enumEventIrRxdIrյһϸʽݰʽIrPrint()˵
+ ݰʵֽIrջֽRxdNmax壩ҲյݰenumEventIrRxd¼
+
+˵
+ (1) 12ʿɶãӰ.
+ (2) 12ͨſͬʱӰ
+ (3) 12÷ȫһ£ͨ÷Ҳͬͬطǣ
+ a1̶USBӿϣͨţ2ɳʼEXTչ485ӿϣ485ӿʱ
+ bͨʹ̶ɱ䣨Լ൱500800 bpsͨʱûаͷƥ书ܡģͨŹ⣬ṩڵңصӦú
+ cͨģΪʱԶ״̬ݷʱԶ뷢״̬ڽݰв뷢״̬
+
+дɣ绰18008400450 2021824ƣ2021115ո
+*/
+
+#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); //NECPWM뷽ʽݣڷϸúʽIJֵң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..6bbd1e8
--- /dev/null
+++ b/inc/StepMotor.h
@@ -0,0 +1,50 @@
+/**********************************StepMotor ˵ ************************************************************************
+StepMotorSTC-BƲṩ13Ӧú
+ (1) StepMotorInit()ģ
+ (2) SetStepMotor(char StepMotor,unsigned char speed ,int steps ) ָָתٶȡתָ
+ StepMotor ָȡֵenum StepMotorNameж壩
+ enumStepMotor1 SM ӿϵIJ
+ enumStepMotor2 ʱL0L3ĸLEDģһ4ಽ
+ enumStepMotor3 ʱL4L7ĸLEDģһ4ಽ
+ speed תٶȣ0255λ/S (ʵÿʱ=int(1000mS/speed) mSٶȿܴһ
+ steps ת-3276832767ֵʾת
+ أenumSetStepMotorOK óɹenum StepMotorActNameж壩
+ enumSetStepMotorFailʧܣָΧspeed=0,ʱת
+ 3EmStop(char StepMotor) ָֹͣת
+ StepMotor ָԽ0ֵ
+ أʣδתIJ
+ 4GetStepMotorStatus(char StepMotor) ȡָ״̬
+ StepMotor ָ
+ أenumStepMotorFree:ɣenum StepMotorActNameж壩
+ enumStepMotorBusy,æת
+ enumSetStepMotorFailʧܣָΧ
+
+дɣ绰18008400450 2021416ƣ2021418ո
+*/
+
+#ifndef _StepMotor_H_
+#define _StepMotor_H_
+
+extern void StepMotorInit(); // ģʼ
+extern char SetStepMotor(char StepMotor,unsigned char speed ,int steps ); // ָָתٶȡתָ
+ // StepMotor ָȡֵenum StepMotorNameж壩
+ // enumStepMotor1 SM ӿϵIJ
+ // enumStepMotor2 ʱL0L3ĸLEDģһ4ಽ
+ // enumStepMotor3 ʱL4L7ĸLEDģһ4ಽ
+ // speed תٶȣ0255λ/S (ʵÿʱ=int(1000mS/speed) mSٶȿܴһ
+ // steps ת-3276832767ֵʾת
+ // أ
+ // enumSetStepMotorOKóɹ
+ // enumSetStepMotorFailʧܣָΧspeed=0,ʱת
+extern int EmStop(char StepMotor); // ָֹͣת
+ // StepMotor ָ(Խ0ֵ)
+ // أʣδתIJ
+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..ff8a281
--- /dev/null
+++ b/inc/Vib.h
@@ -0,0 +1,21 @@
+/**********************************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 202135ƣ2021326ո
+*/
+
+#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..eaf1a2c
--- /dev/null
+++ b/inc/adc.h
@@ -0,0 +1,79 @@
+/**********************************ADC V3.5a ˵ ************************************************************************
+ADCģڡSTC-Bѧϰ塱ADCص·:¶RtRopNavչӿEXTϵADCתṩADCģʼ2Ӧú,2¼
+ (1) AdcInit(char ADCsel)ADCģʼ
+ : ADCselѡչӿEXTǷADCܣȡֵ
+ ADCincEXT : չӿEXTADCܣEXTP1.0P1.1IOʹã
+ ADCexpEXT : չӿEXTADCܣEXTP1.0P1.1IOʹã
+ (2) struct_ADC GetADC()ȡADCֵ
+
+ ֵݽṹ struct_ADC
+ ݽṹ壺
+ typedef struct //ADCת
+ { unsigned int EXT_P10; // չӿEXTP1.0ADC10bit
+ unsigned int EXT_P11; // չӿEXTP1.1ADC10bit
+ unsigned int Rt; // ADC10bit
+ unsigned int Rop; // ADC10bit
+ unsigned int Nav; // ADC10bit
+ } struct_ADC;
+
+˵1ÿֱʾ VCC/1024λVVCCΪ·幩ѹUSBӿһΪ5Vң
+˵2ڵGetAdcNavAct¼״̬ʹã
+
+ (3) char GetAdcNavAct(char Nav_button)ȡK3״̬
+ Nav_buttonָҪȡ״̬ĵȡֵ
+ enumAdcNavKey3K3,
+ enumAdcNavKeyRightҰ,
+ enumAdcNavKeyDown°,
+ enumAdcNavKeyCenterİ
+ enumAdcNavKeyLeft,
+ enumAdcNavKeyUpϰ.
+ȡֵЧΧenumKeyFail
+ ֵصǰ¼ֵͬKeyģGetAdcKeyActֵ
+ enumKeyNullް,
+ enumKeyPress£,
+ enumKeyReleasȩ,
+ enumKeyFailʧܣ
+ ֵǾμⰴʵʱ״̬ͳƼЧ¼
+ ÿѯһκ,¼ֵ enumKeyNull (ѯһЧ)
+ (4) ¼enumEventNav
+ 5K3⡱¡̧𡰶ʱһ¼enumEventNavӦ¼ûصûд,sysṩSetEventCallBack()Ӧ.
+ (5) չӿEXTP1.0P1.1˿µADֵ¼enumEventXADC
+ ADCģP1.0P1.1ADCתµADCʱenumEventXADC¼֪ͨûдӦenumEventXADC¼ûصûд,sysṩSetEventCallBack()Ӧ.
+ ADCģP1.0P1.1ADCתٶΪ3mSҲÿ3mSÿ333ת.
+ (6) ˵
+ aEXTP1.0P1.0תٶΪ3mSҲÿṩ333תṩת¼enumEventXADCû
+bRtRopתٶΪ9mSҲÿṩ111תûṩӦ¼ûʱúGetAdcResult()ѯʹ
+ cԵֵ֧ÿ12βٶȣṩ˵˲¼enumEventNav
+ dڵK3˵Ƭͬһ˿ڣP1.7ADCģP1.7IOʧЧֻGetAdcNavAct(char Nav_button)ȡK3¼״̬
+ e: STC-BRtͺΪ10K/3950 NTC裬RopͺΪGL5516. ǵADCֵ¶ȡǿȹϵǵֲSTC-B·ͼл㡣
+
+
+дɣ绰18008400450 2021325,2021830
+*/
+
+#ifndef _adc_H_
+#define _adc_H_
+
+#define ADCincEXT 0x9B
+#define ADCexpEXT 0x98
+
+typedef struct //ADCת
+ { unsigned int EXT_P10; // չӿEXTP1.0ADC
+ unsigned int EXT_P11; // չӿEXTP1.1ADC
+ 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£,enuKeyReleasȩ,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..bfcc3b1
--- /dev/null
+++ b/inc/hall.H
@@ -0,0 +1,24 @@
+/**********************************hall V2.0 ˵ ************************************************************************
+HallģڻȡSTC-Bѧϰ塱hall״̬hallģ鹲ṩ1غ1ӦúһHall¼enumEventHall
+ 1HallInit()hallģʼ
+ 2unsigned char GetHallAct(void)ȡhall¼
+ ֵ
+ enumHallNullޱ仯
+ enumHallGetCloseųӽ
+ enumHallGetAwayų뿪
+ ѯһκ,¼ֵenumEventHall (ѯһЧ)
+ 3hall¼
+ Hall"ųӽ""ų뿪"¼ʱһHall¼(enumEventHall).Ӧ¼ûûд, sysṩSetEventCallBack()¼Ӧ.
+
+
+дɣ绰18008400450 2021315 2021326
+*/
+
+#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..0c219a9
--- /dev/null
+++ b/inc/music.h
@@ -0,0 +1,100 @@
+/********************************** music V2.0 ˵ ************************************************************************
+MusicģBeepDisplayerģٴηװڿơSTC-Bѧϰ塱ϲ֡ظģ飬ͬʱBeepģ顢displayerģ顣musicģ鹲ṩ1music4Ӧú
+ 1MusicPlayerInit()musicģ飻
+ 2char PlayTone(unsigned char tone, unsigned char beatsPM ,unsigned char scale, unsigned char beats)ףʵָָʡָס
+
+ toneָЧֵ0xFA0xFB0xFC0xFD0xFE0xFF0xF9ֱӦABCDEFG
+ beatsPMʣÿӽֵΧ10~255/
+ scaleּߣ1ֽڡ
+0x00ֹ
+4λ18 28 38
+3λ1-7ӦֵЧ
+磺0x13ʾ3mi
+ beats(),λ1/16ġ
+磺160x10Ӧ1ģ320x20Ӧ2ģ80x08Ӧ......
+ֵenumBeepOKóɹ
+ enumBeepBusyæһδ趨꣬ڷ
+ enumBeepFailʧܣtoneԣ߱scaleԣ
+ Beep.hжBeepActName
+ 3SetMusic(unsigned char beatsPM, unsigned char tone, unsigned char *pt, unsigned int datasize, unsigned char display)趨ıҪֺͲŲ
+
+ beatsPMʣÿӽֵΧ10~255/ӣֵΪenumModeInvalidıԭbeatsPM
+ toneָ Чֵ0xFA0xFB0xFC0xFD0xFE0xFF0xF9ֱӦABCDEFGֵΪenumModeInvalidֵıԭtone
+ *pt ָҪŵֱַ *pt datasize ֻһ = enumModeInvalidı *pt datasize
+ datasizeҪŵֱijȣֽ *pt datasize ֻһ = enumModeInvalidı *pt datasize
+ displaySeg7LedǷʾϢȡֵ
+ enumMscNull
+ enumMscDrvSeg7 7Seg7ʾϢ
+ enumMscDrvLed Ledָʾƣģ enumMscDrvSeg7andLed Seg7 Led
+ ֵΪenumModeInvalidֵıԭdisplay
+ֱ
+1ּ루ɶԳ֣ɷֿм䲻ܲͿ֣
+ ʽߣ1ֽڣ1ֽڣߣģ......
+ Сߡ֣
+0x11 0x17 Ӧ doremifasolasi 0x21 0x27 Ӧ doremifasolasi
+ 0x31 0x37 Ӧ doremifasolasi
+ С֣
+0x01-0xFFλ1/16ġҲʮУ4λʾ4λʾ1/16
+ 磺2ģ 0x20
+ ģ 0x08
+ 1İ룺0x18
+ 2ֱпԲ¿֣趨ֲŲȣǰ6Ҳͨó趨ʵ֣:
+ enumMscNull
+ enumMscDrvSeg7 7Seg7ʾϢ
+ enumMscDrvLed Ledָʾƣģ
+ enumMscDrvSeg7andLed Seg7 Led
+ enumMscSetBeatsPM ýʣ ٸ ʣ1ֽڣ
+ enumMscSetTone ٸ 1ֽڣ
+0xFA 0xFB 0xFC 0xFD 0xFE 0xFF 0xF9
+ֱӦ֣A B
+ enumMscRepeatBegin ֲظʼظһΣݲֶ֧ΣݲǶףǶЧܵ²Ԥڽ
+ enumMscRepeatEnd ֲظ
+
+ 4SetPlayerMode(unsigned char play_ctrl) ֲſƺ
+
+ play_ctrlenumModePlay š
+ enumModePause ͣ
+ enumModeStop ֹͣ/
+ Ч
+вڵǰɺЧ
+ 5char GetPlayerMode(void) ȡǰ״̬
+ ֵplay_ctrlֵ
+ enumModePlay ״̬
+ enumModePause ͣ״̬
+ enumModeStop ֹͣ/
+ӦͺɸҪúӣ
+
+
+дɣ绰18008400450 202135ƣ202195ո
+*/
+
+#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λ18 28 383λ1-7Ч
+ // beats: (),λ1/16ġ160x10Ӧ1ģ320x20Ӧ2ģ80x08Ӧ......
+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..c03d3d8
--- /dev/null
+++ b/inc/sys.H
@@ -0,0 +1,63 @@
+/******************************* sys Ver3.6 ˵ ************************************************
+ (1) sys.cSTCܹṩ
+ a, ϵͳʼMySTC_Init(),ϵͳȺMySTC_OS(),ûصSetEventCallBack()
+ b, ɿúʹص¼
+ enumEventSys1mS : 1mSʱ
+ enumEventSys10mS : 10mSʱ
+ enumEventSys100mS : 100mSʱ
+ enumEventSys1S : 1Sʱ
+ enumEventKey : ¼
+ enumEventNav : ¼
+ enumEventHall : hall¼
+ enumEventVib : ¼
+ enumEventXADC : չӿµADֵ¼
+ enumEventUart1Rxd : 1յһϸʽݰ¼1USBPCͨ
+ enumEventUart2Rxd : 2յһϸʽݰ¼2485UARTEXTUART485ModBusЭ飨202252
+ enumEventIrRxd : յһݰ¼
+ c, ȡϵͳ۲
+
+ (2) MySTC_Init()sysʼִһΡ
+ (3) MySTC_OS() sysȺӦwhile1ѭС
+ (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 2021226ƣ202252ո
+*/
+
+#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ȺӦwhile1ѭ
+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Э+ݰʽ"¼ 202252
+ 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..ef39ba0
--- /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ͨŲʣλbps8λ1ֹͣλżУλ
+ ֵ
+
+(2) void SetUart1Rxd(char *RxdPt, unsigned int Nmax, char *matchhead, unsigned int matchheadsize);
+ ô1ղݰλáСͷƥַƥַյݰʱenumEventRxd¼
+ char *RxdPtָݰַ
+ unsigned int NmaxݰСֽ65535յݴNmax 202252ոģ
+ char *matchhead Ҫƥݰͷַ
+ unsigned int matchheadsizeҪƥֽ
+ ˵
+ Nmax=1ΪֽڽգյһֽھͲenumUart1EventRxd¼ƥ䣬ƥ
+ 0 < matchheadsize < NmaxҪmatchheadsizeֽ*matchheadȫƥ䣬յNmaxʱenumEventRxd¼
+ matchheadsize = Nmax趨ݰȫƥ
+ matchheadsize=0 matchheadsize > Nmaxƥ䣬յNmaxʱenumEventRxd¼
+ enumEventRxd¼ûصزŽһݰ 202252ոģ
+ ֵ
+
+ (3) char Uart1Print(void *pt, unsigned int num)ݰȵ趨ȫɲŷأúӱõشԼ1uSʱ䡣
+ void *pt ָݰλ
+ unsigned int numݰС
+ ֵenumTxOKóɹ趨ķݰѱϵͳsysȷܣsysӲԴܼʱݡ
+ enumTxFailureʧܣҪԭǣæһݰδ꣩
+ ˵Ϸ1ֽݴԼҪʱ0.1mS10mS趨IJʣԼ˵ͶֽһҪʱɵ¡
+ ǰ÷֣¼"첽"⣬ʱҪעԡעʱЧԡʵҪע⡢Ҫעģ
+
+ (4) char GetUart1TxStatus(void) ȡUart1״̬
+ ֵenumUart1TxFree:1Ϳ
+ enumUart1TxBusy,1æ
+
+ (5) Uart1¼enumEventUart1RxdʾյһָҪݰͷƥ䡢ݰСһ£ݰ
+ ˵ڣ12յݰ֮ʱҪС1mSԭϵͳڲȷƣ
+
+˵
+ (1) 12ʿɶãӰ.
+ (2) 12ͨſͬʱӰ
+ (3) 12÷ȫһ£ͨ÷Ҳͬͬطǣ
+ a1̶USBӿϣͨţ2ɳʼEXTչ485ӿϣ485ӿʱ
+ bͨʹ̶ɱ䣨Լ൱500800 bpsͨʱûаͷƥ书ܡģͨŹ⣬ṩڵңصӦú
+ cͨģΪʱԶ״̬ݷʱԶ뷢״̬ڽݰв뷢״̬
+
+
+дɣ绰18008400450 2021328 2021118ո
+*/
+
+
+#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..0d68121
--- /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 2EXTչ(TTL)
+ Uart2Usedfor485 2485ͨţ˫ݰʱܽݣ
+ Uart2Usedfor485ModBus 2485ϣModBusЭշ 202252
+(2) void SetUart2Rxd(char *RxdPt, unsigned int Nmax, char *matchhead, unsigned int matchheadsize);
+ ô2ղݰλáСͷƥַƥַյݰʱenumEventRxd¼
+ char *RxdPtָݰַ
+ unsigned int NmaxݰСֽ65535յݴNmax 202252ոģ
+ char *matchhead Ҫƥݰͷַ
+ unsigned int matchheadsizeҪƥֽ
+ ˵
+ Nmax=1ΪֽڽգյһֽھͲenumEventUart2Rxd¼ƥ䣬ƥ
+ 0 < matchheadsize < NmaxҪmatchheadsizeֽ*matchheadȫƥ䣬յNmaxʱenumEventRxd¼
+ matchheadsize = Nmax趨ݰȫƥ
+ matchheadsize=0 matchheadsize > Nmaxƥ䣬յNmaxʱenumEventRxd¼
+ enumEventRxd¼ûصزŽһݰ 202252ոģ
+(3) char Uart2Print(void *pt, unsigned int num)ݰȵ趨ȫɲŷأúӱõشԼ1uSʱ䡣
+ void *pt ָݰλ
+ unsigned int numݰС
+ ֵenumTxOKóɹ趨ķݰѱϵͳsysȷܣsysӲԴܼʱݡ
+ enumTxFailureʧܣҪԭǣæһݰδ꣩
+ ˵Ϸ1ֽݴԼҪʱ0.1mS10mS趨IJʣԼ˵ͶֽһҪʱɵ¡
+ ǰ÷֣¼"첽"⣬ʱҪעԡעʱЧԡʵҪע⡢Ҫעģ
+(4) char GetUart2TxStatus(void) ȡUart2״̬
+ ֵenumUart2TxFree:2Ϳ
+ enumUart2TxBusy,2æ
+(5) Uart2¼enumUart2EventRxdʾյһָҪݰͷƥ䡢ݰСһ£ݰ
+ 2ڣ Uart2UsedforEXT Uart2Usedfor485 ʽʱ
+ Uart2¼Ϊͬ1һ£ݰͷƥ䡢ݰСһ
+ 2ڣ Uart2Usedfor485ModBus ʽʱ 202252
+ Uart2¼ΪյһModBus֡ݰֽڼ<4ֽշʱ䣩֡ڰͷ趨ƥ
+ 1֡δCRCУ顣ûڻصУΪ֤ݰȷԣӦݰCRCУ
+ 2δModBus֡Чֽûɴյָͣ2ֽڣӦ֡ݣһ56ֽڣжֽ֡
+ ˵ڣ12յݰ֮ʱҪС1mSԭϵͳڲȷƣ
+
+˵
+ (1) 12ʿɶãӰ.
+ (2) 12ͨſͬʱӰ
+ (3) 12ModBus÷ȫһ£ͨ÷Ҳͬͬطǣ
+ a1̶USBӿϣͨţ2ɳʼEXTչ485ӿϣ485ӿʱ
+ bͨʹ̶ɱ䣨Լ൱500800 bpsͨʱûаͷƥ书ܡģͨŹ⣬ṩڵңصӦú
+ cͨģΪʱԶ״̬ݷʱԶ뷢״̬ڽݰв뷢״̬
+ 42022522485ӿ֧ModBusЭ֡ܣʹ"STC-Bѧϰ"ʵModBusЭĽڵȹ 202252
+
+дɣ绰18008400450 2021328 202252ո
+*/
+
+
+#ifndef _uart2_H_
+#define _uart2_H_
+
+extern void Uart2Init(unsigned long band,unsigned char Uart2mode); //2ʼʡ2λ
+enum Uart2PortName {Uart2UsedforEXT,Uart2Usedfor485,Uart2Usedfor485ModBus}; // Uart2UsedforEXT 2EXTչ(TTL)
+ // Uart2Usedfor485 2485ͨţ˫ݰʱܽݣ
+ // Uart2Usedfor485ModBus 2485ϣ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/music/main.c b/music/main.c
new file mode 100644
index 0000000..fea2d66
--- /dev/null
+++ b/music/main.c
@@ -0,0 +1,109 @@
+// This project is used for demonstrating digital tubes of BSP library.
+#include "STC15F2K60S2.H"
+#include "displayer.h"
+#include "key.H"
+#include "music.h"
+#include "Beep.h"
+#include "sys.H"
+
+code unsigned long SysClock = 11059200; //必须。定义系统工作时钟频率(Hz),用户必须修改成与实际工作频率(下载时选择的)一致
+#ifdef _displayer_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};
+/* 带小数点 0 1 2 3 4 5 6 7 8 9 */
+#endif
+
+char result;
+
+char changeBit(char x, char n, char y)
+{
+ char temp = x;
+ temp &= ~(1 << n);
+ temp |= (y << n);
+ return temp;
+}
+
+void makeNoise()
+{
+ static char led = 0x0;
+ char key1 = GetKeyAct(enumKey1), key2 = GetKeyAct(enumKey2), key3 = GetKeyAct(enumKey3);
+ if (key1 == enumKeyPress)
+ {
+ led = changeBit(led, 0, 1);
+ // G tone, 60 bpm, 1 beat
+ result=PlayTone(0xf9, 60, 0x13, 16);
+ }
+ else if (key1 == enumKeyRelease)
+ {
+ led = changeBit(led, 0, 0);
+ }
+ if (key2 == enumKeyPress)
+ {
+ led = changeBit(led, 1, 1);
+ SetPlayerMode(enumModePlay);
+ }
+ else if (key2 == enumKeyRelease)
+ {
+ led = changeBit(led, 1, 0);
+ }
+ LedPrint(led);
+}
+
+void checkMode()
+{
+ static char status[8] = {10, 10, 10, 10, 10, 10, 10, 10};
+
+ char m = GetPlayerMode();
+ switch (m)
+ {
+ case enumModeInvalid:
+ status[0] = 1;
+ break;
+ case enumModePlay:
+ status[0] = 2;
+ break;
+ case enumModePause:
+ status[0] = 3;
+ break;
+ case enumModeStop:
+ status[0] = 4;
+ break;
+ default:
+ break;
+ }
+ switch(result)
+ {
+ case enumBeepFree:
+ status[1]=1;
+ break;
+ case enumBeepBusy:
+ status[1]=2;
+ break;
+ case enumSetBeepOK:
+ status[1]=3;
+ break;
+ case enumSetBeepFail:
+ status[1]=4;
+ break;
+ }
+ Seg7Print(status[0], status[1], status[2], status[3], status[4], status[5], status[6], status[7]);
+}
+
+void main()
+{
+ DisplayerInit();
+ KeyInit();
+ MusicPlayerInit();
+ SetDisplayerArea(0, 7);
+ SetEventCallBack(enumEventKey, makeNoise);
+ SetEventCallBack(enumEventSys1mS, checkMode);
+ MySTC_Init();
+ LedPrint(0xff);
+ Seg7Print(10, 10, 10, 10, 10, 10, 10, 10);
+ while (1)
+ {
+ MySTC_OS();
+ }
+}
diff --git a/music/music.uvopt b/music/music.uvopt
new file mode 100644
index 0000000..1fc4bdd
--- /dev/null
+++ b/music/music.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
+ 4
+ 0
+ 0
+ 0
+ .\STCBSP_V3.6.LIB
+ STCBSP_V3.6.LIB
+ 0
+ 0
+
+
+ 1
+ 2
+ 1
+ 0
+ 0
+ 0
+ .\main.c
+ main.c
+ 0
+ 0
+
+
+
+
diff --git a/music/music.uvproj b/music/music.uvproj
new file mode 100644
index 0000000..d6a1087
--- /dev/null
+++ b/music/music.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\
+ music
+ 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
+
+
+ STCBSP_V3.6.LIB
+ 4
+ .\STCBSP_V3.6.LIB
+
+
+ main.c
+ 1
+ .\main.c
+
+
+
+
+
+
+
+
diff --git a/music/readme.md b/music/readme.md
new file mode 100644
index 0000000..0419fd1
--- /dev/null
+++ b/music/readme.md
@@ -0,0 +1,5 @@
+# music
+
+Press K1 to play music.
+
+**Currently not working**.