📄 ds1302._c
字号:
#include <iom16v.h>
#include <macros.h>
//秒
#define SEC_W 0x80
#define SEC_R 0x81
//分
#define MIN_W 0x82
#define MIN_R 0x83
//小时
#define HR_W 0x84
#define HR_R 0x85
//日期
#define DATE_W 0x86
#define DATE_R 0x87
//月
#define MONTH_W 0x88
#define MONTH_R 0x89
//星期几
#define DAY_W 0x8A
#define DAY_R 0x8B
//年
#define YEAR_W 0x8C
#define YEAR_R 0x8D
//控制写保护
#define CONTROL_W 0x8E
#define CONTROL_R 0x8F
//控制充电
#define TRIC_CHARGE_W 0x90
#define TRIC_CHARGE_R 0x91
//突发模式
#define CLOCK_BURST_W 0xBE
#define CLOCK_BURST_R 0xBF
//写入时钟控制信息
//SZRST--PD5
//SZSDA--PD6
//SZSCK--PD7
void SetDateTime(unsigned char cmd,unsigned char data)
{
unsigned char i=0;
PORTD&=0x1F;//设置PD5~PD7为低 0001 1111
DDRD|=0xE0;//设置PD5~PD7为输出 1110 0000
PORTD|=0x20;//RESET为高 0010 0000
for(i=0;i<8;i++)
{
if(cmd&0x01)
{
PORTD|=0x40; //0100 0000
}
else
{
PORTD&=0xBF; //1011 1111
}
PORTD|=0x80; //1000 0000
PORTD&=0x7F; //0111 1111
cmd=cmd>>1;
}
for(i=0;i<8;i++)
{
if(data&0x01)
{
PORTD|=0x40;//0100 0000
}
else
{
PORTD&=0xBF;//1011 1111
}
PORTD|=0x80;//SZSCK=1;
PORTD&=0x7F;//SZSCK=0;
data=data>>1;
}
PORTD&=0xDF;//设置RESET为低
}
//读出时钟控制信息
//SZRST--PD5
//SZSDA--PD6
//SZSCK--PD7
unsigned char ReadDateTime(unsigned char cmd)
{
unsigned char i=0;
unsigned char code;//返回的数据值
PORTD&=0x1F;//设置PD5~PD7为低 0001 1111
DDRD|=0xE0;//设置PD5~PD7为输出 1110 0000
PORTD|=0x20;//RESET为高 0010 0000
for(i=0;i<8;i++)
{
if(cmd&0x01)
{
PORTD|=0x40; //0100 0000
}
else
{
PORTD&=0xBF; //1011 1111
}
PORTD|=0x80; //1000 0000 SZSCK=1
PORTD&=0x7F;//SZSCK=0;
cmd=cmd>>1;
}
DDRD&=0xBF;//设置PD6(SZSDA)为输入模式
for(i=0;i<8;i++)
{
code=code>>1;
PORTD&=0x7F;//0111 1111 设置PD7(SZSCK)为低
if(PIND&0x40)
{
code|=0x80;
}
PORTD|=0x80;//SZSCK=1;
PORTD&=0x7F;//SZSCK=0;
}
PORTD&=0xDF;//设置RESET为低 1101 1111
return code;
}
//ASCII码转换为BCD码
//输入参数data为输入的数字
//返回值为BCD码表示的数字
unsigned char ASCIItoBCD(unsigned char data)
{
unsigned char tmp;
if(data>10)
{
tmp=data/10;
data=data%10;
data=(tmp<<4)|data;
}
return data;
}
//BCD码转换为ASCII码
//输入参数data为BCD码
//输入参数num为转换从最右边开始到第mask位结束
//返回值为ASCII表示的数字
unsigned char BCDtoASCII(unsigned char data,unsigned char mask)
{
unsigned char tmp=0xff;
tmp=tmp>>(8-mask);
data=data&tmp;
if(data>0x0f)
{
tmp=data&0x0f;
data=data>>4;
data=data*10+tmp;
}
return data;
}
void main()
{
unsigned char data;
SetDateTime(TRIC_CHARGE_W,0xA5);
data=ReadDateTime(TRIC_CHARGE_R);
while(1)
;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -