📄 datetime.c
字号:
/*
*******************************************************************************
* The real-time kernel "rtCell" *
* Copyright 2005 taowentao, allrights reserved. *
* File : DateTime.c *
* By : taowentao 2005-01-24 2005-08-27 *
*******************************************************************************
*/
#if !defined(MCCLIB_H)
#include "giCell\Engine\mcCLib.h"
#endif
/*
*******************************************************************************
* *
*******************************************************************************
*/
static int epoch = 1900;
/* *******************************************************************************
* *
*******************************************************************************
*/#define RTC_SECONDS (0)#define RTC_MINUTES (2)#define RTC_HOURS (4)#define RTC_DAY_OF_WEEK (6)#define RTC_DAY_OF_MONTH (7)#define RTC_MONTH (8)#define RTC_YEAR (9)#define RTC_CONTROL (11)#define RTC_DM_BINARY (0x04)#define BCD2BIN(n) ((n >> 4) * 10 + (n & 0x0F))/* *******************************************************************************
* *
*******************************************************************************
*/typedef struct Fd32Date{ WORD Year; BYTE Day; BYTE Mon; BYTE weekday;}rt_date_t;typedef struct Fd32Time{ BYTE Min; BYTE Hour; BYTE Hund; BYTE Sec;}rt_time_t;/* *******************************************************************************
* *
*******************************************************************************
*/ BYTE cmos_read(BYTE addr){ out_byte(0x70, addr); return in_byte(0x71);}int time_read(rt_time_t *t){ BYTE ctrl; if (t == 0) { return -1; } t->Hund = 0; /* For the moment... */ t->Sec = cmos_read(RTC_SECONDS); t->Min = cmos_read(RTC_MINUTES); t->Hour = cmos_read(RTC_HOURS); ctrl = cmos_read(RTC_CONTROL); if (!(ctrl & RTC_DM_BINARY)) { /* Convert from bcd to binary... */ t->Sec = BCD2BIN(t->Sec); t->Min = BCD2BIN(t->Min); t->Hour = BCD2BIN(t->Hour); } return 1;}int date_read(rt_date_t *d){ BYTE ctrl; if (d == 0) { return -1; } d->weekday = cmos_read(RTC_DAY_OF_WEEK); d->Day = cmos_read(RTC_DAY_OF_MONTH); d->Mon = cmos_read(RTC_MONTH); d->Year = cmos_read(RTC_YEAR); ctrl = cmos_read(RTC_CONTROL); if (!(ctrl & RTC_DM_BINARY)) { /* Convert from bcd to binary... */ d->Day = BCD2BIN(d->Day); d->Mon = BCD2BIN(d->Mon); d->Year = BCD2BIN(d->Year); } d->Year += epoch - 1900; if (d->Year <= 69) { d->Year += 100; } d->Year += 1900; return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -