#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
sbit CLK=P3^5;//1302时钟信号线
sbit IO=P3^6;//1302的I/O数据线
sbit RST=P3^7;//1302的RST复位线
void InputByte(uchar);//输入1Byte
uchar OutputByte(uchar);//输出1Byte
void W1302(uchar,uchar);
uchar R1302(uchar);
uchar tab[6];
uchar a[7]={0x40,0x59,0x11,0x11,0x02,0x06,0x06};
uchar code table[10]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,0X80,0X90};
//延时1ms
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//往1302写入1Byte d为写入的数据入口参数
void InputByte(uchar date)
{
uchar i;
ACC=date;
for(i=8;i>0;i--)
{
IO=ACC0;//相当于汇编中的RRC
CLK=1;
CLK=0;
ACC=ACC>>1;
}
}
//从1302读取1Byte数据返回值ACC
uchar OutputByte(void)
{
uchar i;
for(i=8;i>0;i--)
{
ACC=ACC>>1;
ACC7=IO;
CLK=1;
CLK=0;
}
return(ACC);
}
//往1302写入数据先写地址后写数据 ucADD ucDA是入口参数
void W1302(uchar addr,uchar date)
{
RST=0;
CLK=0;
RST=1;
InputByte(addr);//写地址
InputByte(date);//写1Byte数据
CLK=1;
RST=0;
}
//读取1302某地址的数据 先写地址 后读数据 ucAddr入口地址 ucDa是返回值
uchar R1302(uchar addr)
{
uchar date;
RST=0;
CLK=0;
RST=1;
InputByte(addr);//写地址
date=OutputByte();//读1Byte数据
CLK=1;
RST=0;
return(date);
}
void main()
{
uchar miao,fen,shi;
uchar Curtime[7];
uchar i1;
uchar addr=0x80;
W1302(0x8e,0x00);//控制命令字节WP=0 写操作
for(i1=0;i1<7;i1++)
{
W1302(addr,a[i1]);//秒分时日月星期年
addr+=2;
}
W1302(0x8e,0x80);//控制命令字节WP=1写保护
while(1)
{
uchar i,i2;
uchar addr=0x81;
for(i2=0;i2<7;i2++)
{
Curtime[i2]=R1302(addr);//格式秒分时日月星期年
addr+=2;
}
miao=Curtime[0];
fen=Curtime[1];
shi=Curtime[2];
tab[5]=miao%16;
tab[4]=miao/16;
tab[3]=fen%16;
tab[2]=fen/16;
tab[1]=shi%16;
tab[0]=shi/16;
SCON=0;
for(i=0;i<6;i++)
{
SBUF=table[tab[i]];
while(!TI);
TI=0;
}
delay(50);
}
}
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。