您的位置 首页 电子

怎么完成DS1302实时时钟表显现在1602LCD液晶

在1602LCD液晶里显示实时时间:首先在DS1302实时时钟芯片里写入一个时间,然后在这个芯片里读取这个时间,并显示在液晶里。现在终于实…

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芯片的读写,也不知道是,芯片出问题,仍是自己程序的时序出问题。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/266785.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部