×
单片机 > 单片机程序设计 > 详情

如何实现DS1302实时时钟表显示在1602LCD液晶

发布时间:2020-05-30 发布时间:
|
在1602LCD液晶里显示实时时间: 首先在DS1302实时时钟芯片里写入一个时间, 然后在这个芯片里读取这个时间,并显示在液晶里。现在终于实现了...
 
#include
#include
 
 
sbit SCLK=P3^6;
sbit SDA=P3^4;
sbit RST = P3^5; 
 
//unsigned char code Write_Address[]={0x80,0x82,0x84};  
unsigned char code Read_Address[]={0x85,0x83,0x81};    
unsigned char Time_Table[3];
 
void Write_Byte(unsigned char Data)//写一个字节: 地址或数据
{
  unsigned char i;
  for(i=0; i<8; i++)
  {
      SCLK=0;
  SDA=Data&0x01;  
  Data=Data>>1;
  SCLK=1;  
  }    
}
void Write_RTC(unsigned char Address, unsigned char Data)  
   RST=0;
   _nop_();
   SCLK=0;
   _nop_();
   RST=1;
   Write_Byte(Address);
   Write_Byte(Data);
   RST=0;
}
 
unsigned char Read_Byte() //读一个字节: 数据
{
   unsigned char Data=0;
   unsigned char i;
   for(i=0; i<8; i++)
   {
       if(SDA==1)
   {
   Data=Data|0x80;
   }
       SCLK=0;
   Data=Data>>1;
   _nop_();
   SCLK=1;
   } 
   
   return Data; 
}
 
unsigned char Read_RTC(unsigned char Address) //
{
   unsigned char Data=0;
 
   unsigned char Data1,Data2;
   
   RST=0;
   _nop_();
   SCLK=0;
   _nop_();
   RST=1;
 
   Write_Byte(Address);  
   Data=Read_Byte();   
   RST=0;
 
   Data1=Data/16;
   Data2=Data%16;  
   Data=Data2+Data1*10;
   return Data;
}
 
void Init_RTC() //初始化实时 时钟表RTC
{
  Write_RTC(0x8e, 0x00);  
  Write_RTC(0x80, 0x56);  
  Write_RTC(0x82, 0x48);  
  Write_RTC(0x84, 0x12); 
  Write_RTC(0x8e, 0x80)   
}
 
void DisplayTime() //把时间显示1602液晶
{
   unsigned char i;
 
   InitLCD();
   Write_Command(0x80+0x03);
   for(i=0; i<3; i++)
   {
      Time_Table[i]=Read_RTC(Read_Address[i]);
  Write_Data(0x30+Time_Table[i]/10);
  Write_Data(0x30+Time_Table[i]%10);
  if(i!=2)
    Write_Data(':');
   } 
     
}
 
void main()
{
   Init_RTC();
   DisplayTime();
   while(1);
}
 
其实,写这个程序,也是比较简单的, 比在24C02 芯片里读写容易了。因为在24C02读写里,是使用I2C总线传输数据的,关键要把握好时序读写,至今仍然未解决这个24C02芯片的读写,也不知道是,芯片出问题,还是自己程序的时序出问题。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil(MDK-ARM)系列教程(七)_菜单