📄 kds1302.c
字号:
#include "KKZQ.H"
//======================================================
// RAM资源
// 占用7个字节
//=======================================================
//
idata uchar sys_second; //系统时间 秒
idata uchar sys_min; //系统时间 分
idata uchar sys_hour; //系统时间 时
idata uchar sys_date; //系统时间 日
idata uchar sys_mon; //系统时间 月
idata uchar sys_week; //系统时间 星期
idata uchar sys_year; //系统时间 年
void write_systime(); //写系统时间函数
uchar read_time_byte(uchar addr); //读1302
void write_time_byte(uchar addr,uchar tdata); //写1302
// 地址 80h ---- 写秒
// 地址 82h ---- 写分
// 地址 84h ---- 写时
// 地址 86h ---- 写日
// 地址 88h ---- 写月
// 地址 8ah ---- 写星期
// 地址 8ch ---- 写年
// 地址 81h ---- 读秒
// 地址 83h ---- 读分
// 地址 85h ---- 读时
// 地址 87h ---- 读日
// 地址 89h ---- 读月
// 地址 8bh ---- 读星期
// 地址 8dh ---- 读年
//
//==========================================================================================
//
// filename : read_byte(uchar addr)
// 功 能 : 从给定地址(addr)读1个字节数据
// 返 回 值 : 返回读出的数据
//
//==========================================================================================
uchar read_time_byte(uchar addr)
{ uchar i,k;
_nop_();
k=addr;
DST_RST = 1;
_nop_();
for(i=8;i>0;i--)
{ DST_CLK = 0;
k>>=1;
_nop_(); _nop_(); _nop_(); _nop_();
DST_IO = CY;
_nop_(); _nop_(); _nop_(); _nop_();
DST_CLK = 1;
_nop_(); _nop_(); _nop_(); _nop_();
}
k=0; DST_IO=1;
for(i=8;i>0;i--)
{ DST_CLK=1;
_nop_(); _nop_(); _nop_(); _nop_();
DST_CLK = 0;
k>>=1;
_nop_(); _nop_(); _nop_(); _nop_();
if (DST_IO) k|=0x80;
_nop_(); _nop_(); _nop_(); _nop_();
}
DST_RST =0;
return(k);
}
//==========================================================================================
//
// filename : write_time_byte(uchar addr,uchar tdata)
// 功 能 : 向给定地址(addr)写入1个字节数据(tdata)
// 返 回 值 : 无
//
//==========================================================================================
//
void write_time_byte(uchar addr,uchar tdata)
{ uchar i,k;
k=addr;
DST_RST = 0;DST_RST = 1;
_nop_();
for(i=8;i>0;i--)
{ DST_CLK = 0;
k>>=1; _nop_(); _nop_(); _nop_(); _nop_();
DST_IO = CY; _nop_(); _nop_(); _nop_(); _nop_();
DST_CLK = 1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
k=tdata;
for(i=8;i>0;i--)
{ DST_CLK = 0;
k>>=1; _nop_(); _nop_(); _nop_(); _nop_();
DST_IO = CY; _nop_(); _nop_(); _nop_(); _nop_();
DST_CLK = 1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
DST_CLK=0; _nop_(); _nop_(); _nop_(); _nop_();
DST_RST =0; _nop_(); _nop_(); _nop_(); _nop_();
}
//==========================================================================================
// filename : write_systime()
// 功 能 : 向ds1302中写入当前时间(秒,分,时,日,月,星期,年)
// 返 回 值 : 无
// 本程序精确到时间 --- 分,秒单位默认 0
// 时间数据格式如下
// 13: 25 0x13 0x25 BCD码表示
//==========================================================================================
//
void write_systime()
{
write_time_byte(0x8e,0x00); //WP=0, 取消写保护
write_time_byte(0x80,sys_second); //设置 --- 秒
write_time_byte(0x82,sys_min); //设置 --- 分
write_time_byte(0x84,sys_hour); //设置 --- 时
write_time_byte(0x86,sys_date); //设置 --- 日
write_time_byte(0x88,sys_mon); //设置 --- 月
write_time_byte(0x8a,sys_week); //设置 --- 星期
write_time_byte(0x8c,sys_year); //设置 --- 年
write_time_byte(0x8e,0x80); //WP=1, 设置写保护
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -