diff --git a/4/main.c b/4/main.c index 1216db9..6e7ccfe 100644 --- a/4/main.c +++ b/4/main.c @@ -5,7 +5,7 @@ #include "universal_decode_table.h" code unsigned long SysClock = 11059200; //必须。定义系统工作时钟频率(Hz),用户必须修改成与实际工作频率(下载时选择的)一致 -struct_DS1302_RTC time,temp; +struct_DS1302_RTC time, temp; unsigned char display[8]; void changeClock() diff --git a/9/main.c b/9/main.c index 1b3b2a1..271ff46 100644 --- a/9/main.c +++ b/9/main.c @@ -1,21 +1,21 @@ // ultrasonic distance sensor +#include "EXT.h" #include "STC15F2K60S2.H" #include "displayer.h" #include "sys.h" #include "universal_decode_table.h" -#include "EXT.h" code unsigned long SysClock = 11059200; //必须。定义系统工作时钟频率(Hz),用户必须修改成与实际工作频率(下载时选择的)一致 void showDist() { - int dist=GetUltraSonic(),num[5]; - num[0]=dist/10000; - num[1]=(dist%10000)/1000; - num[2]=(dist%1000)/100; - num[3]=(dist%100)/10; - num[4]=dist%10; - Seg7Print(num[0],num[1],num[2],num[3],num[4],0,0,0); + int dist = GetUltraSonic(), num[5]; + num[0] = dist / 10000; + num[1] = (dist % 10000) / 1000; + num[2] = (dist % 1000) / 100; + num[3] = (dist % 100) / 10; + num[4] = dist % 10; + Seg7Print(num[0], num[1], num[2], num[3], num[4], 0, 0, 0); } void main() diff --git a/inc/DS1302.h b/inc/DS1302.h index 377b96e..0c540e4 100644 --- a/inc/DS1302.h +++ b/inc/DS1302.h @@ -1,74 +1,74 @@ -/**********************************DS1302 V1.1 ˵ ************************************************************************ -DS1302ģڿơSTC-Bѧϰ塱DS1302оƬ -DS1302ṩRTCʵʱʱӣNVMʧ洢ܣϵRTCNVMŦ۵BATάֹģУ - RTCṩꡢ¡աڡʱ֡빦 - NVMṩ31 Bytesʧ洢(ַΪ030УַΪ30ĵԪDS1302Init()ڼDS1302Ƿ磬ûʹ) -DS1302ģ鹲ṩ14Ӧú +/**********************************DS1302 V1.1 说明 ************************************************************************ +DS1302模块用于控制“STC-B学习板”上DS1302芯片操作。 +DS1302提供RTC(实时时钟)和NVM(非易失存储器)功能(断电后,RTC和NVM是依靠纽扣电池BAT维持工作的)。其中: + RTC提供:年、月、日、星期、时、分、秒功能 + NVM提供:31 Bytes非易失存储器功能(地址为:0~30)。其中,地址为30的单元被DS1302Init()函数用于检测DS1302是否掉电,用户不能使用) +DS1302模块共提供1个驱动函数、4个应用函数: - (1) void DS1302Init(struct_DS1302_RTC time)DS1302ʹDS1302øúʼһ - ṹstruct_DS1302_RTC time - DS1302磨ʼʱRTCʧЧԲtimeʱʼRTC - ֵ + (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壩 + (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壩 - ֵ + (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 + (4) unsigned char NVM_Read(unsigned char NVM_addr): 读取NVM一个指定地址内容 + 函数参数: + NVM_addr:指定非易失存储单元地址,有效值0~30(共31个单元) + 函数返回值:当函数参数正常时,返回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 + (5) unsigned char NVM_Write(unsigned char NVM_addr, unsigned char NVM_data):向NVM一个指定地址写入新值 + 函数参数: + NVM_addr:指定非易失存储单元地址,有效值:0~30(共31个单元。其中,第30单元被DS1302Init()函数用于检测DS1302是否掉电,用户不能使用)) + NVM_data:待写入NVM单元的新值(1Byte) + 函数返回值:当函数参数正常时,返回enumDS1302_OK + 当函数参数错误时,返回enumDS1302_error -ṹstruct_DS1302_RTC壺μDS1302Zֲᣩ +结构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; // + { 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 - Ҫʱʹ϶ддҪضֽݣӦЧظ +关于DS1302内部非易失性存储器补充说明: + DS1302提供的非易失性存储器为低功耗RAM结构,靠纽扣电池保持掉电后其存储内容不变。 + 与M24C01区别:容量小(仅31字节),但无”写“寿命问题,且写周期很短(可忽略:即两次写操作之间无需等待); + 读、写DS1302内部NVM每一个字节均需要花费一定操作时间(数十uS); + 仅在需要时使用以上读或写函数读写需要的特定字节内容,应避免对其进行无效、大量、重复操作! -дɣ绰18008400450 202185ƣ2021815ոĽ +编写:徐成(电话18008400450) 2021年8月5日设计,2021年8月15日改进 */ #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; // + { 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еķʧ洢Ԫ +extern void DS1302Init(struct_DS1302_RTC time); //DS1302初始化 +extern struct_DS1302_RTC RTC_Read(void); //读RTC(读RTC时钟内容) +extern void RTC_Write(struct_DS1302_RTC time); //写RTC(校对RTC时钟) +extern unsigned char NVM_Read(unsigned char NVM_addr); //读NVM(读DS1302中的非易失存储单元内容) +extern unsigned char NVM_Write(unsigned char NVM_addr, unsigned char NVM_data); //写NVM(写DS1302中的非易失存储单元) enum DS1302name {enumDS1302_OK,enumDS1302_error}; diff --git a/inc/EXT.h b/inc/EXT.h index 65b8b87..a9a77dd 100644 --- a/inc/EXT.h +++ b/inc/EXT.h @@ -1,62 +1,62 @@ -/********************************** EXT V1.0 ˵ *********************************************** +/********************************** EXT V1.0 说明 *********************************************** -EXTģڿơSTC-Bѧϰ塱չӿEXTز -EXTģӦҪӦģ򲿼󣬿ʵֶӦܡṩӦAPI -EXTģṩ1ɸӦòAPI -EXTģAPIͬʱЧģǸݳʼֱͬЧ +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()ܳͻ + (1) void EXTInit(char EXTfunction):EXT初始化函数。 + 函数参数:EXTfunction。定义EXT接口功能 + EXTfunction 取值:enumEXTWeight(秤重:由HX710、HX711组成的电子秤) + 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 + (2)API函数 + (a) 电子秤。当EXTInit(char EXTfunction)使用enumEXTWeight参数时,GetWeight函数有效。 + int GetWeight(void) //获取电子秤ADC秤重数据(16bit,带符号整数。未清零、未标定。参见HX710、HX711数据手册(高16bit)) - (b) PWMEXTInit(char EXTfunction)ʹenumEXTPWMʱSetPWMЧ + (b) PWM脉宽调制输出。当EXTInit(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ʽ·ȣ + //设置EXT上输出PWM(参数PWM为占空比(输出高电平时间的比例):0~100,单位%)。freqx为频率:1~255Hz) + //实际频率 = 1000/int(1000/freqx)。即:1000/i=4,5,6...1000,或250,200,167,143,125,111,100,91,83...1 + //可用于控制直流电机正反转、转速(配合H型桥式电路),灯亮度,等 - (c) תʽEXTInit(char EXTfunction)ʹenumEXTDecodeʱGetDecodeЧ - int GetDecode(void); //ȡֵϴζȡ + (c) 旋转编码器、或增量式编码器。当EXTInit(char EXTfunction)使用enumEXTDecode参数时,GetDecode函数有效。 + int GetDecode(void); //获取增量编码器增量值(相对上次读取后的新增量) - (d) ࡣEXTInit(char EXTfunction)ʹenumEXTUltraSonicʱGetUltraSonicЧ - int GetUltraSonic(void); //ȡֵÿ5βֵλcm + (d) 超声波测距。当EXTInit(char EXTfunction)使用enumEXTUltraSonic参数时,GetUltraSonic函数有效。 + int GetUltraSonic(void); //获取超声波测距值(每秒5次测量,返回值单位:cm) - (e) RFIDݻ - (g) ڣ2 - (h) ݲɼӳߡ£ADC -ע + (e) RFID读卡(暂缓) + (g) (蓝牙、串口)见串口2 + (h) (气敏、数据采集、电子尺、额温)见ADC +编程注意事项: -дɣ绰18008400450 2021824 +编写:徐成(电话18008400450) 2021年8月24日设计 */ #ifndef _EXT_H_ #define _EXT_H_ -extern void EXTInit(char EXTfunction); //չӿڳʼ -enum EXTname {enumEXTWeight //ӳ - ,enumEXTPWM, //PWMֱת򡢿 - ,enumEXTDecode //ʽת - ,enumEXTUltraSonic // - //2uart2ģ - //ݲɼӳߡǹȣADC +extern void EXTInit(char EXTfunction); //扩展接口初始化 +enum EXTname {enumEXTWeight //电子秤 + ,enumEXTPWM //PWM,控制直流电机转动方向、快慢 + ,enumEXTDecode //增量式计数(旋转编码器) + ,enumEXTUltraSonic //超声波测距 + //串口2,蓝牙:见uart2模块 + //气敏、数据采集、电子尺、额温枪等:见ADC }; -extern int GetWeight(void); //ȡӳADCݣHX710HX71116bitδ㡢δ궨 -extern int GetDecode(void); //ȡֵϴζȡ -extern int GetUltraSonic(void); //ȡֵÿ5βֵλcm +extern int GetWeight(void); //获取电子秤ADC秤重数据(HX710、HX711输出高16bit,带符号数整数。未清零、未标定) +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ʽ·ȣ + //设置EXT上输出PWM(参数PWM为占空比(输出高电平时间的比例):0~100,单位%)。freqx为频率:1~255Hz) + //实际频率 = 1000/int(1000/freqx)。即:1000/i=4,5,6...1000,或250,200,167,143,125,111,100,91,83...1 + //可用于控制直流电机正反转、转速(配合H型桥式电路),灯亮度,等 diff --git a/inc/FM_Radio.h b/inc/FM_Radio.h index 3b15155..9c862d3 100644 --- a/inc/FM_Radio.h +++ b/inc/FM_Radio.h @@ -1,49 +1,49 @@ -/********************************** FMRadio V1.1 ˵ ************************************************************************ -FMRadioģڿơSTC-Bѧϰ塱FM -FMRadioģģ鹲ṩ1ʼ2Ӧú +/********************************** FMRadio V1.1 说明 ************************************************************************ +FMRadio模块用于控制“STC-B学习板”上FM收音机操作。 +FMRadio模块模块共提供1个初始化函数、2个应用函数 - (1) void FMRadioInit(struct_FMRadio FMRadio); //ģʼúִֻһΡʼ¸Ӧúȷʹá - FMRadio (ṹstruct_FMRadio) - ֵ + (1) void FMRadioInit(struct_FMRadio FMRadio); //收音机模块初始化函数。该函数只执行一次。初始化后,以下各应用函数方可正确使用。 + 函数参数:FMRadio (见结构struct_FMRadio定义) + 函数返回值:无 - (2) void SetFMRadio(struct_FMRadio FMRadio); //FMƲ - FMRadio (ṹstruct_FMRadio) - ֵ + (2) void SetFMRadio(struct_FMRadio FMRadio); //设置FM收音机控制参数。 + 函数参数:FMRadio (见结构struct_FMRadio定义) + 函数返回值:无 - 3 struct_FMRadio GetFMRadio(void); //ȡǰFM - - ֵFMģ(ṹ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定义: + typedef struct //FM收音机控制模型 + { unsigned int frequency; // FM收音机收音频率 (frequency参数范围:887~1080。单位:0.1MHz,如887代表88.7MHz)。错误参数或参数与当前值无变化,将忽略 + unsigned char volume; // FM收音机音量 (volume参数范围:0~15。0为最小音量)。错误参数或参数与当前值无变化,将忽略 + 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ܲ +编程注意事项: + 1,本版本暂未输出调谐、自动搜索、电台信号等控制和状态信息,因此,暂不能完成自动搜索电台等收音机功能。 + 2,FM收音机借用USB转串口模块(CH340)时钟(硬件设计原因),需要连接USB接口(供电、通信)到USB主设备,CH340方有时钟产生和输出。 + 故STC-B学习板的USB接口需要连接到一个USB主设备方可收音,仅USB供电时(如USB充电宝、或计算机休眠时的USB接口),FM收音机可能不工作 -дɣ绰18008400450 2021810ƣ2021816ոĽ +编写:徐成(电话18008400450) 2021年8月10日设计,2021年8月16日改进 */ #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 +typedef struct //FM收音机控制模型 + { unsigned int frequency; // FM收音机收音频率 (frequency参数范围:887~1080。单位:0.1MHz,如887代表88.7MHz)。错误参数或参数与当前值无变化,将忽略 + unsigned char volume; // FM收音机音量 (volume参数范围:0~15。0为最小音量)。错误参数或参数与当前值无变化,将忽略 + 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ģ +extern void FMRadioInit(struct_FMRadio FMRadio); //收音机模块初始化函数。输入FM控制模型数据,无返回值。初始化后,以下各应用函数方可正确使用 +extern void SetFMRadio(struct_FMRadio FMRadio); //设置FM收音机控制参数。输入FM控制模型数据,无返回值。 +extern struct_FMRadio GetFMRadio(void); //获取当前FM收音机参数。无输入参数,返回FM控制模型数据 #endif \ No newline at end of file