ds12887.c

来自「ds18b20的C语言使用范例」· C语言 代码 · 共 110 行

C
110
字号
/*
管脚配置:
MOT: 接地
CS:  接地  地址:0xbf00

AS:  接单片机 ALE
R/W: 接 RW
DS:    接 RD
RESET:  接高
IRQ: 空
SQW:    空
*/

#include <reg52.h>

#define         DS12887   0xbf00     //定义时钟芯片的片选基址

#define  DS12887_sec   DS12887+0x00 // 秒
#define  DS12887_min   DS12887+0x02  // 分
#define  DS12887_hour  DS12887+0x04  // 时

#define  DS12887_day   DS12887+0x06  // 星期
#define  DS12887_date  DS12887+0x06  // 日期
#define  DS12887_month DS12887+0x08  //月份
#define  DS12887_year  DS12887+0x09  //年

#define  DS12887_Reg_A DS12887+0x0a //寄存器A
#define  DS12887_Reg_B DS12887+0x0b //寄存器B
#define  DS12887_Reg_C DS12887+0x0c //寄存器C
#define  DS12887_Reg_D DS12887+0x0d //寄存器D

unsigned char  xdata  *REG_ADD;

unsigned char Date_Time[7]={8,12,28,7,19,46,21};//定义时间数组并设定初始值

void WriteDs12887()
{
   REG_ADD=DS12887_Reg_B;
   *REG_ADD=0x80;

   REG_ADD=DS12887_year;  *REG_ADD=Date_Time[0];  //年
   REG_ADD=DS12887_month; *REG_ADD=Date_Time[1];  //月
   REG_ADD=DS12887_date;  *REG_ADD=Date_Time[2];  //日期
   REG_ADD=DS12887_day;   *REG_ADD=Date_Time[3];  //星期
   REG_ADD=DS12887_hour;  *REG_ADD=Date_Time[4];  //时
   REG_ADD=DS12887_min;   *REG_ADD=Date_Time[5];  //分
   REG_ADD=DS12887_sec;   *REG_ADD=Date_Time[6];  //秒


   REG_ADD=DS12887_Reg_A; *REG_ADD=0x20;
   REG_ADD=DS12887_Reg_B; *REG_ADD=0x06;

}

void ReadDs127887()
{  unsigned char temp;

   REG_ADD=DS12887_Reg_B;
   do
   {
     temp=*REG_ADD;
   }while((temp&0x80)==0x80);

   REG_ADD=DS12887_year;  Date_Time[0]=*REG_ADD;  //年
   REG_ADD=DS12887_month; Date_Time[1]=*REG_ADD;  //月
   REG_ADD=DS12887_date;  Date_Time[2]=*REG_ADD;  //日期
   REG_ADD=DS12887_day;   Date_Time[3]=*REG_ADD;  //星期
   REG_ADD=DS12887_hour;  Date_Time[4]=*REG_ADD;  //时
   REG_ADD=DS12887_min;   Date_Time[5]=*REG_ADD;  //分
   REG_ADD=DS12887_sec;   Date_Time[6]=*REG_ADD;  //秒

}

void main()

{


  WriteDs12887();

  while(1)
  {
     ReadDs127887();

}

}






















⌨️ 快捷键说明

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