📄 ds1302.c
字号:
#include "DS1302.h"
volatile char datetime[]={0,0,12,26,4,4,12}; //SEC,MIN,HR,DATE,MONTH,DAY,YEAR 12年4月26日星期四12:00:00
void write_byte(dat)
{
unsigned char i;
ACC=dat;
for(i=8;i>0;i--)
{
SCLK=0;
IO=ACC0;
ACC=ACC>>1;
SCLK=1;
}
}
unsigned char read_byte()
{
unsigned char i;
for(i=8;i>0;i--)
{
ACC=ACC>>1;
SCLK=0;
ACC7=IO;
SCLK=1;
}
return(ACC);
}
void write_DS1302(address,dat)
{
RST=0;
SCLK=0;
RST=1;
write_byte(address);
write_byte(dat);
RST=0;
SCLK=1;
}
unsigned char read_DS1302(address)
{
unsigned char temp;
RST=0;
SCLK=0;
RST=1;
write_byte(address);
temp=read_byte();
RST=0;
SCLK=1;
temp=temp/16*10+temp%16;
return(temp);
}
/*void init_DS1302() //全部初始化
{
unsigned char i,j=0x80;
for(i=0;i<7;i++)
{
datetime[i]=datetime[i]/10*16+datetime[i]%10;
}
write_DS1302(0x8e,0x00);
for(i=0;i<7;i++)
{
write_DS1302(j,datetime[i]);
j+=2;
}
write_DS1302(0x8e,0x80);
} */
void init_DS1302() //部分初始化
{
unsigned char i,j=0x80;
for(i=0;i<7;i++)
{
datetime[i]=datetime[i]/10*16+datetime[i]%10;
}
write_DS1302(0x8e,0x00); //写保护关闭
write_DS1302(0x80,datetime[0]); //秒清零,主要是bit7=0,使ds1302时钟启动
write_DS1302(0x8c,datetime[7]); //年设置,为12年
write_DS1302(0x8e,0x80); //写保护
}
void read_RTC()
{
unsigned char i,j=0x81;
for(i=0;i<7;i++)
{
datetime[i]=read_DS1302(j);
j+=2;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -