bcfx

本程序只能显示时间,,还不能调节时间

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P1^0;
sbit rw=P1^1;
sbit E=P1^2;
sbit sclk=P1^3;
sbit data_io=P1^4;
sbit rst=P1^5;
uchar code table1[]=" 20  /  /       ";
uchar code table2[]="      :  :  ";
uchar code weektable[]="Mon TuesWeb ThurFri Sat Sun ";
uchar shi,fen,miao,month,day,week,year;
void delay_ms(uint ms)
{
  uint a,b;
 for(a=0;a<ms;a++)
 for(b=0;b<1141;b++);         
}
void delay_ds1302(uint ms)
{
  uint i,j;
  for (i=ms;i>0;i--)
    for(j=124;j>0;j--);
}
void write_ds1302 (uchar addr ,uchar shu)
{
  uchar temp,t;
  rst=0;
  sclk=0;
  rst=1;
  temp=addr;
  for(t=0;t<8;t++)
  {
    if((temp&0x01)==1)
 {
    data_io=1;
 }
 else
 data_io=0;
 sclk=1;
 delay_ds1302(1);
 sclk=0;
 temp=temp>>1;
  }
  temp=shu;
  for(t=0;t<8;t++)
  {
    if((temp&0x01)==1)
 {
    data_io=1;
 }
 else
 data_io=0;
 sclk=1;
 delay_ds1302(1);
 sclk=0;
 temp=temp>>1;
  }
  rst=0;
}
uchar read_ds1302(uchar addr)
{
  uchar temp ,t;
  rst =0;
  sclk=0;
  rst=1;
  temp=addr;
  for(t=0;t<8;t++)
  {
    if (temp&0x01)
    data_io=1;
 else
 data_io=0;
 sclk=1;
 sclk=0;
 temp=temp>>1;
  }
  temp=0;
  for(t=0;t<7;t++)
  {
     if(data_io==1)
   {
     temp=temp|0x80;
  }
  else
  temp=temp&0x7f;
  sclk=1;
  sclk=0;
  temp=temp>>1;
 
  }
  return temp;
}
void write_com (uchar com)
{
    P2=com;
    rs=0;
    rw=0;
    E=1;
    delay_ms(1);
    E=0;
  
}
void write_date (uchar date)
{
   P2=date;
   rs=1;
   rw=0;
   E=0;
   delay_ms(1);
   E=1;
   delay_ms(1);
   E=0;
}
void init()
{
  uchar i;
  write_com(0x38);
  delay_ms(2);
  write_com(0x0c);
  delay_ms(2);
  write_com(0x06);
  delay_ms(2);

  write_com(0x80);
  delay_ms(1);
  for(i=0;i<16;i++)
  {
      write_date (table1[i]);
     
  }
  write_com(0xc0);
  delay_ms(1);
  for(i=0;i<12;i++)
  {
      write_date (table2[i]);
     
  }

}
void write_sfm(uchar add,uchar date)
{
   uchar ten,ge;
   ten=date>>4;
   ge=date&0x0f;
   write_com(0xc0+add);
   write_date(0x30+ten);
   write_date(0x30+ge);
}

void write_nyr(uchar add,uchar date)
{
   uchar ten,ge;
   ten=date>>4;
   ge=date&0x0f;
   write_com(0x80+add);
   write_date(0x30+ten);
   write_date(0x30+ge);
}

void write_week(uchar add,uchar week)
{
   uchar ge,i;
   ge=week&0x0f;
   write_com(0x80+add);
   if(ge==1)
   {
   
           for(i=0;i<4;i++)
           {
              write_date(weektable[i]);
           }
          
 }
    if(ge==2)
    {
    
           for(i=4;i<8;i++)
           {
              write_date(weektable[i]);
           }
          
 }
    if(ge==3)
 {
  
           for(i=8;i<12;i++)
           {
              write_date(weektable[i]);
           }
          
 }
    if(ge==4)
 {
  
           for(i=12;i<16;i++)
           {
              write_date(weektable[i]);
           }
          
 }
    if(ge==5)
 {
    
           for(i=16;i<20;i++)
           {
              write_date(weektable[i]);
           }
          
 }
    if(ge==6)
 {
    
           for(i=20;i<24;i++)
           {
              write_date(weektable[i]);
           }
          
 }
    if(ge==7)
 {
  
           for(i=24;i<28;i++)
           {
              write_date(weektable[i]);
           }
          
 }
}
void main ()
{
  init ();
  write_ds1302(0x8e,0x00);
  write_ds1302(0x90,0xa7);
  write_ds1302(0x80,0x50);//second
  write_ds1302(0x82,0x59);//minute
  write_ds1302(0x84,0x23);//hour
  write_ds1302(0x8a,0x07);//week
  write_ds1302(0x86,0x23);//day
  write_ds1302(0x88,0x05);//month
  write_ds1302(0x8c,0x10);//year
  while(1)
  {
 shi=read_ds1302(0x85);
 fen=read_ds1302(0x83);
    miao=read_ds1302(0x81);
 day=read_ds1302(0x87);
 month=read_ds1302(0x89);
 year=read_ds1302(0x8d);
 week=read_ds1302(0x8b);

 write_sfm(10,miao);
 write_sfm(7,fen);
 write_sfm(4,shi);
    write_nyr(9,day);
 write_nyr(6,month);
 write_nyr(3,year);
    write_week(12,week);   
   }
}

分类:

技术点:

相关文章: