📄 speak.c
字号:
//=========================================================//
//文件名称:speak.c
//功能描述:日期和时间的语音播报
//维护记录:2006.7.31 by zhenlei
//========================================================//
#include "SPCE061A.h"
#include "s480.h"
#include "Speak.h"
//================================================================//
//语法格式:PlayRespond(unsigned int Result)
//实现功能:播放提示语音,对对传入的实参序号的语音资源进行播报
//参 数:unsigned int Ressult:传入的语音资源的序号
//返 回 值:无
//================================================================//
void PlayRespond(unsigned int Result)
{
SACM_S480_Initial(1);
*P_INT_Ctrl_New = *P_INT_Ctrl_New | C_IRQ5_2Hz; // 使初始化后不影响2KZ中断
SACM_S480_Play(Result,3,3);
while((SACM_S480_Status()&0x0001) != 0)
{
SACM_S480_ServiceLoop();
*P_Watchdog_Clear=0x0001;
}
SACM_S480_Stop();
}
//================================================================//
//================================================================//
//语法格式:PlaySpeakYear(int YearTemp)
//实现功能:播报年
//参数 :int YearTemp:年
//返回值 :无
//===============================================================//
void PlaySpeakYear(int YearTemp)
{
PlayRespond((YearTemp/1000));
PlayRespond((YearTemp%1000)/100);
PlayRespond((YearTemp%100)/10);
PlayRespond((YearTemp%10));
PlayRespond(C_YEAR);
}
//===============================================================//
//语法格式:PlaySpeakMonth(int MonthTemp)
//实现功能:播报月
//参数 :int MonthTemp:月
//返回值 :无
//==============================================================//
void PlaySpeakMonth(int MonthTemp)
{
if(MonthTemp<10)
PlayRespond(MonthTemp);
else if(MonthTemp==10)
PlayRespond(C_T10);
else if(MonthTemp==11)
{
PlayRespond(C_T10);
PlayRespond(C_T01);
}
else if(MonthTemp==12)
{
PlayRespond(C_T10);
PlayRespond(C_T02);
}
PlayRespond(C_MONTH);
}
//===============================================================//
//语法格式:PlaySpeakDay(int DayTemp)
//实现功能:播报日
//参数 :int DayTemp:日
//返回值 :无
//==============================================================//
void PlaySpeakDay(int DayTemp)
{
if((DayTemp/10)> 1)
PlayRespond(DayTemp/10+C_T00); // 十位>1报
if((DayTemp/10)>0)
PlayRespond(C_T10); // 报十,十位为1不报1
if((DayTemp%10)!= 0)
PlayRespond(DayTemp%10+C_T00);
PlayRespond(C_DAY);
}
//===============================================================//
//语法格式:PlaySpeakHour(int DayTemp)
//实现功能:播报时
//参数 :int DayTemp:小时
//返回值 :无
//==============================================================//
void PlaySpeakHour(int DayTemp)
{
if(DayTemp<10)
PlayRespond(DayTemp);
else if(DayTemp==10)
PlayRespond(C_T10);
else if(DayTemp>10 && DayTemp<20)
{
PlayRespond(C_T10);
PlayRespond(DayTemp%10);
}
else if(DayTemp==20)
{
PlayRespond(C_T02);
PlayRespond(C_T10);
}
else if(DayTemp>20)
{
PlayRespond(C_T02);
PlayRespond(C_T10);
PlayRespond(DayTemp%20);
}
PlayRespond(C_DIAN); // 点
}
//===============================================================//
//语法格式:PlaySpeakMinute(int MinTemp)
//实现功能:播报分
//参数 :int MinTemp:分
//返回值 :无
//==============================================================//
void PlaySpeakMinute(int MinTemp)
{
if(MinTemp==0)
PlayRespond(C_T00);
if((MinTemp/10)>1)
PlayRespond(MinTemp/10); // 分的十位
if((MinTemp/10) >0)
PlayRespond(C_T10); // 分的十位大于1报,为1不报1
if((MinTemp%10)!=0)
PlayRespond(MinTemp%10); // 分的个位不为0则报
PlayRespond(C_MIN); // 分
}
//================================================================//
//语法格式:PlaySpeakCent(float Cent)
//实现功能:播报经纬度中的分
//参数 :Cent 经纬度中的分
//返回值 :无
//===============================================================//
void PlaySpeakCent(float Cent)
{
int integar;
integar = (int)Cent; // 播放整数部分
if(integar / 10 != 0)
{
if(integar == 10)
PlayRespond(C_T10);
else
{
PlayRespond(integar / 10);
PlayRespond(C_T10);
}
}
if(integar == 0) //如果整数是0,播放0
PlayRespond(integar);
if(integar % 10 != 0)
PlayRespond(integar % 10);
PlayRespond(C_DIAN); // 播放小数点
Cent = Cent - integar;
Cent = Cent * 10; // 播放 0.1
integar = (int) Cent;
Cent = Cent - integar;
PlayRespond(integar);
Cent = Cent * 10; // 播放 0.01
integar = (int) Cent;
Cent = Cent - integar;
PlayRespond(integar);
Cent = Cent * 10; // 播放 0.001
integar = (int) Cent;
Cent = Cent - integar;
PlayRespond(integar);
Cent = Cent * 10; // 播放 0.0001
integar = (int) Cent;
Cent = Cent - integar;
PlayRespond(integar);
PlayRespond(C_MIN);
}
//================================================================//
//语法格式:PlaySpeakDegree(int Num)
//实现功能:播报经纬度中的度
//参数 :int Num 经纬度中的度
//返回值 :无
//===============================================================//
void PlaySpeakDegree(int Num)
{
int ret;
ret=(Num % 1000) / 100; // 播放百位
if(ret != 0)
{
PlayRespond(ret);
PlayRespond(C_T100);
}
ret=(Num % 100) / 10; //播放十位
if(ret != 0)
{
PlayRespond(ret);
PlayRespond(C_T10);
}
if( Num == 0) //播放个位
{
PlayRespond(Num);
}
ret=(Num % 10);
if(ret !=0)
{
PlayRespond(ret);
}
PlayRespond(C_DU);
}
//=============================================================//
//speak.c end
//=============================================================//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -