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

📄 show_and_set_time.c

📁 利用SPCE061A单片机、SPR4096模组
💻 C
字号:
//========================================================
//	文件名称:	Show_And_Set_Time.c
//	功能描述:	显示与设置时间
//	维护记录:	2005-12-07	v1.0
//========================================================

#include "spce061a.h"
#include "dig.h"
#include "key.h"

unsigned int uiYear_H = 2;		//初始化时间2005年1月1日
unsigned int uiYear_MH = 0;
unsigned int uiYear_ML = 0;
unsigned int uiYear_L = 5;
unsigned int uiMonth_H = 0;
unsigned int uiMonth_L = 1;
unsigned int uiDay_H = 0;
unsigned int uiDay_L = 1;
unsigned int uiHour_H = 0;		//00时00分00秒
unsigned int uiHour_L = 0;
unsigned int uiMinite_H = 0;
unsigned int uiMinite_L = 0;
unsigned int g_uiSecond_half = 0;

//数码管显示的字模
const unsigned int Data[11] = {0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f,0x0000};

extern unsigned int uiSetflag;
extern unsigned int g_Light;
extern unsigned int uiDisp;

//========================================================
//	语法格式:	void Time_Init(void)
//	实现功能:	初始化IOB2口, 打开2Hz中断
//	参数:		无
//	返回值:	无
//========================================================

void Time_Init(void)
{
	unsigned int uiTemp;
	
	uiTemp = *P_IOB_Dir;		//设置IOB2为高电平输出
	uiTemp |= 0x0004;
	*P_IOB_Dir = uiTemp;
	uiTemp = *P_IOB_Attrib;
	uiTemp |= 0x0004;
	*P_IOB_Attrib = uiTemp;
	uiTemp = *P_IOB_Data;
	uiTemp |= 0x0004;
	*P_IOB_Data = uiTemp;
	
	uiTemp = *P_INT_Ctrl_New;	//开2Hz、4Hz中断
	uiTemp |= C_IRQ5_2Hz;
	uiTemp |= C_IRQ5_4Hz;
	*P_INT_Ctrl_New = uiTemp;
}

//========================================================
//	语法格式:	void Set_Time(void)
//	实现功能:	设置时间函数
//	参数:		无
//	返回值:	无
//========================================================

void Set_Time(void)
{
	unsigned int uiKey;	
	unsigned int uiTemp;
	
	while(1)
	{
		uiKey = Key_Get();
		*P_Watchdog_Clear = 0x0001;
		//调整分钟
		if(uiSetflag == 1)
		{
			if(g_Light == 1)
			{
				DIG_Set(3,Data[uiHour_H]);
				DIG_Set(4,Data[uiHour_L]);
				DIG_Set(5,Data[uiMinite_H]);
				DIG_Set(6,Data[uiMinite_L]);
			}
			if(g_Light == 0)
			{
				DIG_Set(3,Data[uiHour_H]);
				DIG_Set(4,Data[uiHour_L]);
				DIG_Set(5,0);
				DIG_Set(6,0);
			}
			switch(uiKey)
			{
				case KEY6:
					uiSetflag = 2;
					uiKey = 0;
					break;
				case KEY7:
					uiMinite_L++;
					if(uiMinite_L == 10)
					{
						uiMinite_L = 0;
						uiMinite_H++;
						if(uiMinite_H == 6)
							uiMinite_H = 0;
					}
					break;
				case KEY8:
					uiMinite_L--;
					if(uiMinite_L == 0xffff)
					{
						uiMinite_L = 9;
						uiMinite_H--;
						if(uiMinite_H == 0xffff)
							uiMinite_H = 5;
					}									
					break;
				default:
					break;
			}
		}
		
		//调整小时
		if(uiSetflag == 2)		
		{
			if(g_Light == 1)
			{
				DIG_Set(3,Data[uiHour_H]);
				DIG_Set(4,Data[uiHour_L]);
				DIG_Set(5,Data[uiMinite_H]);
				DIG_Set(6,Data[uiMinite_L]);
			}
			if(g_Light == 0)
			{
				DIG_Set(3,0);
				DIG_Set(4,0);
				DIG_Set(5,Data[uiMinite_H]);
				DIG_Set(6,Data[uiMinite_L]);
			}
			switch(uiKey)
			{
				case KEY6:
					uiSetflag = 3;
					uiKey = 0;
					break;
				case KEY7:
					uiHour_L++;
					if(uiHour_L == 10)
					{
						uiHour_L = 0;
						uiHour_H++;
						if((uiHour_H == 2)&&(uiHour_L ==4))
						{
							uiHour_H = 0;
							uiHour_L = 0;
						}
					}
					break;
				case KEY8:
					if((uiHour_H == 0)&&(uiHour_L == 0))
					{
						uiHour_H = 2;
						uiHour_L = 3;
					}
					else
					{
						uiHour_L--;
						if(uiHour_L == 0xffff)
						{
							uiHour_L = 9;
							uiHour_H--;
							if(uiHour_H == 0xffff)
								uiHour_H = 0;
						}
					}
					break;
				default:
					break;
			}
		}
		
		//调整日
		if(uiSetflag == 3)		
		{
			uiTemp = *P_INT_Ctrl_New;	//关闭2Hz中断,不显示秒针
			uiTemp &= 0xfffb;
			*P_INT_Ctrl_New = uiTemp;
			uiTemp = *P_IOB_Buffer;
			uiTemp &= 0xfffb;
			*P_IOB_Data = uiTemp;
				
			if(g_Light == 1)
			{
				DIG_Set(1,Data[uiMonth_H]);
				DIG_Set(2,Data[uiMonth_L]);
				DIG_Set(3,0x0077);
				DIG_Set(4,Data[uiDay_H]);
				DIG_Set(5,Data[uiDay_L]);
				DIG_Set(6,0x007f);
			}
			if(g_Light == 0)
			{
				DIG_Set(1,Data[uiMonth_H]);
				DIG_Set(2,Data[uiMonth_L]);
				DIG_Set(3,0x0077);
				DIG_Set(4,0);
				DIG_Set(5,0);
				DIG_Set(6,0x007f);
			}
			switch(uiKey)
			{
				case KEY6:
					uiSetflag = 4;
					uiKey = 0;
					break;
				case KEY7:
					uiDay_L++;
					if(uiDay_L == 10)
					{
						uiDay_L = 0;
						uiDay_H++;
					}
					if((uiDay_H == 3)&&(uiDay_L == 2))
					{
						uiDay_H = 0;
						uiDay_L = 1;
					}
					break;
				case KEY8:
					uiDay_L--;
					if(uiDay_L == 0xffff)
					{
						uiDay_L = 9;
						uiDay_H--;
						if(uiDay_H == 0xffff)
							uiDay_H = 0;
					}
					if((uiDay_H == 0)&&(uiDay_L == 0))
					{
						uiDay_H = 3;
						uiDay_L = 1;
					}
					break;
				default:
					break;
			}
		}
		
		//调整月
		if(uiSetflag == 4)	
		{
			if(g_Light == 1)
			{
				DIG_Set(1,Data[uiMonth_H]);
				DIG_Set(2,Data[uiMonth_L]);
				DIG_Set(3,0x0077);
				DIG_Set(4,Data[uiDay_H]);
				DIG_Set(5,Data[uiDay_L]);
				DIG_Set(6,0x007f);
			}
			if(g_Light == 0)
			{
				DIG_Set(1,0);
				DIG_Set(2,0);
				DIG_Set(3,0x0077);
				DIG_Set(4,Data[uiDay_H]);
				DIG_Set(5,Data[uiDay_L]);
				DIG_Set(6,0x007f);
			}
			switch(uiKey)
			{
				case KEY6:
					uiSetflag = 5;
					uiKey = 0;
				break;
				case KEY7:
					uiMonth_L++;
					if(uiMonth_L == 10)
					{
						uiMonth_L = 0;
						uiMonth_H++;
					}
					if((uiMonth_H == 1)&&(uiMonth_L == 3))
					{
						uiMonth_H = 0;
						uiMonth_L = 1;
					}
					break;
				case KEY8:
					uiMonth_L--;
					if(uiMonth_L == 0xffff)
					{
						uiMonth_L = 9;
						uiMonth_H--;
						if(uiMonth_H == 0xffff)
							uiMonth_H = 0;
					}
					if((uiMonth_H == 0)&&(uiMonth_L == 0))
					{
						uiMonth_H = 1;
						uiMonth_L = 2;
					}
					break;
				default:
					break;
			}
		}	
		
		//调整年
		if(uiSetflag == 5)	
		{
			if(g_Light == 1)
			{
				DIG_Set(1,0x0040);
				DIG_Set(2,Data[uiYear_H]);
				DIG_Set(3,Data[uiYear_MH]);
				DIG_Set(4,Data[uiYear_ML]);
				DIG_Set(5,Data[uiYear_L]);
				DIG_Set(6,0x0040);
			}
			if(g_Light == 0)
			{
				DIG_Set(1,0x0040);
				DIG_Set(2,0);
				DIG_Set(3,0);
				DIG_Set(4,0);
				DIG_Set(5,0);
				DIG_Set(6,0x0040);
			}
			switch(uiKey)
			{
				case KEY6:
					uiSetflag = 7;
					uiKey = 0;
					break;
				case KEY7:
					uiYear_L++;
					if(uiYear_L == 10)
					{
						uiYear_L = 0;
						uiYear_ML++;
					}
					if(uiYear_ML == 10)
					{
						uiYear_ML = 0;
						uiYear_MH++;
					}
					if(uiYear_MH == 10)
					{
						uiYear_MH = 0;
						uiYear_H++;
					}
					if(uiYear_H ==10)
					{
						uiYear_H = 0;
						uiYear_MH = 0;
						uiYear_ML = 0;
						uiYear_L = 0;
					}
					break;
				case KEY8:
					uiYear_L--;
					if(uiYear_L == 0xffff)
					{
						uiYear_L = 9;
						uiYear_ML--;
						if(uiYear_ML == 0xffff)
						{
							uiYear_ML = 9;
							uiYear_MH--;
							if(uiYear_MH == 0xffff)
							{
								uiYear_MH = 9;
								uiYear_H--;
								if(uiYear_H == 0xffff)
								{
									uiYear_H = 9;
								}
							}
						}
					}
					if((uiYear_H == 0)&&(uiYear_MH == 0)&&(uiYear_ML == 0)&&(uiYear_L == 0))
					{
						uiYear_H = 9;
						uiYear_MH = 9;
						uiYear_ML = 9;
						uiYear_L = 9;
					}
					break;
				default:
					break;
			}
		}
		if(uiSetflag == 7)		//退出设置模式,重新初始化uiSetflag
		{
			uiSetflag = 8;
			uiKey = 0;
			uiTemp = *P_INT_Ctrl_New;	//关闭2Hz中断,不显示秒针
			uiTemp |= C_IRQ5_2Hz;
			*P_INT_Ctrl_New = uiTemp;
			uiDisp = 0;
		}
		if(uiSetflag == 8)
		{
			uiSetflag = 0;
			break;
		}
	}
}

//========================================================
//	语法格式:	void Time_Run(void)
//	实现功能:	更新时间
//	参数:		无
//	返回值:	无
//========================================================

void Time_Run(void)
{
	//更新时分
	if(g_uiSecond_half == 120)
	{
		g_uiSecond_half = 0;
		uiMinite_L++;
	}
	if(uiMinite_L == 10)
	{
		uiMinite_L = 0;
		uiMinite_H++;
	}
	if(uiMinite_H == 6)
	{
		uiMinite_H = 0;
		uiHour_L++;
	}
	if((uiHour_H == 2)&&(uiHour_L == 4))
	{
			uiHour_H = 0;
			uiHour_L = 0;
			uiDay_L++;
	}
	else
	{
		if(uiHour_L == 10)
		{
			uiHour_L = 0;
			uiHour_H++;
		}
	}
	
	//变更日期	
	if((uiDay_H == 3)&&(uiDay_L == 2))
	{
		uiDay_H = 0;
		uiDay_L = 1;
		uiMonth_L++;
	}
	else
	{
		if(uiDay_L == 10)
		{
			uiDay_L = 0;
			uiDay_H++;
		}
	}
	
	//变更月份
	if((uiMonth_H == 1)&&(uiMonth_L == 3))
	{
		uiMonth_H = 0;
		uiMonth_L = 1;
		uiYear_L++;
	}
	else
	{
		if(uiMonth_L == 10)
		{
			uiMonth_L = 0;
			uiMonth_H++;
		
		}
	}
	
	//变更年份	
	if(uiYear_L == 10)
	{
		uiYear_L = 0;
		uiYear_ML++;
	}
	if(uiYear_ML == 10)
	{
		uiYear_ML = 0;
		uiYear_MH++;
	}
	if(uiYear_MH == 10)
	{
		uiYear_MH = 0;
		uiYear_H++;
	}
	if(uiYear_H == 10)
	{
		uiYear_H = 0;
	}
}

⌨️ 快捷键说明

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