⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302.h

📁 1602+ds1302时钟显示+ds18b20温度报警
💻 H
字号:
//#include "intrins.h"
sbit DS1302_clk=P1^7;
sbit DS1302_data=P1^6;
sbit DS1302_cs=P1^5;

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(0x89);
  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);	   //禁止写操作
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -