单片机日历时钟系统

发布网友 发布时间:2022-04-23 23:54

我来回答

2个回答

热心网友 时间:2023-10-14 09:36

//给你一个DS1302的库函数
//液晶那个库要的话也能给你哈

//#include "intrins.h"
sbit DS1302_clk=0xa0;
sbit DS1302_data=0xa1;
sbit DS1302_cs=0xa2;

unsigned char year,month,date,hour,minute,second,week;
//unsigned char display_buffer[6];

void short_ds1302_delay();//短延时
void long_ds1302_delay();//长延时
void DS1302_write(unsigned char DS1302_temp); //写入一个字节
unsigned char DS1302_read(void); //读一字节
void DS1302_init();//ds1302初始化
void DS1302_write_time(int command,int dat);//写入second or minute or hour...... or 写入一个命令
unsigned char DS1302_read_time(int command);//读取second or minute or hour......

void short_ds1302_delay()
{
unsigned char i;
for(i=0;i<5;i++);
}

void long_ds1302_delay()
{
unsigned char i;
for(i=0;i<25;i++);
}

void DS1302_write(unsigned char DS1302_temp) //写入一个字节
{
unsigned char i,temp;
long_ds1302_delay();
temp=DS1302_temp;
for(i=0;i<8;i++)
{
DS1302_data=temp&0x01;
short_ds1302_delay();
DS1302_clk=1;
short_ds1302_delay();
DS1302_clk=0;
temp=temp>>1;
}
}

unsigned char DS1302_read(void) //读一字节
{
unsigned char i,temp;
long_ds1302_delay();
temp=0;
for(i=0;i<8;i++)
{
temp=temp>>1;
if(DS1302_data==1)
temp=temp+0x80;
DS1302_clk=1;
short_ds1302_delay();
DS1302_clk=0;
short_ds1302_delay();
}
return temp;
}
/*
/////////写操作设置,当a=0x80时禁止写操作,a=0x00时允许////////////////

void DS1302_write_able(unsigned char a)
{
DS1302_cs=0;

DS1302_clk=0;
short_ds1302_delay();
DS1302_cs=1;
DS1302_write(0x8e);
DS1302_data=1;
DS1302_write(a);
DS1302_cs=0;
short_ds1302_delay();
DS1302_clk=1;
}

/////////读操作设置,当a=0x80时禁止读操作,a=0x00时允许////////////////

void DS1302_read_able(unsigned char a)
{
DS1302_cs=0;

DS1302_clk=0;
short_ds1302_delay();
DS1302_cs=1;
DS1302_write(0x8f);
DS1302_data=1;
DS1302_write(a);
DS1302_cs=0;
short_ds1302_delay();
DS1302_clk=1;
}
*/
////////////////////ds1302初始化////////////////////////
void DS1302_init()
{
unsigned char i;
DS1302_write_time(0x8e,0x00); //允许写操作

DS1302_cs=0;

DS1302_clk=0;
short_ds1302_delay();
DS1302_cs=1;
DS1302_write(0x81);
DS1302_data=1;
i=DS1302_read();
DS1302_cs=0;
short_ds1302_delay();
DS1302_clk=1;
second=((i>>4)&0x07)*10+(i&0x0f);

DS1302_clk=0;
short_ds1302_delay();
DS1302_cs=1;
DS1302_write(0x80);
DS1302_data=1;
DS1302_write(0x7f&i);
DS1302_cs=0;
short_ds1302_delay();
DS1302_clk=1;

DS1302_clk=0; //充电设置
short_ds1302_delay();
DS1302_cs=1;
DS1302_write(0x90);
DS1302_data=1;
// DS1302_write(0xa6); //允许充电,一个二极管 4k电阻
DS1302_write(0x00); //禁止充电
DS1302_cs=0;
short_ds1302_delay();
DS1302_clk=1;

DS1302_write_time(0x8e,0x80); //禁止写操作
}

unsigned char DS1302_read_time(int command)//读取second or minute or hour......
{
unsigned char i;
DS1302_clk=0;
short_ds1302_delay();
DS1302_cs=1;
DS1302_write(command);
DS1302_data=1;
i=DS1302_read();
DS1302_cs=0;
short_ds1302_delay();
DS1302_clk=1;
return i;
}
void DS1302_readdate()
{
unsigned char i;
DS1302_cs=0;

//读取second
i=DS1302_read_time(0x81);
second=((i>>4)&0x07)*10+(i&0x0f);

//读取分minute
i=DS1302_read_time(0x83);
minute=((i>>4)&0x07)*10+(i&0x0f);

//读取时hour
i=DS1302_read_time(0x85);
hour=((i>>4)&0x03)*10+(i&0x0f);

//读取日date
i=DS1302_read_time(0x87);
date=((i>>4)&0x03)*10+(i&0x0f);

//读取月份month
i=DS1302_read_time(0x);
month=((i>>4)&0x01)*10+(i&0x0f);

//读取周week
i=DS1302_read_time(0x8b);
week=i&0x07;

//读取年份year
i=DS1302_read_time(0x8d);
year=((i>>4)&0x0f)*10+(i&0x0f);
}

void DS1302_write_time(int command,int dat)//写入second or minute or hour...... or 写入一个命令
{
DS1302_clk=0;
short_ds1302_delay();
DS1302_cs=1;
DS1302_write(command);
DS1302_data=1;
DS1302_write(dat);
DS1302_cs=0;
short_ds1302_delay();
DS1302_clk=1;
}

void DS1302_writedate()
{

DS1302_write_time(0x8e,0x00); //允许写操作
DS1302_cs=0;

//写second
DS1302_write_time(0x80,0x7f&(((second/10)<<4)+(second%10)));

//minute
DS1302_write_time(0x82,0x7f&(((minute/10)<<4)+(minute%10)));

//hour
DS1302_write_time(0x84,0x3f&(((hour/10)<<4)+(hour%10)));

//date
DS1302_write_time(0x86,0x3f&(((date/10)<<4)+(date%10)));

//month
DS1302_write_time(0x88,0x1f&(((month/10)<<4)+(month%10)));

//week
DS1302_write_time(0x8a,0x07&week);

//year
DS1302_write_time(0x8c,((year/10)<<4)+(year%10));

DS1302_write_time(0x8e,0x80); //禁止写操作
}

热心网友 时间:2023-10-14 09:37

作业还是自己做吧

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com