ds1302 c51程序代码
时间: 2023-08-03 19:07:40 浏览: 113
下面是DS1302在C51单片机上的程序代码:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit DSIO = P3^4;
sbit RST = P3^5;
sbit SCLK = P3^6;
uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void Write_Ds1302_Byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
DSIO = dat&0x01;
SCLK = 0;
SCLK = 1;
dat >>= 1;
}
}
uchar Read_Ds1302_Byte()
{
uchar i,dat = 0;
for(i=0;i<8;i++)
{
dat >>= 1;
SCLK = 0;
if(DSIO)
dat |= 0x80;
SCLK = 1;
}
return dat;
}
void Write_Ds1302(uchar addr,uchar dat)
{
RST = 0;
SCLK = 0;
RST = 1;
Write_Ds1302_Byte(addr);
Write_Ds1302_Byte(dat);
RST = 0;
}
uchar Read_Ds1302(uchar addr)
{
uchar dat;
RST = 0;
SCLK = 0;
RST = 1;
Write_Ds1302_Byte(addr);
dat = Read_Ds1302_Byte();
RST = 0;
return dat;
}
void Init_Ds1302()
{
Write_Ds1302(0x8e,0x00);
Write_Ds1302(0x80,0x00);
}
void Display_Time()
{
uchar shi,ge;
shi = Read_Ds1302(0x85);
ge = Read_Ds1302(0x84);
P0 = 0x00;
P2 = 0xfe;
P0 = table[shi/16];
delay(100);
P0 = 0x00;
P2 = 0xfd;
P0 = table[shi%16];
delay(100);
P0 = 0x00;
P2 = 0xfb;
P0 = table[ge/16];
delay(100);
P0 = 0x00;
P2 = 0xf7;
P0 = table[ge%16];
delay(100);
}
void main()
{
Init_Ds1302();
while(1)
{
Display_Time();
}
}
```
上面的代码中,我们使用了P3.4、P3.5和P3.6三个引脚来连接DS1302实时时钟模块的数据、复位和时钟线。程序中的函数分别用于写入一个字节、读取一个字节、写入DS1302时钟寄存器、读取DS1302时钟寄存器、初始化DS1302和显示时间等操作。最后,在主函数中通过循环不断地显示当前时间。
阅读全文
相关推荐















