#include<reg51.h>
#include <intrins.h>
#define seg_c P2
#define bit_c P0
sbit T_RST = P1^0;
sbit T_IO = P1^1;
sbit T_CLK = P1^2;
sbit ACC0 =ACC^0;
sbit ACC7 =ACC^7;
unsigned char code seg[11]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xfd};
unsigned char num[8]={9,8,7,6,5,4,3,2};
#define uchar unsigned char
#define uint unsigned int
//秒 分 时 日 月 星期 年 控制
uchar set_clk[8]={0x32,0x40,0x18};
uchar get_clk[8];
void RTInputByte(uchar d)
{
uchar i=0;
ACC=d;
for(i=8;i>0;i--)
{
T_IO=ACC0;
T_CLK=1;
T_CLK=0;
ACC=ACC>>1;
}
}
/*
void RTInputByte(uchar d)
{
uchar i=0;
ACC=d;
for(i=0;i<8;i++)
{
T_IO=ACC0;
T_CLK=1;
T_CLK=0;
ACC=ACC>>1;
}
}
*/
uchar RTOutputByte(void)
{
uchar i=0;
for(i=0;i<8;i++)
{
ACC=ACC>>1;
ACC7=T_IO;
T_CLK=1;
T_CLK=0;
}
return(ACC);
}
void W1302(uchar ucAddr, uchar ucDa)
{
T_RST=0;
T_CLK=0;
T_RST=1;
RTInputByte(ucAddr);
RTInputByte(ucDa);
T_CLK=1;
T_RST=0;
}
uchar R1302(uchar ucAddr)
{
uchar R_DATA=0;
T_RST=0;
T_CLK=0;
T_RST=1;
RTInputByte(ucAddr);
R_DATA=RTOutputByte();
T_CLK=1;
T_RST=0;
return R_DATA;
}
void BurstW1302T(uchar *pWClock)//取出pWClock地址上装的内容即数组里面的数据
{
uchar i=0;
W1302(0x8e,0x00);//清楚保护,允许写
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(0xbe);//循环写入
for(i=0;i<8;i++)
{
RTInputByte(*pWClock);
pWClock++;
}
T_CLK=1;
T_RST=0;
}
void BurstR1302T(uchar *pRClock)
{
uchar i=0;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(0xbf);
for(i=0;i<8;i++)
{
*pRClock=RTOutputByte();
pRClock++;
}
T_CLK=1;
T_RST=0;
}
void delay(unsigned char ms)
{
unsigned int a=0;
while(ms--)
{
for(a=0;a<10;a++);
}
}
void display()
{
unsigned char loop=0;
num[0]=get_clk[2]>>4;
num[1]=get_clk[2]&0X0F;
num[2]=10;
num[3]=get_clk[1]>>4; //得到要显示数据的万位
num[4]=get_clk[1]&0X0F;
num[5]=10;
num[6]=get_clk[0]>>4; //得到要显示数据的十位
num[7]=get_clk[0]&0X0F; //得到要显示数据的个位
for(loop=0;loop<8;loop++)
{
bit_c=~(0x01<<loop);
seg_c=seg[num[loop]];
delay(3);
seg_c=0XFF;
}
}
main()
{
BurstW1302T(set_clk); //初始化 年月日 时分秒 设置时间
while(1)
{
display(); //将时间 显示
BurstR1302T(get_clk); //将时间 读出
}
}
文章评论(0条评论)
登录后参与讨论