?? clock.h
字號:
#ifndef _REAL_TIMER_DS1302
#define _REAL_TIMER_DS1302
/*****************************預定義**************************************/
#define uchar unsigned char
#define uint unsigned int/***************************DS1302管腳配置****************************/
sbit clock_rst = P2^4;
sbit clock_io = P2^3;
sbit clock_sclk= P2^2;
/*********************為了編程方便定義的位變量**********************/
sbit ACC0 = ACC ^ 0;
sbit ACC7 = ACC ^ 7;
#define second_address 0x80//秒地址
#define minute_address 0x82
#define hour_address 0x84
#define day_address 0x86
#define month_address 0x88
#define year_address 0x8C//年地址
/********************************************************************************************
* 函數名稱:Clock_Write_Byte()
* 功 能:向時鐘DS1302寫入一個字節
* 入口參數:temp
* 出口參數:無
*********************************************************************************************/
void Clock_Write_Byte(uchar temp)
{
uchar i;
ACC=temp;
for(i=8; i>0; i--)
{
clock_io = ACC0; //相當于匯編中的 RRC
clock_sclk = 1;
clock_sclk = 0;
ACC = ACC >> 1;
}
}
/********************************************************************************************
* 函數名稱:Clock_Read_Byte()
* 功 能:從時鐘DS1302讀取一個字節
* 入口參數:無
* 出口參數:ACC
*********************************************************************************************/
uchar Clock_Read_Byte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; //相當于匯編中的 RRC
ACC7= clock_io;
clock_sclk = 1;
clock_sclk = 0;
}
return(ACC);
}
/********************************************************************************************
* 函數名稱:Clock_Write_Time()
* 功 能:向時鐘DS1302寫入一個時間
* 入口參數:時間地址
* 出口參數:無
*********************************************************************************************/
void Clock_Write_Time(uchar address, uchar temp)
{
clock_sclk=0;
clock_rst=0;
clock_rst=1;
Clock_Write_Byte(address);
Clock_Write_Byte(temp);
clock_rst=0;
clock_sclk=1;
}
/********************************************************************************************
* 函數名稱:Clock_Read_Time()
* 功 能:從時鐘DS1302讀出一個時間
* 入口參數:時間地址
* 出口參數:時間數據
*********************************************************************************************/
uchar Clock_Read_Time(uchar address)
{
uchar temp=0;
clock_sclk=0;
clock_rst=0;
clock_rst=1;
Clock_Write_Byte( address|0x01 );
temp=Clock_Read_Byte();
clock_rst=0;
clock_sclk=1;
return(temp);
}
/********************************************************************************************
* 函數名稱:Clock_Initial()
* 功 能:時鐘初始化
* 入口參數:時間地址 時間數據
* 出口參數:
*********************************************************************************************/
void Clock_Initial(uchar *clock_time )
{
Clock_Write_Time(0x8e,0x00); //WP=0 寫操作
// *clock_time &= 0x7f; //最高位為 0 時鐘芯片工作
Clock_Write_Time( second_address, * clock_time ); //秒
clock_time ++;
Clock_Write_Time( minute_address, * clock_time ); //分
clock_time ++;
Clock_Write_Time( hour_address, * clock_time ); //時
clock_time ++;
Clock_Write_Time( day_address, * clock_time ); //日
clock_time ++;
Clock_Write_Time( month_address, * clock_time); //月
clock_time ++;
Clock_Write_Time( year_address, * clock_time ); //年
Clock_Write_Time( 0x8e,0x80); //WP=1 寫保護
}
/********************************************************************************************
* 函數名稱:Clock_Fresh( uchar * clock_time )
* 功 能:從時鐘DS1302讀出時間
* 入口參數:時間地址
* 出口參數:時間數據
*********************************************************************************************/
void Clock_Fresh(uchar * clock_time )
{
* clock_time = Clock_Read_Time( second_address ); //讀秒
clock_time ++;
* clock_time = Clock_Read_Time( minute_address ); //讀分
clock_time ++;
* clock_time = Clock_Read_Time( hour_address ); //讀時
clock_time ++;
* clock_time = Clock_Read_Time( day_address ); //讀日
clock_time ++;
* clock_time = Clock_Read_Time( month_address ); //讀月
clock_time ++;
*clock_time = Clock_Read_Time( year_address ); //讀年
}
/********************************************************************************/
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -