?? 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 + -