📄 ds.c
字号:
#include <at89x51.h>
#include "led.h"
sbit rst=P2^5;
sbit sclk=P2^7;
sbit io=P2^6;
unsigned int second[2]={0,0},min[2]={0,0},hour[2]={0,0};
void write_ds1302(unsigned char dat)
{
unsigned char i=0;
sclk=0;
for (i=0;i<8;i++)
{
if (dat&0x01) io=1;
else io=0;
sclk=1;
sclk=0;
dat=dat>>1;
}
}
void write_data(unsigned char address,unsigned char dat)
{
rst=0;
sclk=0;
rst=1;
write_ds1302(address);
write_ds1302(dat);
sclk=1;
rst=0;
}
unsigned char read_ds1302(void)
{
unsigned char receive=0,i=0;
sclk=0;
for (i=0;i<8;i++)
{
receive=receive>>1;
if (io==1) receive=receive|0x80;
sclk=1;
sclk=0;
}
return (receive);
}
unsigned char read_dat(unsigned char address)
{
unsigned char receive1=0,i=0;
rst=0;
sclk=0;
rst=1;
write_ds1302(address);
io=1;
receive1=read_ds1302();
sclk=1;
rst=0;
return (receive1);
}
void ds1302(void)
{
rst=0;
sclk=0;
rst=1;
write_ds1302(0x8e);
write_ds1302(0);
//sclk=1;
rst=0;
write_ds1302(0x90);
write_ds1302(0xa5);
rst=0;
write_data(0x8e,0);
write_data(0x80,0);
write_data(0x82,9);
write_data(0x84,33);
write_data(0x86,0x22);
write_data(0x88,0x07);
write_data(0x8C,0x08);
rst=0;
sclk=0;
rst=1;
write_ds1302(0x8e);
write_ds1302(0x80);
//sclk=1;
rst=0;
}
void dsplay_ds1302(void)
{
second[0]=read_dat(0x81);
second[1]=second[0];
second[0]=second[0]&0x0f;
second[1]=second[1]&0x70;
second[1]=second[1]>>4;
min[0]=read_dat(0x83);
min[1]=min[0];
min[0]=min[0]&0x0f;
min[1]=min[1]&0x70;
min[1]=min[1]>>4;
hour[1]=hour[0];
hour[0]=hour[0]&0x0f;
hour[1]=hour[1]&0x3f;
hour[1]=hour[1]>>4;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -