?? ds1302.c
字號:
#include "DS1302.h"
//延時函數
void DS1302_Delay(unsigned int dtime)
{
unsigned int temp;
for(temp=0;temp<dtime;temp++);
}
//DS1302復位
void DS1302_Reset(void)
{
DS1302_DIR |= (DS1302_RST + DS1302_SCLK);
DS1302_SCLK_LO;
DS1302_RST_LO;
DS1302_Delay(10);
DS1302_SCLK_HI;
}
//向DS1302寫入一個字節
void DS1302_WriteOneByte(unsigned char w_dat)
{
unsigned char temp;
DS1302_RST_HI;
DS1302_DIR |= DS1302_SDI;
for(temp=8;temp>0;temp--)
{
DS1302_SDI_LO;
if(w_dat&BIT0) DS1302_SDI_HI;
DS1302_SCLK_LO;
DS1302_Delay(10);
DS1302_SCLK_HI;
DS1302_Delay(10);
w_dat >>=1;
}
}
//從DS1302中讀取一個字節
unsigned char DS1302_ReadOneByte(void)
{
unsigned char temp,rdata;
rdata = 0x00;
DS1302_RST_HI;
DS1302_DIR &= ~DS1302_SDI;
for(temp=0;temp<8;temp++){rdata >>= 1;//將移位放到前面,否則讀不到最高一位
DS1302_SCLK_HI;
DS1302_Delay(10);
DS1302_SCLK_LO;
DS1302_Delay(10);
if((DS1302_IN&DS1302_SDI)==DS1302_SDI)
rdata |= BIT7;
//rdata >>= 1;
}
return(rdata);
}
//向DS1302中寫入地址后寫入數據
void DS1302_WriteData(unsigned char addr,unsigned char w_dat)
{
DS1302_RST_LO;
DS1302_SCLK_LO;
DS1302_RST_HI;
DS1302_WriteOneByte(addr); //寫入地址
DS1302_WriteOneByte(w_dat); //寫入數據
DS1302_SCLK_HI;
DS1302_RST_LO;
}
//向DS1302寫入地址后,從DS1302中讀取數據
unsigned char DS1302_ReadData(unsigned char addr)
{
unsigned char r_dat;
DS1302_RST_LO;
DS1302_SCLK_LO;
DS1302_RST_HI;
DS1302_WriteOneByte(addr); //寫入地址
r_dat = DS1302_ReadOneByte(); //讀出數據
DS1302_SCLK_LO;
DS1302_RST_LO;
return(r_dat);
}
//按照SettingData的設置設置DS1302的時間
void DS1302_SettingData(unsigned char *Setting_Time)
{
unsigned char temp;
unsigned char addr = 0x8C;
DS1302_WriteData(0x8E,0x00); //寫入控制命令,禁用寫保護
for(temp=0;temp<7;temp++) {
DS1302_WriteData(addr,Setting_Time[temp]);
addr -= 2;
}
DS1302_WriteData(0x8E,0x80); //寫入控制命令,啟用寫保護
}
//讀取DS1302時間到ReadingData中
void DS1302_GetData(unsigned char *str)
{
unsigned char i;
unsigned char addr = 0x8D;
// unsigned char temp,temp1;
for(i=0;i<7;i++)
{
str[i] = DS1302_ReadData(addr);//年
addr -= 2;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -