📄 time.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 + -