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 + 5򰴼K3⡱¡̧𡰶ʱһ¼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**.