📄 ds1302.h
字号:
/*ds1302为串行时钟芯片,利用三个IO口的配合,便可把芯片里的秒、分、时、星期、年月日等数据读出来
*该源程序主要是秒、分、时读出来,并送往连接P0与P2口的6位8段数码管显示*/
unsigned char sec,min,hour,day,mon,week,year;
/*===============================================================================/
*函数名称:clock_out
*入口参数:dd
*函数功能:写入指令或数据
/===============================================================================*/
void clock_out(unsigned char dd)
{
unsigned char i;
ACC=dd;
for(i=8;i>0;i--)
{
if((ACC&0x01)==1)
clock_dat=1;
else clock_dat=0;
clock_clk=1;
clock_clk=0;
ACC=ACC>>1;
}
}
/*===============================================================================/
*函数名称:write_clock
*入口参数:命令ord,数据dd
*函数功能:时钟调整
/================================================================================*/
void write_clock(unsigned char ord,unsigned char dd)
{
clock_clk=0;
clock_Rst=0;
clock_Rst=1;
clock_out(ord);
clock_out(dd);
clock_clk=1;
clock_Rst=0;
}
/*==============================================================================/
*函数名称:init_1302
*函数功能:ds1302初始化
/=============================================================================*/
void init_1302(void)
{
write_clock(0x8e,0x00);
write_clock(0x8c,0x08);
write_clock(0x8a,0x02);
write_clock(0x88,0x0b);
write_clock(0x86,0x20);
write_clock(0x84,0x00);
write_clock(0x82,0x00);
write_clock(0x80,0x00);
write_clock(0x90,0xa5);
write_clock(0x8e,0x80);
}
/*=================================================================================/
*函数名称:clock_in
*返回 值:ACC
*函数功能:输出数据
/=================================================================================*/
unsigned char clock_in(void)
{
unsigned char i;
ACC=0;
for(i=8;i>0;i--)
{
ACC=ACC>>1;
if(clock_dat==1)
ACC|=0x80;
clock_clk=1;
clock_clk=0;
}
return(ACC);
}
/*****************************************************************************/
//DS1302读数据(底层协议)
unsigned char read_clock(unsigned char ord){
unsigned char dd,k;
k=0x00;
clock_clk=0;
clock_Rst=0;
clock_Rst=1;
clock_out(ord);
dd=clock_in();
clock_clk=1;
clock_Rst=0;
k=dd>>4;
dd=dd&0x0f;
dd=dd+k*10;
return (dd);
}
void read_clocks(void)
{
sec=read_clock(0x81);
min=read_clock(0x83);
hour=read_clock(0x85);
day=read_clock(0x87);
mon=read_clock(0x89);
week=read_clock(0x8b);
year=read_clock(0x8d);
}
//程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -