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

📄 shi zhong.c

📁 利用程序中的函数
💻 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 + -