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

📄 clock.c

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 C
字号:
//======================================================
// 文件名称:	Clock.c
// 功能描述:	计时模块,使用2Hz时基中断
// 维护记录:	2006-08-30	v1.0
//======================================================

#include "spce061a.h"

typedef struct STR_CLOCK							// 定义时钟结构体
{
	unsigned int Year;
	unsigned int Mon;
	unsigned int Day;
	unsigned int Hour;
	unsigned int Min;
	unsigned int Sec;
	unsigned int HalfSec;
}CLOCK;

CLOCK Clock = {2006, 1, 1, 0, 0, 0, 0};				// 时钟初始值2006年1月1日0点0分

const unsigned int Month_Day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
													// 每月包含的天数

//=============================================================
// 语法格式:	void Clock_ISR(void);
// 实现功能:	计时模块的2Hz中断服务程序,应在IRQ5_2Hz中断中调用
// 参数:		无
// 返回值:		无
//=============================================================
void Clock_ISR()
{
	if(Clock.HalfSec==0)							// 0.5秒
		Clock.HalfSec = 1;
	else
	{
		Clock.HalfSec = 0;
		Clock.Sec += 1;
		if(Clock.Sec==60)							// 处理秒进位
		{
			Clock.Sec = 0;
			Clock.Min += 1;
			if(Clock.Min==60)						// 处理分进位
			{
				Clock.Min = 0;
				Clock.Hour += 1;
				if(Clock.Hour==24)					// 处理小时进位
				{
					Clock.Hour = 0;
					Clock.Day += 1;					// 处理天进位
					if(Clock.Day > Month_Day[Clock.Mon-1])
					{
						if(Clock.Mon!=2 || (Clock.Year&0x03)!=0 || Clock.Day>29)
						{							// 如果是闰年则2月29日不进位
							Clock.Day = 1;
							Clock.Mon += 1;
							if(Clock.Mon > 12)		// 处理月进位
							{
								Clock.Mon = 1;
								Clock.Year += 1;
							}
						}
					}
				}
			}
		}
	}
}

//=============================================================
// 语法格式:	void Clock_Start(void);
// 实现功能:	开始计时
// 参数:		无
// 返回值:		无
//=============================================================
void Clock_Start()
{
	*P_INT_Ctrl_New |= C_IRQ5_2Hz;
	__asm("IRQ ON");
}


//=============================================================
// 语法格式:	unsigned int Clock_GetYear();
// 实现功能:	查询当前年
// 参数:		无
// 返回值:		当前年
//=============================================================
unsigned int Clock_GetYear()
{
	return Clock.Year;
}

//=============================================================
// 语法格式:	unsigned int Clock_GetMon(void);
// 实现功能:	查询当前月
// 参数:		无
// 返回值:		当前月
//=============================================================
unsigned int Clock_GetMon()
{
	return Clock.Mon;
}

//=============================================================
// 语法格式:	unsigned int Clock_GetDay(void);
// 实现功能:	查询当前日
// 参数:		无
// 返回值:		当前日
//=============================================================
unsigned int Clock_GetDay()
{
	return Clock.Day;
}

//=============================================================
// 语法格式:	unsigned int Clock_GetHour(void);
// 实现功能:	查询当前小时
// 参数:		无
// 返回值:		当前时
//=============================================================
unsigned int Clock_GetHour()
{
	return Clock.Hour;
}

//=============================================================
// 语法格式:	unsigned int Clock_GetMin(void);
// 实现功能:	查询当前分
// 参数:		无
// 返回值:		当前分
//=============================================================
unsigned int Clock_GetMin()
{
	return Clock.Min;
}

//=============================================================
// 语法格式:	unsigned int Clock_GetSec(void);
// 实现功能:	查询当前秒
// 参数:		无
// 返回值:		当前秒
//=============================================================
unsigned int Clock_GetSec()
{
	return Clock.Sec;
}

//=============================================================
// 语法格式:	void Clock_SetYear(unsigned int Year);
// 实现功能:	设置年
// 参数:		Year - 年
// 返回值:		无
//=============================================================
void Clock_SetYear(unsigned int Year)
{
	Clock.Year = Year;
}

//=============================================================
// 语法格式:	void Clock_SetMon(unsigned int Mon);
// 实现功能:	设置月
// 参数:		Mon - 月
// 返回值:		无
//=============================================================
void Clock_SetMon(unsigned int Mon)
{
	Clock.Mon = Mon;
}

//=============================================================
// 语法格式:	void Clock_SetDay(unsigned int Day);
// 实现功能:	设置日
// 参数:		Day - 日
// 返回值:		无
//=============================================================
void Clock_SetDay(unsigned int Day)
{
	Clock.Day = Day;
}

//=============================================================
// 语法格式:	void Clock_SetHour(unsigned int Hour);
// 实现功能:	设置小时
// 参数:		Hour - 时
// 返回值:		无
//=============================================================
void Clock_SetHour(unsigned int Hour)
{
	Clock.Hour = Hour;
}

//=============================================================
// 语法格式:	void Clock_SetMin(unsigned int Min);
// 实现功能:	设置分
// 参数:		Min - 分
// 返回值:		无
//=============================================================
void Clock_SetMin(unsigned int Min)
{
	Clock.Min = Min;
}

//=============================================================
// 语法格式:	void Clock_SetSec(unsigned int Sec);
// 实现功能:	设置秒
// 参数:		Sec - 秒
// 返回值:		无
//=============================================================
void Clock_SetSec(unsigned int Sec)
{
	*P_TimeBase_Clear = 0x01;						// 时基计数器清零
	Clock.Sec = Sec;			
	Clock.HalfSec = 0;								// 半秒计数清零
}

⌨️ 快捷键说明

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