📄 ds1302.c
字号:
#include <at89x51.h>
#include "lcd_h.h"
const char LCDnum[10]="0123456789";
sbit clk=P2^7;
sbit I_O=P2^6;
sbit rst=P2^5;
void write1302(unsigned char command1)//向1302写入 1 个字节的数据 $$$
{
unsigned wi,sj;
sj=command1;
clk=0;
for(wi=0;wi<8;wi++)
{
// if((sj&0x01)==0x01) cc=1;else cc=0;
// I_O=cc;
if((sj&0x01)==0x01) I_O=1;else I_O=0;
clk=1;
clk=0;
sj=sj>>1;
}
}
void writedata(unsigned char wdataaddr,unsigned char waddr)//写入数据 $$$
{
rst=0;
clk=0;
rst=1;
write1302(wdataaddr);
write1302(waddr);
clk=1;
rst=0;
}
void reset1302(void) //$$$
//1302初始化,写入秒,分,时,日,月,星期,年的数据
{
rst=0;clk=0;rst=1;
write1302(0x8e);
write1302(0);
clk=1;
rst=0;
writedata(0x80,0);
writedata(0x82,0);
writedata(0x84,0);
writedata(0x86,0);
writedata(0x88,0);
writedata(0x8a,0);
writedata(0x8c,0);
rst=0;
clk=0;
rst=1;
write1302(0x8e);
write1302(0x80);
clk=1;
rst=0;
}
unsigned char read1302(void)//向1302读出 1 个字节的数据 $$$
{
unsigned char ri,rdat=0;
clk=0;
for(ri=0;ri<8;ri++)
{
if (I_O==1) rdat=rdat|0x80;
clk=1;
clk=0;
if (ri<7) rdat=rdat>>1;
}
return (rdat);
}
unsigned char readdata(unsigned char rdataaddr)//1302读出数据子程序 $$$
// rdataaddr为1302数据的读地址,如81H
{
unsigned char rdata=0;
rst=0;
clk=0;
rst=1;
write1302(rdataaddr);
I_O=1;
rdata=read1302();
clk=1;
rst=0;
return(rdata);
}
void main(void)
{
unsigned char second[2]={0,0};
delayms(50);
init_LCD();
clear_LCD();
movexy(1,1);
//reset1302();
do
{
if (P2_0==0)
{
reset1302();
while(P2_0!=1);
}
second[0]=readdata(0x81);
second[1]=second[0];
second[0]=second[0]&0x0f;
second[1]=second[1]&0x70;
second[1]=second[1]>>4;
movexy(1,0);
write_LCD_data(LCDnum[second[1]]);
write_LCD_data(LCDnum[second[0]]);
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -