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

📄 time.c

📁 应用案例
💻 C
字号:
////////////////////////////////////////////////////////////
#include<reg52.h>

extern  void line_disp (unsigned char lines , unsigned char *chn);
 
sbit 	TIMER_CLK	=	P2^1;
sbit 	TIMER_IO    =	P2^2;
sbit 	TIMER_RST	=	P2^3;

unsigned char bdata timer_data;	
sbit 		hbit_data	=	timer_data^7;
sbit 		lbit_data	=	timer_data^0;
unsigned char bdata timer_address;
sbit 		lbit_addr	=	timer_address^0;


unsigned char idata MINUTE;
unsigned char idata HOUR;
unsigned char idata DATE;
unsigned char idata MONTH;
unsigned char idata DAY;
unsigned char idata YEAR;


void delay (unsigned char us)   //delay time
{
  	while(us--);
}

void write_timer(unsigned char address,unsigned char value)
{
	unsigned char i;
	timer_address 	= 	address;
	timer_data 		= 	value;

	TIMER_CLK	=	0 ;	delay(2);
	TIMER_RST	=	1 ;	delay(2);
	for (i=0;i<8;i++)     //写地址。
		{        
  			TIMER_CLK = 0;
			TIMER_IO  = lbit_addr;
  						delay(2);
  			TIMER_CLK = 1;
			timer_address = timer_address>>1;
		}
	for (i=0;i<8;i++)     //写数据
		{
  			TIMER_CLK = 0;
  			TIMER_IO  = lbit_data;
  						delay(2);
  			TIMER_CLK=1;
  			timer_data = timer_data>>1;
		}
	TIMER_RST	=	0 ;	delay(2);
	TIMER_CLK	=	0 ;
}

unsigned char read_timer(unsigned char address)
{
	unsigned char i ;
 	timer_address	=	address;

 	TIMER_CLK	=	0 ;	delay(2);
 	TIMER_RST	=	1 ;	delay(2);
	for (i=0;i<8;i++)	    //写地址
		{
			TIMER_CLK = 0;
  			TIMER_IO  = lbit_addr;
  						delay(2);
	  		TIMER_CLK = 1;
	  		timer_address = timer_address>>1;
		}
	TIMER_IO=1;
	for(i=0;i<7;i++)       //读数据
		{
			TIMER_CLK = 0; 
	  		hbit_data = TIMER_IO;
  			TIMER_CLK = 1;
	  		timer_data = timer_data>>1;
		}
		TIMER_CLK = 0;	   //这里有第八位
	  	hbit_data = TIMER_IO;
		delay(2);
	TIMER_RST = 0 ;	 delay(2);
	TIMER_CLK = 0;
	return timer_data;
}


void timer_init(void)
{
 	unsigned char flag;
	TIMER_CLK=0;
	TIMER_RST=0;
	flag = read_timer(0xc1);	//读标志
	if (flag != 0x55)
	{
	  	write_timer(0x8e,0x00);  //关闭写保护
		write_timer(0x8c,0x08);  //预制年份2008
		write_timer(0x88,0x06);  //预制月份6
		write_timer(0x86,0x13);	 //预制日期13
		write_timer(0x8a,0x05);  //预制星期5
		write_timer(0x84,0x08);	 //预制小时6
	  	write_timer(0x82,0x00);  //预制分钟时间
        write_timer(0x90,0x00);  //写充电控制寄存器
		write_timer(0xc0,0x55);  //写标志防止重复初始化
	  	write_timer(0x80,0x00);  //启动时钟
		write_timer(0x8e,0x80);  //打开写保护
	}
}

void readRTC(void)
{
	YEAR   = read_timer(0x8d);
	DAY    = read_timer(0x8b);
  	MONTH  = read_timer(0x89);
  	DATE   = read_timer(0x87);
  	HOUR   = read_timer(0x85);
  	MINUTE = read_timer(0x83);
}


unsigned char code week[7][2]={{"一"},{"二"},{"三"},{"四"},{"五"},{"六"},{"天"}};

void time_disp2 (void)
{
	unsigned char timebar1[16]={"    年  月  日  "};
	unsigned char timebar2[16]={"    -   星期    "};

	readRTC();

	timebar1[2]=(YEAR>>4)+0x30; 	timebar1[3]=(YEAR&0x0F)+0x30;
	timebar1[6]=(MONTH>>4)+0x30;	timebar1[7]=(MONTH&0x0F)+0x30;
	timebar1[10]=(DATE>>4)+0x30;	timebar1[11]=(DATE&0x0F)+0x30;

	timebar2[2]=(HOUR>>4)+0x30; 		timebar2[3]=(HOUR&0x0F)+0x30;
	timebar2[5]=(MINUTE>>4)+0x30;		timebar2[6]=(MINUTE&0X0F)+0x30;
	timebar2[12]=week[DAY-1][0];  	    timebar2[13]=week[DAY-1][1];

	line_disp(0,timebar1);
	line_disp(1,timebar2);	
}


extern void rs232_send(unsigned char *address, unsigned char length);
void time_disp1(unsigned char x)
{
 	unsigned char  timebar3[16]={"20  -  -     -  "};

	readRTC();

	timebar3[2]=(YEAR>>4)+0x30;		timebar3[3]=(YEAR&0X0F)+0x30;
	timebar3[5]=(MONTH>>4)+0x30;	timebar3[6]=(MONTH&0X0F)+0x30;
	timebar3[8]=(DATE>>4)+0x30;		timebar3[9]=(DATE&0X0F)+0x30;
	timebar3[11]=(HOUR>>4)+0x30;	timebar3[12]=(HOUR%0X0F)+0x30;
	timebar3[14]=(MINUTE>>4)+0x30;	timebar3[15]=(MINUTE&0X0F)+0x30;

	line_disp(0,timebar3);
	if(x)
		rs232_send(timebar3,16);
}

⌨️ 快捷键说明

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