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

📄 main.c

📁 基于SPCE061A单片机的语音电子时钟,液晶显示,语音控制,汉语报时(课程设计题目)
💻 C
📖 第 1 页 / 共 3 页
字号:
{
	if(alarm_flag4 == 0)alarm_flag4 = 1;
	else  alarm_flag4 = 0; 
}

void subn4(void)
{
	if(brow6.top == 44) switch4();
	else if(brow6.top == 60) 
	{	
		if(timen4.hour == 0) timen4.hour = 23;
		                else timen4.hour--;
	}
	else if(brow6.top == 92)
	{
		
		if(timen4.minute == 0) timen4.minute = 59;
		timen4.minute--;
	}
}

void leftn4(void)
{
	LCD501_Bitmap(brow6.top,32,(unsigned int *)encoding_1f);//	
	if(brow6.top == 44)      brow6.top = 92;
	else if(brow6.top == 60) brow6.top = 44;
	else if(brow6.top == 92) brow6.top = 60;
}
void rightn4(void)
{
	LCD501_Bitmap(brow6.top,32,(unsigned int *)encoding_1f);//
	if(brow6.top == 44)      brow6.top = 60;
	else if(brow6.top == 60) brow6.top = 92;
	else if(brow6.top == 92) brow6.top = 44;
}

void returnn4(void)
{
	alarm_flag41 = 0;
	LCD501_ClrScreen(0);
}	
								
void displayn1(void)
{
	LCD501_Bitmap(brow3.top,32,(unsigned int *)encoding_1d);//↑
	LCD501_Bitmap(4,16,(unsigned int *)encoding_0b);//闹
	LCD501_Bitmap(20,16,(unsigned int *)encoding_0c);//钟	
	LCD501_PutString(36,16,(unsigned int *)"1"); //1
	if(alarm_flag1 == 1)
	{
		LCD501_Bitmap(44,16,(unsigned int *)encoding_1f); //	
		LCD501_Bitmap(44,16,(unsigned int *)encoding_0d); //开
	}
	else
	{
		LCD501_Bitmap(44,16,(unsigned int *)encoding_1f); //
		LCD501_Bitmap(44,16,(unsigned int *)encoding_0e); //关
	}
    LCD501_PutString(60,16,aa[timen1.hour]); //
    LCD501_Bitmap(76,16,(unsigned int *)encoding_03); //时
    LCD501_PutString(92,16,aa[timen1.minute]);		
	LCD501_Bitmap(108,16,(unsigned int *)encoding_04);//分
	
	*P_Watchdog_Clear = 0x0001; 
}
		
void displayn2(void)
{
	LCD501_Bitmap(brow4.top,32,(unsigned int *)encoding_1d);//↑
	LCD501_Bitmap(4,16,(unsigned int *)encoding_0b);//闹
	LCD501_Bitmap(20,16,(unsigned int *)encoding_0c);//钟	
	LCD501_PutString(36,16,(unsigned int *)"2"); //2
	if(alarm_flag2 == 1)
	{
		LCD501_Bitmap(44,16,(unsigned int *)encoding_1f); //	
		LCD501_Bitmap(44,16,(unsigned int *)encoding_0d); //开
	}
	else
	{
		LCD501_Bitmap(44,16,(unsigned int *)encoding_1f); //
		LCD501_Bitmap(44,16,(unsigned int *)encoding_0e); //关
	}
    LCD501_PutString(60,16,aa[timen2.hour]); //
    LCD501_Bitmap(76,16,(unsigned int *)encoding_03); //时
    LCD501_PutString(92,16,aa[timen2.minute]);		
	LCD501_Bitmap(108,16,(unsigned int *)encoding_04);//分
	
	*P_Watchdog_Clear = 0x0001; 
}		


void displayn3(void)
{
	LCD501_Bitmap(brow5.top,32,(unsigned int *)encoding_1d);//↑
	LCD501_Bitmap(4,16,(unsigned int *)encoding_0b);//闹
	LCD501_Bitmap(20,16,(unsigned int *)encoding_0c);//钟	
	LCD501_PutString(36,16,(unsigned int *)"3"); //2
	if(alarm_flag3 == 1)
	{
		LCD501_Bitmap(44,16,(unsigned int *)encoding_1f); //	
		LCD501_Bitmap(44,16,(unsigned int *)encoding_0d); //开
	}
	else
	{
		LCD501_Bitmap(44,16,(unsigned int *)encoding_1f); //
		LCD501_Bitmap(44,16,(unsigned int *)encoding_0e); //关
	}
    LCD501_PutString(60,16,aa[timen3.hour]); //
    LCD501_Bitmap(76,16,(unsigned int *)encoding_03); //时
    LCD501_PutString(92,16,aa[timen3.minute]);		
	LCD501_Bitmap(108,16,(unsigned int *)encoding_04);//分
	
	*P_Watchdog_Clear = 0x0001; 
}		

void displayn4(void)
{
	LCD501_Bitmap(brow6.top,32,(unsigned int *)encoding_1d);//↑
	LCD501_Bitmap(4,16,(unsigned int *)encoding_0b);//闹
	LCD501_Bitmap(20,16,(unsigned int *)encoding_0c);//钟	
	LCD501_PutString(36,16,(unsigned int *)"4"); //2
	if(alarm_flag4 == 1)
	{
		LCD501_Bitmap(44,16,(unsigned int *)encoding_1f); //	
		LCD501_Bitmap(44,16,(unsigned int *)encoding_0d); //开
	}
	else
	{
		LCD501_Bitmap(44,16,(unsigned int *)encoding_1f); //
		LCD501_Bitmap(44,16,(unsigned int *)encoding_0e); //关
	}
    LCD501_PutString(60,16,aa[timen4.hour]); //
    LCD501_Bitmap(76,16,(unsigned int *)encoding_03); //时
    LCD501_PutString(92,16,aa[timen4.minute]);		
	LCD501_Bitmap(108,16,(unsigned int *)encoding_04);//分
	
	*P_Watchdog_Clear = 0x0001; 
}		



void display5(void)
{
	LCD501_Bitmap(4,browl.left,(unsigned int *)encoding_1c);//→
	LCD501_Bitmap(20,0,(unsigned int *)encoding_0b);//闹	
	LCD501_PutString(36,0,(unsigned int *)"1"); //1
    if(alarm_flag1 == 1)
	{
		LCD501_Bitmap(44,0,(unsigned int *)encoding_1f); //	
		LCD501_Bitmap(44,0,(unsigned int *)encoding_0d); //开
	}
	else
	{
		LCD501_Bitmap(44,0,(unsigned int *)encoding_1f); //
		LCD501_Bitmap(44,0,(unsigned int *)encoding_0e); //关
	}
    LCD501_PutString(60,0,aa[timen1.hour]); //
    LCD501_Bitmap(76,0,(unsigned int *)encoding_03); //时
    LCD501_PutString(92,0,aa[timen1.minute]);		
	LCD501_Bitmap(108,0,(unsigned int *)encoding_04);//分
	LCD501_Bitmap(20,16,(unsigned int *)encoding_0b);//闹	
	LCD501_PutString(36,16,(unsigned int *)"2"); //1
    if(alarm_flag2 == 1)
	{
		LCD501_Bitmap(44,16,(unsigned int *)encoding_1f); //	
		LCD501_Bitmap(44,16,(unsigned int *)encoding_0d); //开
	}
	else
	{
		LCD501_Bitmap(44,16,(unsigned int *)encoding_1f); //
		LCD501_Bitmap(44,16,(unsigned int *)encoding_0e); //关
	}
    LCD501_PutString(60,16,aa[timen2.hour]); //1
    LCD501_Bitmap(76,16,(unsigned int *)encoding_03); //时
    LCD501_PutString(92,16,aa[timen2.minute]);		
	LCD501_Bitmap(108,16,(unsigned int *)encoding_04);//分
	
	*P_Watchdog_Clear = 0x0001; 
		
	LCD501_Bitmap(20,32,(unsigned int *)encoding_0b);//闹	
	LCD501_PutString(36,32,(unsigned int *)"3"); //1
   if(alarm_flag3 == 1)
	{
		LCD501_Bitmap(44,32,(unsigned int *)encoding_1f); //	
		LCD501_Bitmap(44,32,(unsigned int *)encoding_0d); //开
	}
	else
	{
		LCD501_Bitmap(44,32,(unsigned int *)encoding_1f); //
		LCD501_Bitmap(44,32,(unsigned int *)encoding_0e); //关
	}
    LCD501_PutString(60,32,aa[timen3.hour]); //1
    LCD501_Bitmap(76,32,(unsigned int *)encoding_03); //时
    LCD501_PutString(92,32,aa[timen3.minute]);		
	LCD501_Bitmap(108,32,(unsigned int *)encoding_04);//分
	LCD501_Bitmap(20,48,(unsigned int *)encoding_0b);//闹	
	LCD501_PutString(36,48,(unsigned int *)"4"); //1
    if(alarm_flag4 == 1)
	{
		LCD501_Bitmap(44,48,(unsigned int *)encoding_1f); //	
		LCD501_Bitmap(44,48,(unsigned int *)encoding_0d); //开
	}
	else
	{
		LCD501_Bitmap(44,48,(unsigned int *)encoding_1f); //
		LCD501_Bitmap(44,48,(unsigned int *)encoding_0e); //关
	}
    LCD501_PutString(60,48,aa[timen4.hour]); //1
    LCD501_Bitmap(76,48,(unsigned int *)encoding_03); //时
    LCD501_PutString(92,48,aa[timen4.minute]);		
	LCD501_Bitmap(108,48,(unsigned int *)encoding_04);//分
	
	*P_Watchdog_Clear = 0x0001; 
}	 
			
void display4(void)
{	
	LCD501_Bitmap(20,8,(unsigned int *)encoding_05);//秒                                              
    LCD501_Bitmap(44,8,(unsigned int *)encoding_0a);//表
	LCD501_Bitmap(68,8,(unsigned int *)encoding_17);//显
    LCD501_Bitmap(92,8,(unsigned int *)encoding_18);//示
	LCD501_PutString(24,32,aa[times.minute]);		
	LCD501_Bitmap(40,32,(unsigned int *)encoding_04);//分
	LCD501_PutString(56,32,aa[times.second]);	
	LCD501_Bitmap(72,32,(unsigned int *)encoding_05);//秒		
	LCD501_PutString(88,32,aa[times.hsecond]);
	
	*P_Watchdog_Clear = 0x0001; 
}	 
	
void display3(void)
{
	LCD501_Bitmap(brow2.top,brow2.bottom,(unsigned int *)encoding_1d);//↑
	LCD501_PutString(16,0,aa[timeb.year]);		      		
    LCD501_Bitmap(32,0,(unsigned int *)encoding_00);//年
	LCD501_PutString(48,0,aa[timeb.month]);			
	LCD501_Bitmap(64,0,(unsigned int *)encoding_01);//月
	LCD501_PutString(80,0,aa[timeb.day]);		      		
	LCD501_Bitmap(96,0,(unsigned int *)encoding_02);//日
	LCD501_PutString(16,32, aa[timeb.hour] );	
	LCD501_Bitmap(32,32,(unsigned int *)encoding_03);//时
	LCD501_PutString(48,32,aa[timeb.minute]);		
	LCD501_Bitmap(64,32,(unsigned int *)encoding_04);//分
	LCD501_PutString(80,32,aa[timeb.second]);	
	LCD501_Bitmap(96,32,(unsigned int *)encoding_05);//秒
    
	*P_Watchdog_Clear = 0x0001; 
}	 
				
void display2(void)
{
	LCD501_Bitmap(12,browl.right,(unsigned int *)encoding_1c);//→
	LCD501_PutString(36,8,(unsigned int *)"1"); //1
    LCD501_Bitmap(52,8,(unsigned int *)encoding_03); //时
	LCD501_Bitmap(68,8,(unsigned int *)encoding_07); //间
    LCD501_Bitmap(84,8,(unsigned int *)encoding_08); //调
    LCD501_Bitmap(100,8,(unsigned int *)encoding_09); //整
    LCD501_PutString(36,24,(unsigned int *)"2"); //2
	LCD501_Bitmap(52,24,(unsigned int *)encoding_17);//显
    LCD501_Bitmap(68,24,(unsigned int *)encoding_18);//示
    LCD501_Bitmap(84,24,(unsigned int *)encoding_05);//秒
    LCD501_Bitmap(100,24,(unsigned int *)encoding_0a);//表
    LCD501_PutString(36,40,(unsigned int *)"3"); //3
    LCD501_Bitmap(52,40,(unsigned int *)encoding_19);//设
	LCD501_Bitmap(68,40,(unsigned int *)encoding_1a);//置
    LCD501_Bitmap(84,40,(unsigned int *)encoding_0b);//闹
    LCD501_Bitmap(100,40,(unsigned int *)encoding_0c);//钟
    
   	*P_Watchdog_Clear = 0x0001; 
}	 
	

void display1(void)//主屏显示程序
{                     
    LCD501_Bitmap(0,0,(unsigned int *)encoding_0b);//闹
    LCD501_Bitmap(16,0,(unsigned int *)encoding_0c);//钟
    LCD501_PutString(32,0,(unsigned int *)"("); //(
    if(alarm_flag1 ==1)  LCD501_Bitmap(40,0,(unsigned int *)encoding_0f);//一
    else  LCD501_Bitmap(40,0,(unsigned int *)encoding_1f);//
    if(alarm_flag2 == 1)  LCD501_Bitmap(56,0,(unsigned int *)encoding_10);//二
    else LCD501_Bitmap(56,0,(unsigned int *)encoding_1f);//
    if (alarm_flag3 == 1) LCD501_Bitmap(72,0,(unsigned int *)encoding_11);//三
    else  LCD501_Bitmap(72,0,(unsigned int *)encoding_1f);//
    if(alarm_flag4 == 1)  LCD501_Bitmap(88,0,(unsigned int *)encoding_12);//四
    else   LCD501_Bitmap(88,0,(unsigned int *)encoding_1f);//		    				
    LCD501_PutString(104,0,(unsigned int *)")");// )
    LCD501_Bitmap(112,0,(unsigned int *)encoding_0d);//开
    LCD501_PutString(8,16,(unsigned int *)"20");
    LCD501_PutString(24,16,aa[timeb.year]);		      		
    LCD501_Bitmap(40,16,(unsigned int *)encoding_00);//年
	LCD501_PutString(56,16,aa[timeb.month]);			
	LCD501_Bitmap(72,16,(unsigned int *)encoding_01);//月
	LCD501_PutString(88,16,aa[timeb.day]);		      		
	LCD501_Bitmap(104,16,(unsigned int *)encoding_02);//日
	LCD501_PutString(16,32, aa[timeb.hour] );	
	LCD501_Bitmap(32,32,(unsigned int *)encoding_03);//时
	LCD501_PutString(48,32,aa[timeb.minute]);		
	LCD501_Bitmap(64,32,(unsigned int *)encoding_04);//分
	LCD501_PutString(80,32,aa[timeb.second]);	
	LCD501_Bitmap(96,32,(unsigned int *)encoding_05);//秒			
	LCD501_Bitmap(40,48,(unsigned int *)encoding_15);//星
	LCD501_Bitmap(56,48,(unsigned int *)encoding_16);//期
	week();
		
	*P_Watchdog_Clear = 0x0001;    	
}

unsigned char weekflag(void)//星期标志
{
	unsigned int days;
	unsigned char leap;
	unsigned char weekflag;
	if((timeb.year%4 == 0&&timeb.year%100 !=0)  || (timeb.year%400 == 0))
		leap = 1;
	else
		leap = 0;
	days = timeb.day;
	switch(timeb.month-1)
	{
		case 12:days+= 31;		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
        case 11:days+= 30;
        case 10:days+= 31;
        case 9:days+= 30;
        case 8:days+= 31;
        case 07:days+= 31;
        case 06:days+= 30;
        case 05:days+= 31;
        case 04:days+= 30;
        case 03:days+= 31;
        case 02:if(leap == 1)
                    days += 29;
                else
                	days += 28;               	
        case 01:days+= 31; 
	}
	if(leap == 1)
	{
		days += timeb.year/4*366+(timeb.year-timeb.year/4)*365+5;
	}
	else 
	{
		days += (timeb.year/4+1)*366+(timeb.year-timeb.year/4-1)*365+5;
	}
	weekflag = days%7;
	return weekflag;
}		
	
void week(void)//星期显示程序
{ 
	unsigned char i;
	i = weekflag();
	switch(i)
	{
		case 0:LCD501_Bitmap(72,48,(unsigned int *)encoding_02);break;
		case 1:LCD501_Bitmap(72,48,(unsigned int *)encoding_0f);break;
        case 2:LCD501_Bitmap(72,48,(unsigned int *)encoding_10);break;
        case 3:LCD501_Bitmap(72,48,(unsigned int *)encoding_11);break;
        case 4:LCD501_Bitmap(72,48,(unsigned int *)encoding_12);break;
        case 5:LCD501_Bitmap(72,48,(unsigned int *)encoding_13);break;
        case 6:LCD501_Bitmap(72,48,(unsigned int *)encoding_14);break;  
	}
}

//************************播放提示语音******** *************//
//input: 播放序号
//*********************************************************//
/*
PlaySpeakYear(unsigned int YearTemp)   	//*************年
{  
   PlayRespond((YearTemp/1000)+C_T00);
   PlayRespond((YearTemp%1000)/100+C_T00);
   PlayRespond((YearTemp%100)/10+C_T00);
   PlayRespond((YearTemp%10)+C_T00);
   PlayRespond(C_YEAR);
}

//input:月------16进制


PlaySpeakMonth(unsigned int MonthTemp)   //*************月
{ 
	if(MonthTemp<10)  PlayRespond(MonthTemp+C_T00);
	else if(MonthTemp==10)  PlayRespond(C_T10);
	else if(MonthTemp==11)  PlayRespond(C_T11);
	else if(MonthTemp==12)  PlayRespond(C_T12);
    PlayRespond(C_MONTH);       
}

//input:日 ------16进制

PlaySpeakDay(unsigned 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);
}
 
//input: 时------16进制
    
PlaySpeakHour(unsigned int DayTemp)     //*************时
{	 	                
	 if(DayTemp>=0 && DayTemp<=7) 
	   	{ PlayRespond(C_LINGCHEN);      		 				//0—7 凌晨
		  if(DayTemp==2)  PlayRespond(C_S02);    				//两
		  else  PlayRespond(DayTemp+C_T00);   
	     }
	     
	  else if(DayTemp>=8 && DayTemp<=12) 
		  {   PlayRespond(C_NOON);     							//8--12 上午
			  switch(DayTemp)
			  { case 10:PlayRespond(C_T10); break;  			//十点
			    case 11:PlayRespond(C_T11); break;  			//十一点
			    case 12:PlayRespond(C_T12); break;  			//十二点
			    default: PlayRespond(DayTemp+C_T00);break;
		      }
           }	           
	 else if(DayTemp>=13 && DayTemp<=19) 
		 { PlayRespond(C_AFTERNOON);       						//13--19 下午1--7
		   if(DayTemp==14)  PlayRespond(C_S02);  				//两
		   else  PlayRespond(DayTemp-12+C_T00); 
	     }
	   
	 else if(DayTemp>=20 && DayTemp<=23) 
	      {   PlayRespond(C_NIGHT);     						//20--24 晚上8--12
		    switch(DayTemp)
			{  case 22:PlayRespond(C_T10); break;   			//十点
			   case 23:PlayRespond(C_T11); break;  				//十一点
			 //  case 24:PlayRespond(C_T12); break;   			//十二点
			   default: PlayRespond(DayTemp-12+C_T00);break;
		    }
	      }
	 PlayRespond(C_DIAN);      									//点
}
//input: 分 ------16进制

PlaySpeakMinute(unsigned int MinTemp)      	//*************分
{
       if(MinTemp==0)  PlayRespond(C_ZHENG);     			   //正点
       else  
       {   if((MinTemp/10)>1)   PlayRespond(MinTemp/10+C_T00); //分的十位
           if((MinTemp/10) >0)  PlayRespond(C_T10);     	   //分的十位大于1报,为1不报1
           if((MinTemp%10)!=0)  PlayRespond(MinTemp%10+C_T00); //分的个位不为0则报    
           PlayRespond(C_MIN);     //分
        }       
} 
//input:秒------16进制

PlaySpeakSecond(unsigned int SecondTemp)    //*************秒
{ 	if(SecondTemp == 0)     PlayRespond(SecondTemp + C_T00);   //0秒
	if((SecondTemp/10)>1)   PlayRespond(SecondTemp/10+C_T00);  //秒的十位大于1报,为1只报十 
    if((SecondTemp/10)> 0)  PlayRespond(C_T10);    
    if((SecondTemp%10)!= 0) PlayRespond(SecondTemp%10+C_T00);
    PlayRespond(C_SECOND);
}

//input:1 ----- 报年、月、日
//      0 ----- 报时、分、秒

void SpeakTime(void)
{  
    PlayRespond(C_BELL);         						//报时声
    asm("int irq");    //开中断
    *P_INT_Ctrl=0x0010;	//1kHZ定时中断	
	PlayRespond(C_NOW);          						//现在时刻
	PlaySpeakYear( 2000+timeb.year);	                //年					
  	PlaySpeakMonth(timeb.month);				        //月 	
    PlaySpeakDay(timeb.day);  					    	//日
	PlaySpeakHour(timeb.hour);                        	//时
	PlaySpeakMinute(timeb.minute);					    //分
	asm("int irq");    //开中断
    *P_INT_Ctrl=0x0010;	//1kHZ定时中断
}
*/
void PlayRespond(unsigned int uiSndIndex)
{
	asm("fiq on");    //开中断
	SACM_A2000_Initial(1);							//初始化语音播放,自动方式
	SACM_A2000_Play(uiSndIndex,1,3);	//播放语音
	while((SACM_A2000_Status() & 0x0001) != 0)		//判断当前是否在播放?返回最低位为1则表示当前在播放
	{
		SACM_A2000_ServiceLoop();					//服务程序
		*P_Watchdog_Clear = 0x0001;				
	}
	SACM_A2000_Stop();								//停止
	asm("irq on");    //开中断
    *P_INT_Ctrl&=0x0010;	//1kHZ定时	
	asm("int irq");    //开中断
   *P_INT_Ctrl=0x0010;	//1kHZ定时中断
}
	       

⌨️ 快捷键说明

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