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

📄 time.c

📁 凌阳单片机实现时钟并语音报时的源代码 很有趣 当毕业设计不错
💻 C
字号:
#include "hardware.h"
#include "Clock_Time.h"
extern 		int G_TimeCount;                        // 1秒计数
extern		int G_SecTime;							// 2MS 计数
extern		int G_KeyCount;							// 按键次数计数
extern		int G_Sec ;                           	// 秒计数
extern		int G_SecH ;							// 秒显示的高位
extern		int G_SecL ;							// 秒显示的低位
extern		int G_Step ;							// 程序运行的步骤
extern		int G_MiunteH ;							// 分钟显示高位
extern		int G_MiunteL ;							// 分钟显示低位
extern		int G_Miunte ;							// 分钟计数
extern		int G_HourH ;							// 小时显示高位
extern		int G_HourL ;							// 小时显示低位
extern		int G_Hour ;							// 小时计数	
extern		int G_Destine_MiunteH ;
extern		int G_Destine_MiunteL ;
extern		int G_Destine_Miunte ;
extern		int G_Destine_Hour ;
extern		int G_Destine_HourH ;
extern		int G_Destine_HourL ;
extern		int G_Key_Vaule;
extern		int	G_KeyCount3;

extern		Key_Down();								// 子函数是否有键按下
//====================================================
//函数: Time()
//语法:void Time(void)
//描述:时钟显示时、分、秒
//参数:无
//返回:无
//====================================================
void 	Time(void)
{
	G_SecTime = 0;			
	while(G_SecTime != 1)					// 2MS 是否到了
	{;}										// 2MS没有到等待
	G_SecTime = 0;				
							
	Clear_WatchDog();						// 清看们狗	
	if ( G_TimeCount == 500)
	{
		G_Sec++;							// 1秒到了,则秒计数
		if (G_Sec == 60)
		{
			Clear_WatchDog();
			G_Miunte++;						// 1分钟到,分钟计数
			G_SecH = 0;						
			G_SecL = 0;		
			G_Sec = 0;						// 秒显示计数清零
								
			if (G_Miunte == 60)
			{
				Clear_WatchDog();
				G_Hour ++;					// 1小时到,小时计数
				G_Miunte = 0;				
				G_MiunteH = 0;				// 分钟显示计数清零
				G_MiunteL = 0;
				G_Sec = 0;
					
			   	if (G_Hour == 24)
				{
					Clear_WatchDog();
					G_Hour = 0;				// 1天到,清分,秒,小时的计数、显示
					G_HourH = 0;
					G_HourL = 0;
					G_Miunte = 0;			// 清分,秒,小时的计数、显示
					G_MiunteH = 0;
					G_MiunteL = 0;
					G_Sec = 0;
					G_SecH = 0;
					G_SecL = 0;															
				}
			}
		}																					
		G_TimeCount = 0;					// 清计数
	}			
		
	switch(G_Step)
	{					
		case 5:																																															
			if (G_Sec > 9)					// 秒显示高低位分解		
			{
				G_SecH = (G_Sec / 10);      // 高位
				G_SecL = (G_Sec % 10);		// 低位									
			}
			else	
				G_SecL = G_Sec;			 	
				G_Step = 6;
			break;	
		case 6:	
			if (G_Miunte>9)					// 分钟显示高低位分解
			{					
				G_MiunteH = (G_Miunte / 10);
				G_MiunteL = (G_Miunte % 10);						
			}
			else	
				G_MiunteL = G_Miunte;									
				G_Step = 7;
			break;
		case 7:
			if (G_Hour>9)					// 小时显示高低位分解
			{					
				G_HourH = (G_Miunte / 10);
				G_HourL = (G_Miunte % 10);						
			}
			else	
				G_HourL = G_Hour;												
				G_Step = 8;
			break;
		case 8:	
			Clear_WatchDog();
			F_Show(6,G_SecL);				// 显示秒低位
			G_Step = 9;
			break;
		case 9:
			F_Show(4,G_MiunteL);			// 显示分钟低位
			G_Step = 10;
			break;
		case 10:
			F_Show(2,G_HourL);				// 显示小时低位
			G_Step = 11;
			break;	
		case 11:	
			Clear_WatchDog();
			F_Show(5,G_SecH);				// 显示秒高位
			G_Step = 12;
			break;
		case 12:
			F_Show(3,G_MiunteH);			// 显示分钟高位
			G_Step = 13;
			break;
		case 13:
			F_Show(1,G_HourH);				// 显示小时高位
			G_Step = 5;
			break;				
		default:
			break;		
	}																						
}
//====================================================
//函数:	Key2_Vaule()
//语法:int Key2_Vaule()
//描述:按键KEY2的计时功能
//参数:无
//返回:无
//====================================================
int Key2_Vaule()
{
	int I_Step,KK;
	G_TimeCount = 0;	
	G_SecTime = 0;
	KK = 0;
	while (G_KeyCount == 1)					// 按键KEY2 1次计时开始
	{	
		Key_Down();							// 是否有键按下	
		Time();								// 时间计算并实时显示

		if (KK == 0)						// 是否闹铃
		{		
			if(G_Destine_HourH == 0)		// 开始的时间闹钟是不响的
			if(G_Destine_HourL == 0)
			if(	G_Destine_MiunteH == 0)
			if(	G_Destine_MiunteL == 0)
			{			
				KK = 0;	
			}					
			else
			{
				if(G_Destine_HourH == 	G_HourH)
				if(G_Destine_HourL == 	G_HourL)
				if(	G_Destine_MiunteH == G_MiunteH)
				if(	G_Destine_MiunteL == G_MiunteL)	
				{
					SACM_A2000_Initial(1);				// 比较时、分到就播放声音
					SACM_A2000_Play(0,3,3);	
					while(SACM_A2000_Status()&0x01)
					{
						SACM_A2000_ServiceLoop();		// 播放
					}	
					G_TimeCount = 0;	
					G_SecTime = 0;
					KK = 1;
					SP_INT_TIMEA();						// 开中断									
				}
			}					
		}
	}
	while (G_KeyCount == 2)					// KEY2次数为2显示暂停的时间
	{	
		Key_Down();							// 是否有键按下
		switch(I_Step)
		{	
			case 0:
				Clear_WatchDog();
				F_Show(6,G_SecL);			// 第一步显示秒的低位
				I_Step = 1;
				break;
			case 1:
				Clear_WatchDog();      		// 第二步显示秒的高位
				F_Show(5,G_SecH);
				I_Step = 2;
				break;
			case 2:
				Clear_WatchDog();
				F_Show(4,G_MiunteL); 		// 第三步显示分钟的低位
				I_Step = 3;
				break;
			case 3:
				Clear_WatchDog();
				F_Show(3,G_MiunteH);		// 第四次显示分钟的高位
				I_Step = 4;
				break;
			case 4:
				Clear_WatchDog();
				F_Show(2,G_HourL);			// 第五次显示小时的低位
				I_Step = 5;
				break;
			case 5:
				Clear_WatchDog();
				F_Show(1,G_HourH);			// 第六次显示小时的高位
				I_Step = 0;					// 步骤为第一次,循环
				break;
			default:
				break;				
			}
		}
			
	while (G_KeyCount == 3)					// KEY2次数3次的时候显示全0
	{
		SP_Export(Port_IOB_Data ,0x7f3f);
		G_KeyCount = 0;
		G_Sec = 1;                           // 秒计数
	 	G_SecH = 0;							 // 秒显示的高位
		G_SecL = 0;							 // 秒显示的低位
		G_MiunteH = 0;						 // 分钟显示高位
	 	G_MiunteL = 0;						 // 分钟显示低位
		G_Miunte = 0;						 // 分钟计数
		G_HourH = 0;						 // 小时显示高位
		G_HourL = 0;						 // 小时显示低位
		G_Hour = 0;							 // 小时计数
	}	
}


//====================================================
//函数: Alarm_Clock()
//语法:void Time(void)
//描述:时钟的预定
//参数:无
//返回:无
//====================================================
int Alarm_Clock()				
{		
	int i,j,k;				
	j = 0;
	k = 0;		
	i = G_Key_Vaule;	
	while(i == 3 )
	{
		Key_Down();		
		switch(G_KeyCount3)
		{
			Key_Down();
			Clear_WatchDog();
			case 1:
				Key_Down();
				if (G_Key_Vaule == 1)
				{
					G_Key_Vaule = 0;
					if (G_Destine_Miunte == 59)	
						{
							G_Destine_Miunte = 0;
							G_Destine_MiunteH = 0;	
						}			
					else G_Destine_Miunte ++;
					Clear_WatchDog();
				}
				else if (G_Key_Vaule == 2)
				{
					G_Key_Vaule = 0;
					if (G_Destine_Miunte == 0)	G_Destine_Miunte = 59;					
					else G_Destine_Miunte --;
					Clear_WatchDog();
				}
				
				if (G_Destine_Miunte  > 9)					// 秒显示高低位分解		
				{
					G_Destine_MiunteH = (G_Destine_Miunte / 10);      // 高位
					G_Destine_MiunteL = (G_Destine_Miunte % 10);		// 低位	
					Clear_WatchDog();								
				}
				else	
					G_Destine_MiunteL = G_Destine_Miunte;			 					
				if ( j ==0)
				{
					F_Show(4,G_Destine_MiunteL);		// 第一步显示秒的低位
					j = 1;
				}
				else if (j == 1)
				{
					F_Show(3,G_Destine_MiunteH);		// 第一步显示秒的低位
					j = 0;
				}
				
				
				Clear_WatchDog();
				break;
			case 2:
				Key_Down();
				if (G_Key_Vaule == 1)
				{
					G_Key_Vaule = 0;
					if (G_Destine_Hour == 24)	
					{
						G_Destine_Hour = 0;
						G_Destine_HourH = 0;	
					}			
					else G_Destine_Hour ++;
						Clear_WatchDog();
				}
				else if (G_Key_Vaule == 2)
				{
					G_Key_Vaule = 0;
					if (G_Destine_Hour == 0)	G_Destine_Hour = 24;					
					else G_Destine_Hour --;
					Clear_WatchDog();
				}
				
				if (G_Destine_Hour  > 9)					// 秒显示高低位分解		
				{
					G_Destine_HourH = (G_Destine_Hour / 10);      // 高位
					G_Destine_HourL = (G_Destine_Hour % 10);		// 低位	
					Clear_WatchDog();								
				}
				else	
					G_Destine_HourL = G_Destine_Hour;	
				if (k == 0)
				{
					F_Show(2,G_Destine_HourL);		// 第一步显示秒的低位	
					k = 1;
				}		 					
				else if (k == 1)
				{
					F_Show(1,G_Destine_HourH);		// 第一步显示秒的低位
					k = 0;
				}
				Clear_WatchDog();					
				break;		
			default:
				G_KeyCount3 = 0;
				G_Key_Vaule = 0;
				i = 0;
				Key_Down();
				SP_Export(Port_IOB_Data ,0x7f3f);			// 显示全0
				Clear_WatchDog();
				break;	 
		}			
	}	
}
		
	

⌨️ 快捷键说明

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