发布网友 发布时间:2024-05-06 22:24
共3个回答
热心网友 时间:2024-06-02 01:20
我这里有一个是用DS1302的,经过测试的,希望对你有帮助
程序如下:
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rst=P3^5;
sbit sck=P3^4;
sbit io=P3^3;
uchar i,j;
uchar shumaguan[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,
0x1f,0x01,0x09,0x11,0xc1,0x63,0x85,0x61,0x71,0xff,0xff}; //共阳极
uchar shuguan_duan[]={0x20,0x10,0x08,0x04,0x02,0x01};
uchar time_add[]={0x81,0x83,0x85}; //秒、分、时
uchar date[3];
uchar read1302(uchar add)
{
uchar i,dat1,dat2;
rst=1;
sck=0;
for(i=0;i<8;i++)
{
sck=0;
io=add&0x01;
add>>=1;
sck=1;
}
io=1;
for(i=0;i<8;i++)
{
if(io)
dat1|=0x80;
sck=1;
dat1>>=1;
sck=0;
}
rst=0;
dat2=dat1/16;
dat1=dat1%16;
dat1=dat1+dat2*10;
return dat1;
}
void xianshi(void)
{
uchar i,j;
for(i=0;i<3;i++)
{
date[i]=read1302(time_add[i]);
}
for(i=0;i<6;i++)
{
P1=0xff;
switch (i)
{
case 0: j=date[0]%10;break;
case 1: j=date[0]/10;break;
case 2: j=date[1]%10;break;
case 3: j=date[1]/10;break;
case 4: j=date[2]%10;break;
case 5: j=date[2]/10;break;
}
P0=shuguan_duan[i];
P1=shumaguan[j];
}
}
void write1302(uchar add,dat)
{
uchar i;
rst=0;
sck=0;
rst=1;
for(i=8;i>0;i--)
{
sck=0;
io=add&0x01;
add>>=1;
sck=1;
}
for(i=8;i>0;i--)
{
sck=0;
io=dat&0x01;
dat>>=1;
sck=1;
}
rst=0;
}
void main()
{
rst=0;
io=1;
sck=0;
// write1302(0x80,0x55);
// write1302(0x82,0x59);
// write1302(0x84,0x12);
while(1)
{
xianshi();
}
}
热心网友 时间:2024-06-02 01:28
#include<reg51.h>热心网友 时间:2024-06-02 01:25
51单片机的简易电子时钟