单片机万年历毕业设计
原理超级简单,百度一下就OK。
给你一个参考程序。
希望对你有帮助。
voids 1302 _ limit(void)//初始化
{
ds 1302 _ write enable();
ds 1302 _ OSC enable();
for(ds 1302 _ b = 0;ds 1302 _ b & lt;7;ds1302_b++)
ds 1302 _ SendByte(ds _ sec+2 * ds 1302 _ b,d 1302[ds 1302 _ b]);//赋值初始化
}
Uchar ds1302 _ read (uchar地址)//读时钟
{
uchar dat
ds 1302 _ write enable();
开关(地址)
{ case 0:dat = ds 1302 _ receive byte(ds _ sec+1);
打破;
case 1:dat = ds 1302 _ receive byte(ds _ min+1);
打破;
情况二:dat = ds 1302 _ receive byte(ds _ hour+1);
打破;
情况三:dat = ds 1302 _ receive byte(ds _ day+1);
打破;
情况四:dat = ds 1302 _ receive byte(ds _ week+1);
打破;
情况五:dat = ds 1302 _ receive byte(ds _ month+1);
打破;
案例6:dat = ds 1302 _ receive byte(ds _ year+1);
打破;
}
ds 1302 _ write disable();
return(dat);
}
void DS1302_Write(uchar地址,uchar dat)
{
ds 1302 _ write enable();
开关(地址)
{
案例0:DS1302_SendByte(ds_sec,dat);
打破;
案例1:ds 1302 _ send byte(ds _ min,dat);
打破;
案例二:DS1302_SendByte(ds_hour,dat);
打破;
案例三:DS1302_SendByte(ds_day,dat);
打破;
案例四:DS1302_SendByte(ds_week,dat);
打破;
案例五:DS1302_SendByte(ds_month,dat);
打破;
案例六:DS1302_SendByte(ds_year,dat);
打破;
}
ds 1302 _ write disable();
}
Ds1302pro() //读取数据
{
nian 01 = ds 1302 _ receive byte(ds _ year+1);
yue 01 = ds 1302 _ receive byte(ds _ month+1);
ri 01 = ds 1302 _ receive byte(ds _ day+1);
Xiaoshi 01 = ds 1302 _ receive byte(ds _ hour+1);
sec 01 = ds 1302 _ receive byte(ds _ sec+1);//倒计时信息
min 01 = ds 1302 _ receive byte(ds _ min+1);//读取信息
周星驰= ds 1302 _ receive byte(ds _ week+1);
d 1302 _ transfer();//数值处理提取要显示的值。
}
void ds1302 _ send byte(uchar命令,uchar xmtdat)//数据发送程序,向受控的ds 1302发送1字节。
{
乌恰尔一世;
RST = 0;
_ nop _();
SCLK = 0;
_ nop _();
RST = 1;
for(I = 0;我& lt8;i++)
{
IO_DATA=(位)(命令& amp0x 01);
Command = Command & gt& gt1;
SCLK = 1;
_ nop _();
SCLK = 0;
}
for(I = 0;我& lt8;i++)
{
IO_DATA=(位)(XmtDat & amp0x 01);
XmtDat = XmtDat & gt& gt1;
SCLK = 1;
_ nop _();
SCLK = 0;
}
RST = 0;
}
uchar ds 1302 _ receive byte(uchar命令)//数据接收程序;从受控DS1302接收1字节的数据。
{
uchar i,rcv dat = 0;
RST = 0;
_ nop _();
SCLK = 0;
_ nop _();
RST = 1;
for(I = 0;我& lt8;i++)
{
IO_DATA=(位)(命令& amp0x 01);
Command = Command & gt& gt1;
SCLK = 1;
_ nop _();
SCLK = 0;
}
for(I = 0;我& lt7;i++)
{
if(IO _ DATA)rcv dat | = 0x 80;
RcvDat = RcvDat & gt& gt1;
SCLK = 1;
_ nop _();
SCLK = 0;
}
if(IO _ DATA)rcv dat | = 0x 80;
RST = 0;
返回RcvDat
}
void ds 1302 _ write enable(void)//允许数据写入寄存器。
{
DS1302_SendByte(ds_com,00);
}
void ds 1302 _ write disable(void)//禁止数据写入寄存器。
{
DS1302_SendByte(ds_com,0x 80);
}
void ds 1302 _ OSC enable(void)//开始时钟操作。
{
DS1302_SendByte(ds_sec,0x 00);
}
voids 1302 _ OSC disable(void)//停止时钟操作。
{
DS1302_SendByte(ds_sec,0x 80);
}
void d 1302 _ transfer(void)//数据转换函数
{
年02 =年01 & amp;0x0f
nian 01 = nian 01 & gt;& gt4;
岳02 =岳01 & amp;0x0f
yue 01 = yue 01 & gt;& gt4;
ri02 = ri 01 & amp;0x0f
ri 01 = ri 01 & gt;& gt4;
Xiaoshi 02 = Xiaoshi 01 & amp;0x0f
Xiaoshi 1 = Xiaoshi 1 & gt;& gt4;
min 02 = min 01 & amp;0x0f
min 01 = min 01 & gt;& gt4;
sec 02 = sec 01 & amp;0x0f//取苗语信号的低四位。
sec 01 = sec 01 & gt;& gt4;//取高四位数
}
Void delay1302(int i) //延迟函数
{
uchar x,j;
for(x = 0;x & lt我;x++)
{
for(j = 0;j & lt125;j++){;}
}
}