单片机万年历毕业设计

这个不难。互联网上到处都是。日历芯片可以选择DS1302,也不会花几个钱。单片机选STC系列,也不会花几个大洋。

原理超级简单,百度一下就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++){;}

}

}