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

📄 timer.c

📁 基于8051的驱动源码.包括STN LCD driver, I2C driver, 键盘(模拟键盘)驱动,串口驱动,中断应用,部分GDI函数
💻 C
字号:

#include "type.h"
#include "reg52.h"
#include "common.h"
#include "timer.h"

static S_BYTE data TimerCount;
volatile S_DATETIME idata dt;
volatile S_WORD data TickCounter;

S_CHAR code DaysOfMon[2][12] = 
{
	31,28,31,30,31,30,31,31,30,31,30,31,       31,29,31,30,31,30,31,31,30,31,30,31
};

S_VOID InitDateTime(S_VOID)
{
	dt.second = 0;
	dt.minute = 0;
	dt.hour   = 0;
	dt.day    = 1;
	dt.mon    = 1;
	dt.year   = 0;
}

S_VOID InitTimer0(S_VOID)
{
	TimerCount = 0;

	TMOD = (TMOD&0xF0)|0x01; //timer 0, mode 1
	TH0 = (65536-50000)/256;//set value: 50ms every time
	TL0 = (65536-50000)%256;
	TR0 = 1;//start
	ET0 =1;
	EA  =1;
}

void Timer0ISR() interrupt 1
{
	bit leap = 0;	

	TH0 = (65536-50000)/256;//set value: 50ms every time
	TL0 = (65536-50000)%256;

	TickCounter++;

	if (++TimerCount < 20)
		return;

	TimerCount = 0;

	if (dt.second < 59)
	{
		dt.second++;
		return;
	}
	dt.second = 0;
	if (dt.minute < 59)
	{
		dt.minute++;
		return;
	}
	dt.minute = 0;
	if (dt.hour < 23)
	{
		dt.hour++;
		return;
	}
	dt.hour   = 0;

	if ((dt.year+BASEYEAR) % 4 == 0) 
	{
		if (((dt.year+BASEYEAR) % 100 != 0) || ((dt.year+BASEYEAR) % 400 == 0))
			leap = 1;
	}

	if (dt.day < DaysOfMon[leap][dt.mon-1])
	{
		dt.day++;
		return;
	}
	dt.day    = 1;
	if (dt.mon < 12)
	{
		dt.mon++;
		return;
	}
	dt.mon    = 1;
	dt.year++;
}

#if (DATETIME_SETUP_BY_MACRO==0)

S_BYTE GetSecond(S_VOID)
{
	return dt.second;
}

S_BYTE GetMinute(S_VOID)
{
	return dt.minute;
}

S_BYTE GetHour(S_VOID)
{
	return dt.hour;
}

S_BYTE GetDay(S_VOID)
{
	return dt.day;
}

S_BYTE GetMon(S_VOID)
{
	return dt.mon;
}

S_BYTE GetYear(S_VOID)
{
	return dt.year;
}

S_VOID SetSecond(S_BYTE second)
{
	dt.second = second;
}

S_VOID SetMinute(S_BYTE minute)
{
	dt.minute = minute;
}

S_VOID SetHour(S_BYTE hour)
{
	dt.hour = hour;
}

S_VOID SetDay(S_BYTE day)
{
	dt.day = day;
}

S_VOID SetMon(S_BYTE mon)
{
	dt.mon = mon;
}

S_VOID SetYear(S_BYTE year)
{
	dt.year = year;
}

#endif

S_WORD GetTimeTick(S_VOID)
{
	S_WORD TimeTick;

	while (TimeTick != TickCounter)
		TimeTick = TickCounter;

	return TimeTick;
}

#pragma disable
S_VOID SetTimeTick(S_WORD TimeTick)
{
	TickCounter = TimeTick;
}

⌨️ 快捷键说明

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