#include
#include
/************************************************************/
#define uchar unsigned char
#define uint unsigned int
#define write_second 0x80 //秒开始数存储,修改用(下同)
#define write_minute 0x82 //分开始数存储
#define write_hour 0x84 //时开始数存储,12小时计时,从0开始要写入0x80(12小时要判断上下午)。
#define read_second 0x81 //秒,显示要读这个存储器
#define read_minute 0x83 //分,显示要读这个存储器
#define read_hour 0x85 //时,显示要读这个存储器
#define write_day 0x86
#define read_day 0x87
#define write_month 0x88
#define read_month 0x89
#define write_week 0x8A
#define read_week 0x8B
#define write_year 0x8C
#define read_year 0x8D
#define write_protect 0x8E
/************************************************************/
***it ACC_7=ACC^7;
***it SCLK =P1^2;
***it DIO =P1^3;
***it CE =P1^4; //protus软件中的RST脚
/********************************/
uchar dd[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
void delay(char us)
{
char m,n;
while(us--)
{
for(m=0;m<40;m++)
for(n=0;n<50;n++);
}
}
/**********/
void write1302(unsigned char addr,dat)
{
unsigned char i,temp;
CE=0;
SCLK=0;
CE=1;
for(i=0;i<8;i++) //写入地址
{
SCLK=0;
temp=addr;
if(temp&0x01==0x01)
DIO=1;
else
DIO=0;
addr>>=1;
SCLK=1;
}
for(i=0;i<8;i++) //写入数据
{
SCLK=0;
temp=dat;
if(temp&0x01==0x01)
DIO=1;
else
DIO=0;
dat>>=1;
SCLK=1;
}
}
unsigned char read1302(unsigned char addr)
{
unsigned char i,temp,dat1,dat2;
CE=0;
SCLK=0;
CE=1;
for(i=8;i>0;i--)//写入读存储单元地址
{
SCLK =0;
temp =addr;
if(temp&0x01==0x01)
DIO=1;
else
DIO=0;
addr>>=1;
SCLK=1;
}
for(i=8;i>0;i--)//读数据
{
ACC_7=DIO;
SCLK=1;
ACC>>=1;
SCLK=0; //下降沿读出数据
}
CE=0;
dat1=ACC;
dat2=dat1/16;
dat1=dat1%16;
dat1=dat1+dat2*10;
return(ACC);
}
/////////////////////////////////////
void Initial(void)
{
write1302(write_protect,0x00);
write1302(write_second,0x56);
write1302(write_minute,0x34);
write1302(write_hour,0x12);
write1302(write_protect,0x80);
}
/////////////////////
void main(void)
{
unsigned char tt1,tt2,hour;
Initial();
write1302(write_second,0x55); //秒从55开始
write1302(write_minute,0x59); //分从59开始
write1302(write_hour,0x8B); //赋值0x80,为12小时计时,但低五位为计时为,所以,显示只显示低五位,小时从11开始
write1302(write_year,0x0f); //15年
write1302(write_week,0x03);//周三
write1302(write_month,0x0a);//10月
while(1)
{
tt1=read1302(read_second);
tt2=read1302(read_hour) & 0x1f; //取出低五位
if(read1302(read_hour) & 0x20==0x20) //12小时计时判断上下午
hour="pm "; // afternoon
else
hour="am ";//morning
P0=dd[tt1/10];
P2=0xfe;
delay(2);
P2=0xff;
P0=dd[tt1%10];
P2=0xfd;
delay(2);
P2=0xff;
P0=dd[tt2/10];
P2=0xf7;
delay(2);
P2=0xff;
P0=dd[tt2%10];
P2=0xfb;
delay(2);
P2=0xff;
}
}
|