亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? timer.c

?? 程序概述: 這是個(gè)具體產(chǎn)品程序
?? C
字號:
// Copyright (c)2005 - 2006 by Laser Electronics, All Rights Reserved.
/*----------------------------------------------------------------------------+
|  File Name:  Timer.c, v1.0.1                                                |
|  Author:                                                                    |
|  Date:                                                                      |
+-----------------------------------------------------------------------------+
|  Description: 聯(lián)網(wǎng)型智能樓宇對講系統(tǒng) -- 管理中心機(jī)實(shí)時(shí)時(shí)鐘驅(qū)動程序          |
|               器件選擇 -- STC89C58RD+, PQFP-44                              |
|               時(shí)鐘頻率 -- 24.000 MHz                                        |
+-----------------------------------------------------------------------------+

/*----------------------------------------------------------------------------+
| Include files                                                               |
+----------------------------------------------------------------------------*/
#include "Main.h"
#include "Timer.h"
#include "LCD.h"

/*----------------------------------------------------------------------------+
| Type Definition & Macro                                                     |
+----------------------------------------------------------------------------*/
// 與DS1302通信的管腳
#define SCLK    P3_7
#define IO      P3_6
#define nRST    P3_5

/*----------------------------------------------------------------------------+
| Global Variables                                                            |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| Internal Variables                                                          |
+----------------------------------------------------------------------------*/

BYTE cSecond;                   // 0.01秒,初始為0,每次系統(tǒng)滴答一下則加1,加到60以后則向秒進(jìn)位
idata t_Time Time;              // 保存當(dāng)前的時(shí)間
idata t_Time TempTime;          // 臨時(shí)保存時(shí)間的變量

idata BYTE Hour2Minute;         // 小時(shí)和分鐘之間的那個(gè)冒號, 有時(shí)為冒號, 有時(shí)不顯示, 具體在TickCountAdd()中改變

// 定義各個(gè)月份的一個(gè)月的天數(shù),按照BCD碼來排列
code BYTE MonthTable[] = {0x00, 0x31, 0x28, 0x31, 0x30, 0x31, 0x30, 0x31, 0x31, 0x30, 
						  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x30, 0x31};
/*----------------------------------------------------------------------------+
| System Foundation Routines                                                  |
+----------------------------------------------------------------------------*/
// 
// 復(fù)位DS1302
void DS1302_Reset(void)
{
	SCLK = 0;      // SCLK must be at a logic 0 when nRST is driven to a logic 1 state
	nRST = 0;
	nRST = 1;
}

// 
// 向DS1302發(fā)送一個(gè)字節(jié)的數(shù)據(jù)
// nData: 需要寫入的數(shù)據(jù)
void DS1302_WriteByte(BYTE nData)
{
	BYTE i;

	// 最低位在前, 上升沿寫入數(shù)據(jù)
	for (i=0; i<8; i++)
	{
		IO = nData & 0x01;
		nData >>= 1;
		SCLK = 0;
		SCLK  = 1;
	}
	IO = 1;
}

// 
// 從DS1302讀取一個(gè)字節(jié)的數(shù)據(jù)
// 返回: 讀到的數(shù)據(jù)
BYTE DS1302_ReadByte(void)
{
	BYTE i;
	BYTE temp;

	temp = 0x00;

	// 最低位在前, 下降沿輸出數(shù)據(jù)
	for (i=0; i<8; i++)
	{
		temp >>= 1;
		SCLK  = 1;
		SCLK  = 0;
		if (IO)
			temp |= 0x80;
	}
	return temp;
}
/*
// 
// 向DS1302發(fā)送一個(gè)字節(jié)的數(shù)據(jù)
// Addr: 需要讀取的寄存器的地址, 只有最低5位有效
// nData: 需要寫入的數(shù)據(jù)
BYTE DS1302_ReadData(BYTE Addr)
{
	BYTE temp;

	Addr <<= 1;
	Addr &= 0x3E;   // 保留bit1~bit5, 寄存器地址數(shù)據(jù)
	Addr |= 0x81;   // nCK, nWR
	SCLK  = 0;      // SCLK must be at a logic 0 when nRST is driven to a logic 1 state
	nRST  = 0;
	nRST  = 1;

	// 地址
	DS1302_WriteByte(Addr);
	// 數(shù)據(jù)
	temp = DS1302_ReadByte();

	SCLK = 0;
	nRST = 0;

	nRST = 1;
	SCLK = 1;
	IO = 0;
	SCLK = 0;
	nRST = 0;

	return temp;
}
*/ 

// 
// 向DS1302發(fā)送一個(gè)字節(jié)的數(shù)據(jù)
// Addr: 需要寫入的寄存器的地址, 只有最低5位有效
// nData: 需要寫入的數(shù)據(jù)
void DS1302_WriteData(BYTE Addr, BYTE nData)
{
	Addr <<= 1;
	Addr &= 0x3E;   // 保留bit1~bit5, 寄存器地址數(shù)據(jù)
	Addr |= 0x80;   // nCK, nWR
	SCLK  = 0;      // SCLK must be at a logic 0 when nRST is driven to a logic 1 state
	nRST  = 0;
	nRST  = 1;

	// 地址
	DS1302_WriteByte(Addr);
	// 數(shù)據(jù)
	DS1302_WriteByte(nData);

	SCLK = 0;
	nRST = 0;

	nRST = 1;
	SCLK = 1;
	IO = 0;
	SCLK = 0;
	nRST = 0;
}


/*----------------------------------------------------------------------------+
| System Initialization Routines                                              |
+----------------------------------------------------------------------------*/
// 
// 初始化實(shí)時(shí)時(shí)鐘
void InitRealTimer(void)
{
	nRST = 0;            // 平常nRST保持低電平

	Hour2Minute = ':';
	cSecond = 0x00;

	DS1302_WriteData(0x07, 0x00);       // 清除寫保護(hù)位
	DS1302_WriteData(0x08, 0xAB);       // 選擇電池充電模式, 高4位始終為1010, 選擇2個(gè)二極管串聯(lián), 8KOhm限流電阻

	DS1302_ReadTime();
}

/*----------------------------------------------------------------------------+
| General Subroutines                                                         |
+----------------------------------------------------------------------------*/
// 
// 系統(tǒng)每10ms產(chǎn)生一次中斷,每次中斷之后都調(diào)用這個(gè)函數(shù)使時(shí)間數(shù)據(jù)增加0.01秒
void TickCountAdd(void)
{
	cSecond ++;
	if (cSecond == 50)                  // 0.5秒, 更新時(shí)間顯示的冒號
	{
		Hour2Minute = ' ';              // 半秒時(shí)候顯示空字符
		// 正常情況下每0.5秒更新一次顯示的時(shí)間
		SendMessage(MSG_TIME_DISPLAY);
	}
	else if (cSecond == 100)            // 定時(shí)時(shí)間到了1秒,從DS1302時(shí)鐘芯片中讀取時(shí)間并顯示
	{
		cSecond = 0;
		Hour2Minute = ':';
		DS1302_ReadTime();
		SendMessage(MSG_TIME_DISPLAY);
	}
}


// 
// 從時(shí)鐘芯片DS1302中讀取當(dāng)前時(shí)間
void DS1302_ReadTime(void)
{
	// Burst Mode Read
	DS1302_Reset();
	DS1302_WriteByte(0xBF);             // clock burst read (eight registers) 
	Time.Second = DS1302_ReadByte();    // Second
	Time.Minute = DS1302_ReadByte();
	Time.Hour  = DS1302_ReadByte();
	Time.Date  = DS1302_ReadByte();     //date
	Time.Month = DS1302_ReadByte();
	DS1302_ReadByte();                  // day of week
	Time.Year  = DS1302_ReadByte();
	DS1302_ReadByte();                  // must read control register in burst mode 

	SCLK = 0;
	nRST = 0;

	nRST = 1;
	SCLK = 1;
	IO = 0;
	SCLK = 0;
	nRST = 0;

/*
	Time.Second = DS1302_ReadData(0x00);
	Time.Minute = DS1302_ReadData(0x01);
	Time.Hour   = DS1302_ReadData(0x02);
	Time.Date   = DS1302_ReadData(0x03);
	Time.Month  = DS1302_ReadData(0x04);
	Time.Year   = DS1302_ReadData(0x06);
*/
}

// 
// 將時(shí)間寫入到DS1302時(shí)鐘芯片中
void DS1302_WriteTime(void)
{
	DS1302_WriteData(0x00, 0);          // Second
	DS1302_WriteData(0x01, Time.Minute);
	DS1302_WriteData(0x02, Time.Hour);
	DS1302_WriteData(0x03, Time.Date);
	DS1302_WriteData(0x04, Time.Month);
	DS1302_WriteData(0x06, Time.Year);
}

// 
// 更新時(shí)間顯示緩沖, 保存在一個(gè)16位的字符數(shù)組當(dāng)中
void UpdateTimeBuffer(BYTE *Dest)
{
	// 格式: "20xx-yy-zz AA:BB"

	// 年份, 4位數(shù)
	Dest[0] = 0x02+0x30;
	Dest[1] = 0x00+0x30;
	Dest[2] = (Time.Year >> 4) | 0x30;
	Dest[3] = (Time.Year&0x0F) | 0x30;
	Dest[4] = '-';
	// 月份, 2位數(shù)
	Dest[5] = (Time.Month >> 4) | 0x30;
	Dest[6] = (Time.Month&0x0F) | 0x30;
	Dest[7] = '-';
	// 日期, 2位數(shù)
	Dest[8] = (Time.Date >> 4) | 0x30;
	Dest[9] = (Time.Date&0x0F) | 0x30;
	Dest[10] = 0x20;   // 空格
	// 小時(shí), 2位數(shù)
	Dest[11] = (Time.Hour >> 4) | 0x30;
	Dest[12] = (Time.Hour&0x0F) | 0x30;
	Dest[13] = Hour2Minute;
	// 分鐘, 2位數(shù)
	Dest[14] = (Time.Minute >> 4) | 0x30;
	Dest[15] = (Time.Minute&0x0F) | 0x30;
}

/*----------------------------------------------------------------------------+
| 有關(guān)日歷的函數(shù)
+----------------------------------------------------------------------------*/

// 
// 修改時(shí)間并且將新的時(shí)間寫入到時(shí)鐘芯片DS1302中
// pDate: 一個(gè)指向保存有時(shí)間信息的字符串的指針,依次為年、月、日、小時(shí)、分、秒
BOOL ModifyTime(BYTE *pDate)
{
	// 先判斷輸入是否正確
	if (CheckBufferTime(pDate))
	{
		// 將得到的時(shí)間寫入到DS1302中
		Time.Year   = TempTime.Year;
		Time.Month  = TempTime.Month;
		Time.Date   = TempTime.Date;
		Time.Hour   = TempTime.Hour;
		Time.Minute = TempTime.Minute;
		Time.Second = 0x00;
	
		DS1302_WriteTime();
		return TRUE;
	}
	
	return FALSE;
}

// 
// 判斷緩沖區(qū)中輸入的時(shí)間是否正確
BOOL CheckBufferTime(BYTE *pDate)
{
	BYTE temp;

	// 年
	temp  = pDate[0] << 4;
	temp += pDate[1];
	if (temp > 0x99)
	{
		return FALSE;
	}
	TempTime.Year = temp;

	// 月
	temp  = pDate[2] << 4;
	temp += pDate[3];
	if ((temp > 0x12) || (temp == 0x00))
	{
		return FALSE;
	}
	TempTime.Month = temp;

	// 日
	temp  = pDate[4] << 4;
	temp += pDate[5];
	if ((temp > MonthTable[TempTime.Month]) || (temp == 0x00))
	{
		if (TempTime.Month == 0x02) // 如果是閏年的二月, 則又多出一天
		{
			if (IsLeapYear(TempTime.Year))
			{
				if (temp > 0x29)   // 閏年二月, 超過了29天
				{
					return FALSE;
				}
			}
			else
			{
				return FALSE;
			}
		}
		else
		{
			return FALSE;
		}
	}
	TempTime.Date = temp;

	// 小時(shí)
	temp  = pDate[6] << 4;
	temp += pDate[7];
	if (temp > 0x24)
	{
		return FALSE;
	}
	TempTime.Hour = temp;

	// 分
	temp  = pDate[8] << 4;
	temp += pDate[9];
	if (temp > 0x59)
	{
		return FALSE;
	}
	TempTime.Minute = temp;

	return TRUE;
}

//
// 判斷是否是閏年, 閏年2月為29天, 這一年為366天
// year: BCD碼表示的年份的低2位, 如0x15表示2015年
BOOL IsLeapYear(BYTE year)
{
	UINT temp;

	temp = year & 0xF0; // 年份的十位數(shù)
	temp *= 10;
	temp += (year & 0x0F);
	temp += 2000;

	if ((!(temp % 4) && (temp % 100)) || !(temp % 400)) 
	{
		return TRUE;
	}
	return FALSE;
}

/*----------------------------------------------------------------------------+
| End of source file                                                          |
+----------------------------------------------------------------------------*/
/*------------------------ Nothing Below This Line --------------------------*/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一本二本av| 久久九九久精品国产免费直播| 午夜视频一区二区| 国产亚洲短视频| 欧美日韩一区二区三区在线看| 激情成人综合网| 一区二区三区四区中文字幕| 欧美成人欧美edvon| 91蜜桃网址入口| 国内精品在线播放| 午夜av一区二区| 国产精品色眯眯| 欧美成人综合网站| 欧美中文字幕久久| 成人av免费网站| 久久se精品一区二区| 一二三四区精品视频| 欧美国产97人人爽人人喊| 日韩亚洲欧美在线| 欧美亚洲精品一区| av色综合久久天堂av综合| 久久99精品国产麻豆婷婷洗澡| 亚洲一线二线三线视频| 国产精品日韩成人| 欧美α欧美αv大片| 欧美日韩高清一区| 在线一区二区观看| 99久久婷婷国产综合精品 | 91麻豆精品国产91| 91视频com| 成人小视频在线观看| 毛片不卡一区二区| 免费在线成人网| 五月天中文字幕一区二区| 尤物视频一区二区| 亚洲视频一区二区在线| 中文字幕精品—区二区四季| 精品99一区二区三区| 欧美一区二区三区小说| 欧美乱熟臀69xxxxxx| 在线免费精品视频| 在线一区二区观看| 在线精品视频一区二区三四| 一本色道久久综合亚洲aⅴ蜜桃| a在线播放不卡| 99久久久精品| 99国产精品国产精品久久| 99久久精品免费看国产| a级精品国产片在线观看| www.欧美亚洲| 成av人片一区二区| 99精品久久久久久| 99re成人在线| 欧洲一区二区三区在线| 欧美日韩一区二区欧美激情| 欧美日韩午夜影院| 538在线一区二区精品国产| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 亚洲一区免费在线观看| 一区二区欧美精品| 亚洲123区在线观看| 日韩二区在线观看| 秋霞av亚洲一区二区三| 经典一区二区三区| 国产成人99久久亚洲综合精品| 国产成人精品亚洲777人妖 | 国产精品性做久久久久久| 国产精品一区二区久久不卡| 成人av电影免费在线播放| 99国产精品久久久久久久久久久| 欧洲精品在线观看| 91精品久久久久久久91蜜桃| 久久婷婷色综合| 中文字幕永久在线不卡| 一区二区三区久久| 蜜桃传媒麻豆第一区在线观看| 国产综合一区二区| 一本在线高清不卡dvd| 欧美浪妇xxxx高跟鞋交| 欧美xxxx在线观看| 国产精品福利在线播放| 亚洲亚洲精品在线观看| 久久99国产精品麻豆| 成人福利视频网站| 欧美精品日韩一区| 久久久亚洲高清| 亚洲精品成人a在线观看| 日韩二区三区四区| av在线播放成人| 日韩一区二区三| 国产精品乱人伦中文| 视频一区在线视频| 成人黄色在线看| 在线综合视频播放| 国产精品久久综合| 日本女人一区二区三区| av午夜精品一区二区三区| 91精品国产综合久久香蕉的特点 | 久久久久久久久97黄色工厂| 一区二区视频在线| 国模无码大尺度一区二区三区| 色综合色综合色综合| 日韩精品一区二区三区老鸭窝| 椎名由奈av一区二区三区| 麻豆91在线观看| 在线观看精品一区| 久久久精品综合| 日韩精品乱码av一区二区| bt7086福利一区国产| 精品日韩在线观看| 香蕉影视欧美成人| www.亚洲国产| 久久天天做天天爱综合色| 亚洲电影第三页| 一本到三区不卡视频| 欧美极品xxx| 六月丁香婷婷色狠狠久久| 欧美午夜视频网站| 国产精品久久久久久久久果冻传媒 | 久久99国产精品免费网站| 欧美日韩三级视频| 亚洲伦理在线精品| av亚洲精华国产精华| 久久久精品国产99久久精品芒果| 琪琪一区二区三区| 91精品麻豆日日躁夜夜躁| 亚洲一区二区三区四区在线| 91麻豆福利精品推荐| 中文字幕欧美日韩一区| 国产精品91一区二区| 精品国产制服丝袜高跟| 日本中文在线一区| 欧美久久免费观看| 亚洲二区视频在线| 欧美最猛黑人xxxxx猛交| 中文字幕在线观看不卡视频| 高清国产午夜精品久久久久久| 精品国产区一区| 黄一区二区三区| 欧美成人video| 久久99精品一区二区三区三区| 日韩一卡二卡三卡国产欧美| 五月天亚洲精品| 欧美一区二区三区在线视频| 日韩av一区二| 日韩精品专区在线影院观看 | 久久精品国产精品亚洲红杏| 日韩一区国产二区欧美三区| 日韩影院精彩在线| 日韩一级精品视频在线观看| 免费av网站大全久久| 日韩欧美成人午夜| 韩国女主播成人在线| 久久亚洲精品国产精品紫薇| 国产真实乱对白精彩久久| 久久久欧美精品sm网站| 福利一区二区在线| 亚洲婷婷综合色高清在线| 色婷婷激情久久| 午夜激情一区二区三区| 日韩欧美一二三| 欧美亚洲动漫精品| 舔着乳尖日韩一区| 精品免费视频.| 国产91综合一区在线观看| 综合激情网...| 欧美日韩在线三级| 激情六月婷婷综合| 国产精品理伦片| 欧美日韩久久一区| 激情综合五月婷婷| 亚洲手机成人高清视频| 欧美日韩国产精品成人| 黄页网站大全一区二区| 中文字幕在线免费不卡| 欧美剧在线免费观看网站| 精品在线播放午夜| 自拍偷拍欧美精品| 91精品国产欧美一区二区18| 国产盗摄精品一区二区三区在线| 亚洲日本成人在线观看| 91精品国产综合久久福利| 国产成人免费视频| 亚洲图片一区二区| 精品国产一区二区三区忘忧草| 91亚洲精品久久久蜜桃网站| 日韩高清不卡在线| 国产精品国产三级国产专播品爱网 | 精品久久人人做人人爽| 99免费精品在线| 老司机免费视频一区二区| 中文字幕中文字幕在线一区| 欧美精品免费视频| 波波电影院一区二区三区| 日本不卡免费在线视频| 成人免费小视频| 精品国产髙清在线看国产毛片| 色嗨嗨av一区二区三区| 国产精品亚洲一区二区三区妖精| 亚洲成精国产精品女|