www.pudn.com > DS12C887实时时钟winbond接口程序.rar > time.c


#include 
#include 
 
#define uchar unsigned char 
#define uint unsigned int 
 
#define timer_a XBYTE[0xff0a] /*ds12c887时钟寄存器A*/ 
#define timer_b XBYTE[0xff0b] /*时钟寄存器B*/ 
#define timer_y XBYTE[0xff09] /*年*/ 
#define timer_m XBYTE[0xff08] /*月*/ 
#define timer_d XBYTE[0xff07] /*日*/ 
#define timer_h XBYTE[0xff04] /*时*/ 
#define timer_mi XBYTE[0xff02] /*分*/ 
#define timer_s XBYTE[0xff00]  /*秒*/ 
#define timer_k XBYTE[0xff32]  /*世纪*/ 
 
uchar bdata acc;              /*可位寻址的内部RAM */ 
sbit a00=acc^0;               /*写液晶屏*/ 
sbit a01=acc^1; 
sbit a02=acc^2; 
sbit a03=acc^3; 
sbit a04=acc^4; 
sbit a05=acc^5; 
sbit a06=acc^6; 
sbit a07=acc^7; 
 
sbit cs2=P1^2;/*12887片选*/ 
 
sbit len=P1^4; 
sbit rst=P3^4; 
sbit di=P3^5; 
 
delay(uchar num) 
{ 
  while(num--); 
} 
void lw(uchar x,uchar y,uchar dd) 
{ 
  if(x<64) 
  { 
    di=0;len=1;XBYTE[0xfff8]=0xb8|y;delay(1); 
    di=0;len=1;XBYTE[0xfff8]=0x40|x;delay(1); 
    di=1;len=1;XBYTE[0xfff8]=dd;delay(1); 
  } 
  if(x>=64&&x<128) 
  { 
    x=x-64; 
    di=0;len=1;XBYTE[0xfff9]=0xb8|y;delay(2); 
    di=0;len=1;XBYTE[0xfff9]=0x40|x;delay(2); 
    di=1;len=1;XBYTE[0xfff9]=dd;delay(2); 
  } 
  if(x>=128) 
  { 
    x=x-128; 
    di=0;len=1;XBYTE[0xfffa]=0xb8|y;delay(1); 
    di=0;len=1;XBYTE[0xfffa]=0x40|x;delay(1); 
    di=1;len=1;XBYTE[0xfffa]=dd;delay(1); 
  } 
} 
void initlcd() 
{ 
  uchar x, y; 
  rst=0; 
  rst=1; 
  di=0;len=1;XBYTE[0xfff8]=0x3f;delay(1); 
  di=0;len=1;XBYTE[0xfff8]=0xc0;delay(1); 
  di=0;len=1;XBYTE[0xfff9]=0x3f;delay(1); 
  di=0;len=1;XBYTE[0xfff9]=0xc0;delay(1);  
  di=0;len=1;XBYTE[0xfffA]=0x3f;delay(1); 
  di=0;len=1;XBYTE[0xfffA]=0xc0;delay(1); 
  for(y=0;y<8;y++) 
  { 
    for(x=0;x<192;x++) 
    { 
     lw(x,y,0); 
    } 
  } 
   
} 
uchar code nian[32]={/*--  文字:  年  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00, 
0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00}; 
uchar code yue[32]={ 
/*--  文字:  月  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00, 
0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00}; 
  uchar code ri[32]={ 
/*--  文字:  日  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
 0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00, 
 0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00}; 
 
 
uchar t_year,t_month,t_day,t_hour,t_minute,t_second,time_bcd;/*定义年月日时分秒*/ 
void wchin(uchar a,uchar b,uchar arry[]) 
{ 
 uchar j,dd; 
 for(j=0;j<32;j++) 
 { 
   dd=arry[j]; 
   if(j<16){lw(a+j,b,dd);} 
   else{lw(a+j-16,b+1,dd);} 
} 
} 
void int_time_para()      /*时间初始化*/ 
{ 
  timer_a=0x20;/*时钟振荡器开启保持时钟运行*/ 
  timer_b=0x80;/**/ 
  timer_y=0x03;timer_m=0x01;timer_d=0x01;timer_h=0x01;timer_mi=0x01;timer_s=0x00; 
  timer_b=0x02; 
  } 
void time_read()        /*读取时间*/ 
{ 
  uchar i=0,j=0; 
  //timer_b=0x80; 
  acc=timer_a; 
  while(a07==1)       /*时间寄存器不忙时,读取时间*/ 
  {acc=timer_a;} 
  //timer_b=0x80; 
  t_year=timer_y;               /*读年*/ 
  t_month=timer_m;              /*读月*/ 
  t_day=timer_d;                /*读日*/ 
  t_hour=timer_h;                /*读时*/ 
  t_minute=timer_mi;              /*读分*/ 
  t_second=timer_s;                /*读秒*/ 
} 
/*-------------------系统时间设置(普通设置)-------------------------*/ 
void t_year_dis(uchar w,uchar c)    /*显示年*/ 
{ if(w==0) 
      {/*此出添加显示年*/}    
   
} 
/*----------------------------*/ 
void t_month_dis(uchar w,uchar c)    /*显示月*/ 
{ if(w==0) 
      {/*此出添加显示月*/}    
  
} 
/*----------------------------*/ 
void t_day_dis(uchar w,uchar c)    /*显示日*/ 
{ if(w==0) 
      {/*此出添加显示日*/}    
   
} 
/*----------------------------*/ 
void t_hour_dis(uchar w,uchar c)    /*显示时*/ 
{ if(w==0) 
      {/*此出添加显示时*/}    
} 
/*----------------------------*/ 
void t_minute_dis(uchar w,uchar c)    /*显示分*/ 
{ if(w==0) 
      {/*此出添加显示分*/}    
} 
/*----------------------------*/ 
void t_second_dis(uchar w,uchar c)    /*显示秒*/ 
{ if(w==0) 
      {/*秒*/}    
} 
/*---------------------*/ 
void hex_bcd(uchar c)        /*16进制转BCD码*/ 
{uchar i=0,j=0; 
  i=c&0x0f; 
    switch(i) 
      {case 0x0a:{i=0x10;time_bcd=(c&0xf0)+i;}break; 
      case 0x0f:{i=0x06;time_bcd=c-i;}break; 
      default:time_bcd=c;} 
  i=c&0xf0; 
    switch(i) 
     {case 0xf0:time_bcd=time_bcd-0x60;break;} 
} 
/*-------------------------设置时间-----------------------------------------*/ 
void t_year_set()  /*设置年*/ 
{uchar i=0,j=0; 
    hex_bcd(t_year); 
    t_year=time_bcd; 
  if (t_year==0xa0) 
        {t_year=0x00;} 
   if (t_year==0xff) 
        {t_year=0x99;} 
  t_year_dis(0x01,t_year); 
} 
/*------------------------------*/ 
void t_month_set()  /*设置月*/ 
{uchar i=0,j=0; 
    hex_bcd(t_month); 
    t_month=time_bcd; 
  if (t_month==0x13) 
        {t_month=0x01;} 
   if (t_month==0x00) 
        {t_month=0x12;} 
  t_month_dis(0x01,t_month); 
} 
/*-----------------------------*/ 
void t_day_set()  /*设置日*/ 
{uchar i=0,j=0; 
    hex_bcd(t_day); 
    t_day=time_bcd; 
  if (t_day==0x32) 
        {t_day=0x01;} 
   if (t_day==0x00) 
        {t_day=0x31;} 
  t_day_dis(0x01,t_day); 
} 
/*-----------------------------*/ 
void t_hour_set()  /*设置时*/ 
{uchar i=0,j=0; 
    hex_bcd(t_hour); 
    t_hour=time_bcd; 
  if (t_hour==0x24) 
        {t_hour=0x00;} 
   if (t_hour==0x99) 
        {t_hour=0x23;} 
  t_hour_dis(0x01,t_hour); 
} 
/*---------------------------*/ 
void t_minute_set()  /*设置分*/ 
{uchar i=0,j=0; 
    hex_bcd(t_minute); 
    t_minute=time_bcd; 
  if (t_minute==0x60) 
        {t_minute=0x00;} 
   if (t_minute==0x99) 
        {t_minute=0x59;} 
  t_minute_dis(0x01,t_minute); 
} 
/*----------------------------*/ 
void t_second_set()  /*设置秒*/ 
{uchar i=0,j=0; 
    hex_bcd(t_second); 
    t_second=time_bcd; 
  if (t_second==0x60) 
        {t_second=0x00;} 
   if (t_second==0x99) 
        {t_second=0x59;} 
  t_second_dis(0x01,t_second); 
} 
 
void main() 
{ 
  
}