电子时钟程序.docx

上传人:b****8 文档编号:10587729 上传时间:2023-02-21 格式:DOCX 页数:16 大小:16.51KB
下载 相关 举报
电子时钟程序.docx_第1页
第1页 / 共16页
电子时钟程序.docx_第2页
第2页 / 共16页
电子时钟程序.docx_第3页
第3页 / 共16页
电子时钟程序.docx_第4页
第4页 / 共16页
电子时钟程序.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

电子时钟程序.docx

《电子时钟程序.docx》由会员分享,可在线阅读,更多相关《电子时钟程序.docx(16页珍藏版)》请在冰豆网上搜索。

电子时钟程序.docx

电子时钟程序

#include//lcd1602数字钟可调整时间和日期

#defineuintunsignedint

#defineucharunsignedchar

//lcd_data=P0

//位定义

sbitlcdrs=P2^2;

sbitlcdrw=P2^1;

sbitlcden=P2^0;

sbitk1=P3^3;//mod

sbitk2=P3^2;//+

sbitk3=P3^1;//-

//函数声明

uchari,t=0,k1num=0;//t为中断次数计数,k1num为k1按下的次数

uintyear=2014;//year年

charh=0,m=0,s=0,w=7,month=5,day=1;//h时,m分,s秒,w星期,year年,month月,day日

ucharcodetable1[]={"2014-05-01THU"};//日期

ucharcodetable2[]={"00:

00:

00"};//时间

//延时zms

voiddelay(ucharz)

{

ucharx,y;

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

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

}

voidwrite_com(ucharcom)

{

lcdrs=0;

lcdrw=0;

P0=com;

delay(10);

lcden=1;

delay(10);

lcden=0;

}

//lcd写数据

voidwrite_dat(uchardat)

{

lcdrs=1;

lcdrw=0;

P0=dat;

delay(10);

lcden=1;

delay(10);

lcden=0;

}

voidMonday(void)

{

write_com(0x80+12);

write_dat('M');

write_com(0x80+13);

write_dat('O');

write_com(0x80+14);

write_dat('N');

}

voidTuesday(void)

{

write_com(0x80+12);

write_dat('T');

write_com(0x80+13);

write_dat('U');

write_com(0x80+14);

write_dat('E');

}

voidWednesday(void)

{

write_com(0x80+12);

write_dat('W');

write_com(0x80+13);

write_dat('E');

write_com(0x80+14);

write_dat('D');

}

voidThursday(void)

{

write_com(0x80+12);

write_dat('T');

write_com(0x80+13);

write_dat('H');

write_com(0x80+14);

write_dat('U');

}

voidFriday(void)

{

write_com(0x80+12);

write_dat('F');

write_com(0x80+13);

write_dat('R');

write_com(0x80+14);

write_dat('I');

}

voidSaturday(void)

{

write_com(0x80+12);

write_dat('S');

write_com(0x80+13);

write_dat('A');

write_com(0x80+14);

write_dat('T');

}

voidSunday(void)

{

write_com(0x80+12);

write_dat('S');

write_com(0x80+13);

write_dat('U');

write_com(0x80+14);

write_dat('N');

}

voiddisplay_week(ucharweek)//星期显示

{

switch(week)

{

case1:

Monday();break;

case2:

Tuesday();break;

case3:

Wednesday();break;

case4:

Thursday();break;

case5:

Friday();break;

case6:

Saturday();break;

case7:

Sunday();break;

}

}

//lcd初始设置

voidinit(void)

{

lcden=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

TMOD=0x01;

ET0=1;

EA=1;

TH0=0x3c;TL0=0xb0;//50ms

TR0=1;

write_com(0x80);//第一行

for(i=0;i<15;i++)

{write_dat(table1[i]);delay(5);}

write_com(0x80+0x40);//第二行

for(i=0;i<11;i++)

{write_dat(table2[i]);delay(5);}

}

voiddisplay_time(ucharad,uchartime)//时间显示

{

uchara,b;

a=time/10;b=time%10;

write_com(0x80+0x40+ad);

write_dat(0x30+a);

write_com(0x80+0x40+1+ad);

write_dat(0x30+b);

}

voiddisplay_date(uintnian,charyue,charri)//日期显示

{

uinty1,y2,y3,y4;

chara,b,c,d;

y1=nian/1000;//千位

y2=nian%1000/100;//百位

y3=nian%1000%100/10;//十位

y4=nian%1000%100%10;//个位

a=yue/10;

b=yue%10;

c=ri/10;

d=ri%10;

write_com(0x80+1);

write_dat(0x30+y1);

write_com(0x80+2);

write_dat(0x30+y2);

write_com(0x80+3);

write_dat(0x30+y3);

write_com(0x80+4);

write_dat(0x30+y4);

write_com(0x80+6);

write_dat(0x30+a);

write_com(0x80+7);

write_dat(0x30+b);

write_com(0x80+9);

write_dat(0x30+c);

write_com(0x80+10);

write_dat(0x30+d);

}

voidkeyscan(void)//按键扫描

{

if(k1==0)

{

delay(10);

if(k1==0)

{

k1num++;TR0=0;t=0;

while(!

k1);

if(k1num==1)

{write_com(0x80+0x40+11);write_com(0x0f);}//s

if(k1num==2)

{write_com(0x80+0x40+8);}//m

if(k1num==3)

{write_com(0x80+0x40+5);}//h

if(k1num==4)

{write_com(0x80+14);}//week

if(k1num==5)

{write_com(0x80+10);}//day

if(k1num==6)

{write_com(0x80+7);}//month

if(k1num==7)

{write_com(0x80+4);}//year

if(k1num==8)

{k1num=0;write_com(0x0c);TR0=1;}

}

}

if(k1num!

=0)

{

if(k2==0)

{

delay(5);

if(k2==0)

{

while(!

k2);

if(k1num==1)

{

s++;

if(s==60)

s=0;

display_time(10,s);

}

if(k1num==2)

{

m++;

if(m==60)

m=0;

display_time(7,m);

}

if(k1num==3)

{

h++;

if(h==24)

h=0;

display_time(4,h);

}

if(k1num==4)

{

w++;

if(w==8)

w=1;

display_week(w);

}

if(k1num==5)

{

day++;

if(day==32)

day=1;

display_date(year,month,day);

}

if(k1num==6)

{

month++;

if(month==13)

month=1;

display_date(year,month,day);

}

if(k1num==7)

{

year++;

display_date(year,month,day);

}

}

}

if(k3==0)

{

delay(10);

if(k3==0)

{

while(!

k3);

if(k1num==1)

{

s--;

if(s==-1)

s=59;

display_time(10,s);

}

if(k1num==2)

{

m--;

if(m==-1)

m=59;

display_time(7,m);

}

if(k1num==3)

{

h--;

if(h==-1)

h=23;

display_time(4,h);

}

if(k1num==4)

{

w--;

if(w==0)

w=7;

display_week(w);

}

if(k1num==5)

{

day--;

if(day==0)

day=31;

display_date(year,month,day);

}

if(k1num==6)

{

month--;

if(month==0)

month=12;

display_date(year,month,day);

}

if(k1num==7)

{

year--;

display_date(year,month,day);

}

}

}

}

display_date(year,month,day);

display_week(w);

display_time(10,s);

display_time(7,m);

display_time(4,h);

}

voidmain(void)//主函数

{

init();

while

(1)

{

keyscan();

}

}

voidtimer0()interrupt1//定时器T0中断函数

{

ucharleap(ucharyear)//判断是否闰年并返回二月份的天数

{//闰年返回29,平年返回28

year+=2000;

if(year%4==0)

{if(year%100==0)

{if(year%400==0)

return29;

elsereturn28;

}

elsereturn29;

}

elsereturn28;

}

ucharmon(ucharmonth)//计算并返回每个月的天数

{

switch(month)

{

case1:

case3:

case5:

case7:

case8:

case10:

case12:

return31;break;//1,3,5,7,8,10,12月每月31天

case4:

case6:

case9:

case11:

return30;break;//4,6,9,11月每月30天

case2:

returnleap(year);break;//返回二月份的天数

default:

break;

}

}

voidtime0()interrupt1

{

TH0=(65536-46083)/256;

TL0=(65536-46083)%256;

t++;

if(t==20)

{

t=0;

s++;

if(s==60)

{

s=0;

m++;

if(m==60)

{

m=0;

h++;

if(h==24)

{

h=0;

n=mon(month);

day++;

w++;

if(++day>n)

{

day=01;

month++;

if(month==13)

{

month=0;

year++;

}

write_sf(3,year);

write_com(0x80+3);

}

write_sf(6,month);

write_com(0x80+6);

}

write_sf(14,w);

write_com(0x80+14);

write_sf(9,day);

write_com(0x80+9);

}

write_sfm(4,h);

write_com(0x80+0x40+4);

}

write_sfm(7,m);

write_com(0x80+0x40+7);

}

write_sfm(10,s);

write_com(0x80+0x40+10);

}}

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

当前位置:首页 > 高等教育 > 研究生入学考试

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

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