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

📄 speak.c

📁 基于凌阳单片机数字电子钟的C语言源代码 基于凌阳单片机数字电子钟的C语言源代码
💻 C
字号:
//=========================================================//
//文件名称:speak.c
//功能描述:日期和时间的语音播报
//维护记录:2006.7.31  by zhenlei
//========================================================//
#include "SPCE061A.h"
#include "s480.h"
#define     C_T00   0
#define     C_T01   1
#define     C_T02   2
#define     C_T03   3
#define     C_T04   4
#define     C_T05   5
#define     C_T06   6
#define     C_T07   7
#define     C_T08   8
#define     C_T09   9
#define     C_T10   10
#define     C_DIAN  11
#define     C_MIN 12
#define     C_YEAR   13
#define     C_MONTH  14
#define     C_DAY   15
#define     C_BELL  16
extern unsigned int year;
extern unsigned int gmonth;
extern unsigned int gday;
extern unsigned int hour;
extern unsigned int min;
//================================================================//
//语法格式:PlayRespond(unsigned int Result)
//实现功能:播放提示语音,对对传入的实参序号的语音资源进行播报
//参    数:unsigned int Ressult:传入的语音资源的序号
//返 回 值:无
//================================================================//
void PlayRespond(unsigned int Result)      
{   
	SACM_S480_Initial(1);
	*P_INT_Ctrl_New = *P_INT_Ctrl_New | 0x0004;                    //使初始化后不影响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);                                         //分
} 

//==============================================================//
//语法格式:void speaktime()
//实现功能:播报当前的时间
//参数    :无
//返回值  :无
//==============================================================//
void speaktime()
{
	PlayRespond(C_BELL);         						        //报时声       						  
    PlaySpeakHour(hour);            			    	        //时
    PlaySpeakMinute(min);   					                //分
}
//==============================================================//
//语法格式:void speakday()
//实现功能:播报当前的日期 
//参数    :无
//返回值  :无
//=============================================================//
void speakday()
{
	PlaySpeakYear(year);
	PlaySpeakMonth(gmonth);
	PlaySpeakDay(gday); 
}
//=============================================================//
//speak.c end
//=============================================================//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -