📄 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 + -