基于51单片机的电子万年历.docx

上传人:b****6 文档编号:4722857 上传时间:2022-12-07 格式:DOCX 页数:14 大小:27.23KB
下载 相关 举报
基于51单片机的电子万年历.docx_第1页
第1页 / 共14页
基于51单片机的电子万年历.docx_第2页
第2页 / 共14页
基于51单片机的电子万年历.docx_第3页
第3页 / 共14页
基于51单片机的电子万年历.docx_第4页
第4页 / 共14页
基于51单片机的电子万年历.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

基于51单片机的电子万年历.docx

《基于51单片机的电子万年历.docx》由会员分享,可在线阅读,更多相关《基于51单片机的电子万年历.docx(14页珍藏版)》请在冰豆网上搜索。

基于51单片机的电子万年历.docx

基于51单片机的电子万年历

#include

typedefunsignedcharu8;

typedefunsignedintu16;

sbitA=P2^0;

sbitBA=P2^1;

sbitC=P2^2;

sbitled=P3^0;

sbits7=P3^7;

/*k1设置时间,k2定时。

k1,k2使用不自动弹起按键。

k3时分秒选择,k4加数字,k5减数字。

*/

sbitk1=P1^0;

sbitk2=P1^1;

sbitk3=P1^2;

sbitk4=P1^3;

sbitk5=P1^4;

u8count=0,sec,min=44,hour=8,mon=9,day=28,ss=0;s=60,m=60,h=24,month=12,d=31;

u16year=2015,y=9999;

#defineDATAP0

 

u16codetable[]={0x3f,0x06,0x5b,

0x4f,0x66,0x6d,

0x7d,0x07,0x7f,

0x6f,0x77,0x7c,

0x39,0x5e,0x79,

0x71};

//共阴数码管0-F编码

 

voiddelay(u16z)

{

u16x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

/*通过count获得hour,min,sec变量值*/

voidtimecontrol()

{

sec++;

if(sec==60)

{

sec=0;

min++;

if(min==60)

{

min=0;

hour++;

if(hour>=24)//1d

{

hour=0;

day++;

switch(mon){

case1:

case3:

case5:

case7:

case8:

case10:

case12:

if(day==32)

{//一个月

day=0;

mon++;

}

break;

case4:

case6:

case9:

case11:

if(day==31)

{//一个月

day=0;

mon++;

}

break;

default:

//2月

if((year%4==0&&year%100!

=0)||(year%100==0&&year%400==0))//闰年

{

if(day==30)

{

day=0;

mon++;

}

}

else

{

if(day==29)

{

day=0;

mon++;

}

}

break;

}

}

if(mon>=12)//1年

{

mon=0;

year++;

if(year>=9999)

year=0;

}

}

}

}

voiddisplay(u16year1,u8mon1,u8day1,u8zs,u8zm,u8zh)

{

led=1;

DATA=0x00;

A=0;

BA=0;

C=0;

DATA=table[zh/10];

delay(3);

DATA=0x00;

A=1;

BA=0;

C=0;

led=1;

DATA=table[zh%10]|0x80;

delay(3);

DATA=0x00;

A=0;

BA=1;

C=0;

led=1;

DATA=table[zm/10];

delay(3);

DATA=0x00;

A=1;

BA=1;

C=0;

led=1;

DATA=table[zm%10]|0x80;

delay(3);

DATA=0x00;

A=0;

BA=0;

C=1;

led=1;

DATA=table[zs/10];

delay(3);

DATA=0x00;

A=1;

BA=0;

C=1;

led=1;

DATA=table[zs%10]|0x80;

delay(3);

 

DATA=0x00;

led=0;

A=0;

BA=0;

C=0;

DATA=table[year1/1000];

delay(3);

 

DATA=0x00;

A=1;

BA=0;

C=0;

led=0;

DATA=table[year1%1000/100];

delay(3);

 

DATA=0x00;

A=0;

BA=1;

C=0;

led=0;

DATA=table[year1%1000%100/10];

delay(3);

 

DATA=0x00;

A=1;

BA=1;

C=0;

led=0;

DATA=table[year1%10];

delay(3);

 

DATA=0x00;

A=0;

BA=0;

C=1;

led=0;

DATA=table[mon1/10];

delay(3);

 

DATA=0x00;

A=1;

BA=0;

C=1;

led=0;

DATA=table[mon1%10];

delay(3);

 

DATA=0x00;

A=0;

BA=1;

C=1;

led=0;

DATA=table[day1/10];

delay(3);

 

DATA=0x00;

A=1;

BA=1;

C=1;

led=0;

DATA=table[day1%10];

delay(3);

 

}

voidkeyscan_settime()//时间设置模块

{

u16ye;u8mo,da,st,mt,ht;

if(k1==0)

{

delay(10);

if(k1==0)

{

st=sec,mt=min,ht=hour,ye=year,mo=mon,da=day;

TR0=0;//关闭定时器

while(k1==0)//等待用户按键

{

display(ye,mo,da,st,mt,ht);

if(k3==0)

{

delay(10);

if(k3==0)

{

while(!

k3);

ss++;

if(ss==6)ss=0;

}

}

/*通过ss选择时分秒设置*/

if(k4==0)//加数

{

delay(10);

if(k4==0)

{

while(!

k4);

switch(ss)

{

case0:

st++;if(st==60)st=0;break;

case1:

mt++;if(mt==60)mt=0;break;

case2:

ht++;if(ht==24)ht=0;break;

case3:

ye++;if(ye==9999)ye=0;break;

case4:

mo++;if(mo==13)mo=0;break;

case5:

da++;if(da==32)da=0;break;

default:

;

}

}

}

if(k5==0)//减数

{

delay(10);

if(k5==0)

{

while(!

k5);

switch(ss)

{

case0:

if(st>0)st--;

elsest=0;break;

case1:

if(mt>0)mt--;

elsemt=0;break;

case2:

if(ht>0)ht--;

elseht=0;break;

case3:

if(ye>0)ye--;

elseye=0;break;

case4:

if(mo>0)mo--;

elsemo=0;break;

case5:

if(da>0)da--;

elseda=0;break;

default:

;

}

}

}

}

TR0=1;

sec=st,min=mt,hour=ht,day=da,mon=mo,year=ye;

}

}

display(year,mon,day,sec,min,hour);

}

voidkeyscan_time()//用户定时模块

{

if(k2==0)

{

delay(10);

if(k2==0)

{

s=sec;m=min;h=hour,y=year,month=mon,d=day;

while(k2==0)//开始定时设置

{

display(y,month,d,s,m,h);

if(k3==0)

{

delay(10);

if(k3==0)

{

while(!

k3);

ss++;

if(ss==6)ss=0;

}

}

/*通过ss选择时分秒设置*/

if(k4==0)//加数

{

delay(10);

if(k4==0)

{

while(!

k4);

switch(ss)

{

case0:

s++;if(s==60)s=0;break;

case1:

m++;if(m==60)m=0;break;

case2:

h++;if(h==24)h=0;break;

case3:

y++;if(y==9999)y=0;break;

case4:

month++;if(month==13)month=0;break;

case5:

d++;if(d==32)d=0;break;

default:

;

}

}

}

if(k5==0)//减数

{

delay(10);

if(k5==0)

{

while(!

k5);

switch(ss)

{

case0:

if(s>0)s--;

elses=0;break;

case1:

if(m>0)m--;

elsem=0;break;

case2:

if(h>0)h--;

elseh=0;break;

case3:

if(y>0)y--;

elsey=0;break;

case4:

if(month>0)month--;

elsemonth=0;break;

case5:

if(d>0)d--;

elsed=0;break;

default:

;

}}

}

}

}

}

}

voidbuz()

{

if((year==y)&&(mon==month)&&(day==d)&&(hour==h)&&(min==m)&&(sec==s))

{

s7=0;

delay(1000);

s7=1;

}

}

voidtime0_init()

{

TMOD=0x01;

TH0=0x4b;

TL0=0xfe;

EA=1;

ET0=1;

TR0=1;

}

voidmain(void)

{

time0_init();

while

(1)

{

keyscan_settime();

keyscan_time();

buz();

}

}

voidTime0()interrupt1

{

TH0=0x4b;

TL0=0xfe;

count++;

if(count==20)

{

count=0;

timecontrol();

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 动物植物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1