微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 如何实现DS1302实时时钟表显示在1602LCD液晶

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

时间:11-18 来源:互联网 点击:
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芯片的读写,也不知道是,芯片出问题,还是自己程序的时序出问题。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top