楼上,人家是ds1302的,呵呵,
给你个参考:
#include
sbitclock_dat=P2^6;
sbitclock_rst=P2^5;sbitwei1=P2^0;
sbitwei2=P2^1;
sbitwei3=P2^2;
sbitwei4=P2^3;
sbitwei5=P2^4;
sbitwei6=P3^3;sbita0=ACC^0;//为了编程方便定义的位变量
sbita1=ACC^1;
sbita2=ACC^2;
sbita3=ACC^3;
sbita4=ACC^4;
sbita5=ACC^5;
sbita6=ACC^6;
sbita7=ACC^7;unsignedcharTab_Num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-9数字voiddelay(intnum)//延时函数
{
while(num--);
}
voidclock_write(unsignedchardd)//写入一个字节,DS1302时序
{
ACC=dd;
clock_clk=0;clock_dat=a0;clock_clk=1;
clock_clk=0;clock_dat=a1;clock_clk=1;
clock_clk=0;clock_dat=a2;clock_clk=1;
clock_clk=0;clock_dat=a3;clock_clk=1;
clock_clk=0;clock_dat=a4;clock_clk=1;
clock_clk=0;clock_dat=a5;clock_clk=1;
clock_clk=0;clock_dat=a6;clock_clk=1;
clock_clk=0;clock_dat=a7;clock_clk=1;
}unsignedcharclock_read(void)//读出一个字节,时序
{clock_clk=1;clock_clk=0;a0=clock_dat;
clock_clk=1;clock_clk=0;a1=clock_dat;
clock_clk=1;clock_clk=0;a2=clock_dat;
clock_clk=1;clock_clk=0;a3=clock_dat;
clock_clk=1;clock_clk=0;a4=clock_dat;
clock_clk=1;clock_clk=0;a5=clock_dat;
clock_clk=1;clock_clk=0;a6=clock_dat;
clock_clk=1;clock_clk=0;a7=clock_dat;
return(ACC);
}unsignedcharread_clock(unsignedcharreg1)//从reg1寄存器读数据
{
unsignedchardd=0;
clock_clk=0;
clock_rst=0;
clock_rst=1;
clock_write(reg1);
dd=clock_read();
clock_rst=0;
return(dd);
}voidwrite_clock(unsignedcharreg2,unsignedchardate)//向reg2写入date数据
{
clock_clk=0;
clock_rst=0;
clock_rst=1;
clock_write(reg2);
clock_write(date);
clock_rst=0;
}voidshow(void)//显示和闪烁函数
{
unsignedchard,e;
unsignedinti;
for(i=0;i<1000;i++)
{
d=read_clock(0x81);//读秒
e=d;
d=d>>4;
e=e&0x0f;P0=Tab_Num[d];//秒十位
wei2=1;
delay(250);
wei2=0;
P0=Tab_Num[e];//秒各位
wei1=1;
delay(250);
wei1=0;d=read_clock(0x83);//读分钟
e=d;
d=d>>4;
e=e&0x0f;P0=Tab_Num[d];//分十位
wei4=1;
delay(250);
wei4=0;
P0=Tab_Num[e];//分各位
wei3=1;
delay(250);
wei3=0;d=read_clock(0x85);//读小时
e=d;
d=d>>4;
e=e&0x0f;P0=Tab_Num[d];//小时十位
wei6=1;
delay(250);
wei6=0;
P0=Tab_Num[e];//小时各位
wei5=1;
delay(250);
wei5=0;
}for(i=0;i<400;i++)//间隔显示
{
d=read_clock(0x87);//读日
e=d;
d=d>>4;
e=e&0x0f;
P0=Tab_Num[d];//日十位
wei2=1;
delay(250);
wei2=0;
P0=Tab_Num[e];//日各位
wei1=1;
delay(250);
wei1=0;d=read_clock(0x89);//读月
e=d;
d=d>>4;
e=e&0x0f;
P0=Tab_Num[d];//月十位
wei4=1;
delay(250);
wei4=0;
P0=Tab_Num[e];//月各位
wei3=1;
delay(250);
wei3=0;d=read_clock(0x8d);//读年
e=d;
d=d>>4;
e=e&0xf;
P0=Tab_Num[d];//年十位
wei6=1;
delay(250);
wei6=0;
P0=Tab_Num[e];//年各位
wei5=1;
delay(250);
wei5=0;
}
for(i=0;i<200;i++)//间隔显示
{
d=read_clock(0x8b);//读年
e=d;
d=d>>4;
e=e&0xf;
P0=Tab_Num[d];//年十位
wei2=1;
delay(250);
wei2=0;
P0=Tab_Num[e];//年各位
wei1=1;
delay(250);
wei1=0;
}
}/*--------------------时钟的初始化---------------------------*/
voidInit_1302(void)//如果不满意现在的表,可以初始化调整,写入程序之后,再把初始化屏蔽掉
{
write_clock(0x8e,0x00);//close_protect
delay(250);
write_clock(0x8c,0x08);//year08年
delay(250);
write_clock(0x88,0x6);//month06
delay(250);
write_clock(0x86,0x25);//date25
delay(250);
write_clock(0x84,0x8);//hour8
delay(250);
write_clock(0x82,0x28);//minute28
delay(250);
write_clock(0x80,0x29);//second40
delay(250);
write_clock(0x8a,0x03);//week_day3
delay(250);
write_clock(0x90,0xa0);//supply_power
delay(250);write_clock(0x8e,0x80);//protect
delay(250);
}
voidmain(void)
{
inti;
for(i=0;i<2;i++)
delay(2000);
Init_1302();//DS1302寄存器初始化P2=0x00;while(1)
{
show();
}
}