📄 shi zhong.c
字号:
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit P1_4=P1^4;
sbit P1_3=P1^3;
sbit P1_2=P1^2;
sbit RD12887=P3^7;
sbit WR12887=P3^6;
#define CMD_START_DS12C887 0x20
#define CMD_START_OSCILLATOR 0x70
#define CMD_CLOSE_DS12C887 0x30
#define MASK_SETB_SET 0x80
#define MASK_CLR_SET 0x7f
#define MASK_SETB_DM 0x04
#define MASK_CLR_DM 0xfb
#define MASK_SETB_2412 0x02
#define MASK_CLR_2412 0xfb
#define MASK_SETB_DSE 0x01
#define MASK_CLR_DSE 0xfe
void Delay(uchar no);
uchar Ysar,Mon,Date,Hours,Min,See;
uchar ucYear; uchar ucMon; uchar ucDate;
uchar ucHours; uchar ucMin; uchar ucSec;
xdata uchar ucSecondsChannel _at_ 0x7F00;
xdata uchar ucMinutesChannel _at_ 0x7F02;
xdata uchar ucHoursChannel _at_ 0x7F04;
xdata uchar ucDofWChannel _at_ 0x7F06;
xdata uchar ucDateChannel _at_ 0x7F07;
xdata uchar ucMonthChannel _at_ 0x7F08;
xdata uchar ucYearChannel _at_ 0x7F09;
xdata uchar ucCenturyChannel _at_ 0x7F32;
xdata uchar ucRegA _at_ 0x7F0a;
xdata uchar ucRegB _at_ 0x7F0b;
xdata uchar ucRegC _at_ 0x7F0c;
xdata uchar ucRegD _at_ 0x7F0d;
void StartDs12c887(void);
void CloseDs12c887(void);
void InitDs12c887(void);
uchar GetSeconds(void);
uchar GetMinutes(void);
uchar GetHours(void);
uchar GetDate(void);
uchar GetMonth(void);
uchar GetYear(void);
uchar GetCentury(void);
void SetTime(uchar chSeconds,uchar chMinutes,uchar chHours);
void SetDate(uchar chDate,uchar chMonth,uchar chYear);
void Display(uchar *ucPt);
uchar code tab[]={0x88,0xEB,0x4C,0x49,0x2B,0x19,0x18,0xCB,0x08,
0x09,0x0A,0x38,0x9C,0x68,0x1C,0x1E,0xFF};
/********************************************************************/
void StartDs12c887(void)
{
ucRegA=CMD_START_DS12C887;
}
void InitDs12c887()
{
volatile uchar i;
StartDs12c887();
ucRegB=ucRegB|MASK_SETB_SET;
ucRegB=ucRegB&MASK_CLR_DM|MASK_SETB_2412&MASK_CLR_DSE;
ucCenturyChannel=0x21;
i=ucRegC;
i=ucRegD;
ucRegB=ucRegB&MASK_CLR_SET;
}
/******************************************************************/
uchar GetSeconds(void)
{
uchar uip;
do{ uip=ucRegA;} while ((uip&0x80)==0x80);
return(ucSecondsChannel);
}
/****************************************************************/
uchar GetMinutes(void)
{
uchar uip;
do{ uip=ucRegA;} while (( uip&0x80)==0x80);
return(ucMinutesChannel);
}
/****************************************************************/
uchar GetHours(void)
{
uchar uip;
do{ uip=ucRegA;} while (( uip&0x80)==0x80);
return(ucHoursChannel);
}
/****************************************************************/
uchar GetDate(void)
{
uchar uip;
do{ uip=ucRegA;} while (( uip&0x80)==0x80);
return(ucDateChannel);
}
/****************************************************************/
uchar GetMonth(void)
{
uchar uip;
do{ uip=ucRegA;} while (( uip&0x80)==0x80);
return(ucMonthChannel);
}
/****************************************************************/
uchar GetYear(void)
{
uchar uip;
do{ uip=ucRegA;} while (( uip&0x80)==0x80);
return(ucYearChannel);
}
/****************************************************************/
void SetTime(uchar chSeconds,uchar chMinutes,uchar chHours)
{
ucRegB=ucRegB|MASK_SETB_SET;
ucSecondsChannel=chSeconds;
ucMinutesChannel=chMinutes;
ucHoursChannel=chHours;
ucRegB=ucRegB&MASK_CLR_SET;
}
/*************************************************************/
void SetDate(unsigned char chDate,unsigned char chMonth,unsigned char chYear)
{
ucRegB=ucRegB|MASK_SETB_SET;
ucDateChannel=chDate;
ucMonthChannel=chMonth;
ucYearChannel=chYear;
ucRegB=ucRegB&MASK_CLR_SET;
}
/***************************************************************/
void main(void)
{
uchar i,ucTimeArray[6];
SCON=0x00;
Delay(25);
P1_4=0;
P1_3=1;
P1_2=0;
ucTimeArray[0]=0x05;
ucTimeArray[1]=0x08;
ucTimeArray[2]=0x21;
ucTimeArray[3]=0x12;
ucTimeArray[4]=0x07;
ucTimeArray[5]=0x00;
SetTime(ucTimeArray[5],ucTimeArray[4],ucTimeArray[3]);
SetDate(ucTimeArray[2],ucTimeArray[1],ucTimeArray[0]);
for(i=0;i<6;i++)
ucTimeArray[i]=0;
while(1)
{
ucTimeArray[0]=GetYear();
ucTimeArray[1]=GetMonth();
ucTimeArray[2]=GetDate();
ucTimeArray[3]=GetHours();
ucTimeArray[4]=GetMinutes();
ucTimeArray[5]=GetSeconds();
Display(ucTimeArray+3);
Delay(1);
}
}
void Display(uchar *ucPt)
{
uchar ucTemp[6];
ucTemp[0]=(*ucPt)>>4;
ucTemp[1]=(*ucPt)&0x0f;
ucPt++;
ucTemp[2]=(*ucPt)>>4;
ucTemp[3]=(*ucPt)&0x0f;
ucPt++;
ucTemp[4]=(*ucPt)>>4;
ucTemp[5]=(*ucPt)&0x0f;
SBUF=tab[ucTemp[5]];
while(!TI);
TI=0;
SBUF=tab[ucTemp[4]];
while(!TI);
TI=0;
SBUF=tab[ucTemp[3]];
while(!TI);
TI=0;
SBUF=tab[ucTemp[2]];
while(!TI);
TI=0;
SBUF=tab[ucTemp[1]];
while(!TI);
TI=0;
SBUF=tab[ucTemp[0]];
while(!TI);
TI=0;
}
void Delay(unsigned char no)
{
unsigned char i,j;
for(;no>0;no--)
{
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -