?? display.c
字號(hào):
/***********************************
*********包含庫(kù)函數(shù)*****************
***********************************/
#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}; //顯示段碼
/*************************************
**********設(shè)置時(shí)間********************
*************************************/
void setup_DS12887()
{
uchar i;
i=Adr_D;//使片內(nèi)寄存器和RAM數(shù)據(jù)有效
Adr_A=0x70;//UIP=0;
Adr_B=0xa2; //SET=1-->禁止更新,24/12=1-->24小時(shí)進(jìn)制
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; //消除已有的中斷標(biāo)志
}
/***************************************
*********讀取時(shí)間***********************
***************************************/
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;
}
/*************************************
********延時(shí)子程序,12MHZ*************
*************************************/
void delay(uchar k) //延時(shí)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;//使片內(nèi)寄存器和RAM數(shù)據(jù)有效
Adr_A=0x70;//UIP=0;
Adr_B=0xa2; //SET=1-->禁止更新,24/12=1-->24小時(shí)進(jìn)制
Adr_second_alrm=0xff;
Adr_min_alrm=0xff;
Adr_hour_alrm=0xff;
Adr_B=0x22;
Adr_A=0x20;
i=Adr_C; //消除已有的中斷標(biāo)志
}
/************************************
主函數(shù)
************************************/
void mian(void)
{
delay(500);
start_DS12887();
while(1)
{
get_time_DS12887();
display0();
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -