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

📄 display.c

📁 完全正确的ds12c887万年历程序
💻 C
字号:
/***********************************
*********包含库函数*****************
***********************************/
#include <reg51.h>
#include <stdio.h>
#include <absacc.h>
#include <math.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

/************************************
********宏定义***********************
***********************************/
#define uchar unsigned char
#define uint  unsigned int
/***********************************
********P2^4-->/CS******************
***********************************/
#define Adr_second      XBYTE[0xef00]
#define Adr_second_alrm XBYTE[0xef01]
#define Adr_min         XBYTE[0xef02]
#define Adr_min_alrm    XBYTE[0xef03]
#define Adr_hour        XBYTE[0xef04]
#define Adr_hour_alrm   XBYTE[0xef05]
#define Adr_weekday     XBYTE[0xef06]
#define Adr_day         XBYTE[0xef07]
#define Adr_month       XBYTE[0xef08]
#define Adr_year        XBYTE[0xef09]
#define Adr_A           XBYTE[0xef0a]
#define Adr_B           XBYTE[0xef0b]
#define Adr_C           XBYTE[0xef0c]
#define Adr_D           XBYTE[0xef0d]
#define Segment XBYTE[0X7FFF]   //显示段地址
#define Discode XBYTE[0XBFFF]	//显示位地址

/***************************************
************变量定义********************
****************************************/
uchar second,min,hour,day,month,year,weekday;
uchar code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};	  //显示段码


/*************************************
**********设置时间********************
*************************************/
void setup_DS12887()
{
   uchar i;
   i=Adr_D;//使片内寄存器和RAM数据有效
   Adr_A=0x70;//UIP=0;
   Adr_B=0xa2;  //SET=1-->禁止更新,24/12=1-->24小时进制
   Adr_second=second;
   Adr_second_alrm=0xff;
   Adr_min=min;
   Adr_min_alrm=0xff;
   Adr_hour=hour;
   Adr_hour_alrm=0xff;
   Adr_weekday=weekday;
   Adr_day=day;
   Adr_month=month;
   Adr_year=year;
   Adr_B=0x22;
   Adr_A=0x20;
   i=Adr_C;   //消除已有的中断标志
   }
/***************************************
*********读取时间***********************
***************************************/
void get_time_DS12887(void)
{
  uchar i;
   do(i=Adr_A);
       while((i&0x80)==0x80);
	   second=Adr_second;
       min=Adr_min;
       hour=Adr_hour;
       weekday=Adr_weekday;
       day=Adr_day;
       month=Adr_month;
       year=Adr_year;
}

/*************************************
********延时子程序,12MHZ*************
*************************************/
void delay(uchar k)		    //延时1MS
{  uchar i;
   while(k--)
   {    for(i=0;i<125;i++)
          {;}
   }
}
/***********************************
********显示子程序0******************
***********************************/
void display0(void)	   //显示
{	  Discode=0xfe;
	  Segment=duanma[(hour/10)|0x0f];
	  delay(5);

	  Discode=0xfd;
	  Segment=duanma[(hour%10)|0x0f];
	  delay(5);

	  Discode=0xfb;
	  Segment=duanma[(min/10)|0x0f];
	  delay(5);

	  Discode=0xf7;
	  Segment=duanma[(min%10)|0x0f];
	  delay(5);
	  
	  Discode=0xef;
	  Segment=duanma[(second/10)|0x0f];
	  delay(5);

	  Discode=0xdf;
	  Segment=duanma[(second%10)|0x0f];
	  delay(5);
	  }

/***********************************
********显示子程序1******************
***********************************/
void display1(void)	   //显示
{	  Discode=0xfe;
	  Segment=duanma[(year/10)|0x0f];
	  delay(5);

	  Discode=0xfd;
	  Segment=duanma[(year%10)|0x0f];
	  delay(5);

	  Discode=0xfb;
	  Segment=duanma[(month/10)|0x0f];
	  delay(5);

	  Discode=0xf7;
	  Segment=duanma[(month%10)|0x0f];
	  delay(5);
	  
	  Discode=0xef;
	  Segment=duanma[(day/10)|0x0f];
	  delay(5);

	  Discode=0xdf;
	  Segment=duanma[(day%10)|0x0f];
	  delay(5);
	  }

/***********************************
**********DS12887初始化*************
***********************************/
void start_DS12887(void)
{
   uchar i;
   i=Adr_D;//使片内寄存器和RAM数据有效
   Adr_A=0x70;//UIP=0;
   Adr_B=0xa2;  //SET=1-->禁止更新,24/12=1-->24小时进制
   Adr_second_alrm=0xff;
   Adr_min_alrm=0xff;
   Adr_hour_alrm=0xff;
   Adr_B=0x22;
   Adr_A=0x20;
   i=Adr_C;   //消除已有的中断标志
} 

/************************************
          主函数
************************************/
void mian(void)
{ 
    delay(500);
    start_DS12887();
    while(1)
	   {
	     get_time_DS12887();
		 display0();
	   }
} 










⌨️ 快捷键说明

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