⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 speak.c

📁 GPS开发
💻 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 + -