基于51单片机的1602液晶显示时钟.docx
- 文档编号:10866516
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:22
- 大小:16.49KB
基于51单片机的1602液晶显示时钟.docx
《基于51单片机的1602液晶显示时钟.docx》由会员分享,可在线阅读,更多相关《基于51单片机的1602液晶显示时钟.docx(22页珍藏版)》请在冰豆网上搜索。
基于51单片机的1602液晶显示时钟
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable1[]="0123456789-ab=";
sbitlcden=P2^7;
sbitlcdrs=P2^5;
sbitwr=P3^6;
sbitk1=P3^0;
sbitk2=P3^1;
sbitk3=P3^2;
sbitk4=P3^3;
sbitk5=P3^7;
charnum,num0,num1,num2,numh=19,numm=58,nums=0,month=12,day=27,count=0,cach[19],test=0,pstn=0,tset=0,pste=0;
uintyear=2013,a=45481,b=45481;
voidinit()
{
TMOD=0x01;
TH0=(65536-a)/256;
TL0=(65536-b)%256;
EA=1;
ET0=1;
TR0=1;
}
voidtimer0()interrupt1
{
TH0=(65536-a)/256;
TL0=(65536-b)%256;
count++;
if(count==20)
{
count=0;
nums++;
}
if(nums==60)
{
nums=0;
numm++;
}
if(numm==60)
{
numm=0;
numh++;
}
if(numh==24)
{
numh=0;
day++;
}
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_com(ucharcom)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_data(uchardate)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit1()
{
wr=0;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
voidxianshi()
{
intc,y,m,t,w;
c=year/100;
y=year%100;
m=month;
t=day;
if(m==1)
{
y=y-1;
m=13;
}
elseif(m==2)
{
y=y-1;
m=14;
}
w=(c/4-2*c+y/4+y+(26*(m+1))/10+t-1)%7;
if(w<=0)w+=7;
cach[0]=table1[numh/10];
cach[1]=table1[numh%10];
cach[2]=table1[10];
cach[3]=table1[numm/10];
cach[4]=table1[numm%10];
cach[5]=table1[10];
cach[6]=table1[nums/10];
cach[7]=table1[nums%10];
cach[8]=table1[year/1000];
cach[9]=table1[year%1000/100];
cach[10]=table1[year%100/10];
cach[11]=table1[year%10];
cach[12]=table1[10];
cach[13]=table1[month/10];
cach[14]=table1[month%10];
cach[15]=table1[10];
cach[16]=table1[day/10];
cach[17]=table1[day%10];
cach[18]=table1[w];
write_com(0x80+4);
for(num=0;num<8;num++)
{
write_data(cach[num]);
delay
(1);
}
write_com(0x80+0x40+3);
for(num=8;num<18;num++)
{
write_data(cach[num]);
delay
(1);
}
write_com(0x80+0x40+15);
write_data(cach[18]);
delay
(1);
}
voidxianshi1()
{
intc,y,m,t,w;
uchard;
c=year/100;
y=year%100;
m=month;
t=day;
if(m==1)
{
y=y-1;
m=13;
}
elseif(m==2)
{
y=y-1;
m=14;
}
w=(c/4-2*c+y/4+y+(26*(m+1))/10+t-1)%7;
if(w<=0)w+=7;
cach[0]=table1[num0/10];
cach[1]=table1[num0%10];
cach[2]=table1[10];
cach[3]=table1[num1/10];
cach[4]=table1[num1%10];
cach[5]=table1[10];
cach[6]=table1[num2/10];
cach[7]=table1[num2%10];
cach[8]=table1[year/1000];
cach[9]=table1[year%1000/100];
cach[10]=table1[year%100/10];
cach[11]=table1[year%10];
cach[12]=table1[10];
cach[13]=table1[month/10];
cach[14]=table1[month%10];
cach[15]=table1[10];
cach[16]=table1[day/10];
cach[17]=table1[day%10];
cach[18]=table1[w];
if(pstn==0)
{
d++;
if(d<3)cach[0]=cach[1]=table1[14];
if(d>=7)d=0;
}
elseif(pstn==1)
{
d++;
if(d<3)cach[3]=cach[4]=table1[14];
if(d>=7)d=0;
}
elseif(pstn==2)
{
d++;
if(d<3)cach[6]=cach[7]=table1[14];
if(d>=7)d=0;
}
elseif(pstn==3)
{
d++;
if(d<3)cach[8]=cach[9]=cach[10]=cach[11]=table1[14];
if(d>=7)d=0;
}
elseif(pstn==4)
{
d++;
if(d<3)cach[13]=cach[14]=table1[14];
if(d>=7)d=0;
}
elseif(pstn==5)
{
d++;
if(d<3)cach[16]=cach[17]=table1[14];
if(d>=7)d=0;
}
write_com(0x80+4);
for(num=0;num<8;num++)
{
write_data(cach[num]);
delay
(1);
}
write_com(0x80+0x40+3);
for(num=8;num<18;num++)
{
write_data(cach[num]);
delay
(1);
}
write_com(0x80+0x40+15);
write_data(cach[18]);
delay
(1);
}
voidxianshi2()
{
uchard;
cach[0]=table1[11];
cach[1]=table1[13];
cach[2]=table1[a/10000];
cach[3]=table1[a%10000/1000];
cach[4]=table1[a%1000/100];
cach[5]=table1[a%100/10];
cach[6]=table1[a%10];
cach[7]=table1[12];
cach[8]=table1[13];
cach[9]=table1[b/10000];
cach[10]=table1[b%10000/1000];
cach[11]=table1[b%1000/100];
cach[12]=table1[b%100/10];
cach[13]=table1[b%10];
if(pste==0)
{
d++;
if(d<3)cach[2]=cach[3]=cach[4]=cach[5]=cach[6]=table1[14];
if(d>=7)d=0;
}
elseif(pste==1)
{
d++;
if(d<3)cach[9]=cach[10]=cach[11]=cach[12]=cach[13]=table1[14];
if(d>=7)d=0;
}
write_com(0x80+4);
for(num=0;num<7;num++)
{
write_data(cach[num]);
delay
(1);
}
write_com(0x80+0x40+4);
for(num=7;num<14;num++)
{
write_data(cach[num]);
delay
(1);
}
}
voidriqi()
{
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
if(day>=32)
{
day=1;
month++;
}
}
elseif(month==2)
{
if((year%4==0&&year%100!
=0)||year%400==0)
{
if(day>=30)
{
day=1;
month++;
}
}
else
{
if(day>=29)
{
day=1;
month++;
}
}
}
else
{
if(day>=31)
{
day=1;
month++;
}
}
if(month>=13)
{
month=1;
year++;
}
}
unsignedintshezhi()
{
chartemp0,temp1,temp2;
num0=temp0=numh;
num1=temp1=numm;
num2=temp2=nums;
while(test)
{
if(!
k2)
{
delay(5);
if(!
k2)
{
if(pstn==0)
{
num0++;
if(num0==24)num0=0;
}
elseif(pstn==1)
{
num1++;
if(num1==60)num1=0;
}
elseif(pstn==2)
{
num2++;
if(num2==60)num2=0;
}
elseif(pstn==3)
{
year++;
}
elseif(pstn==4)
{
month++;
if(month==13)month=1;
}
elseif(pstn==5)
{
day++;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
if(day>=32)day=1;
}
elseif(month==2)
{
if((year%4==0&&year%100!
=0)||year%400==0)
{
if(day>=30)day=1;
}
else
{
if(day>=29)day=1;
}
}
else
{
if(day>=31)day=1;
}
}
while(!
k2);
}
}
if(!
k3)
{
delay(5);
if(!
k3)
{
if(pstn==0)
{
num0--;
if(num0<0)num0=23;
}
elseif(pstn==1)
{
num1--;
if(num1<0)num1=59;
}
elseif(pstn==2)
{
num2--;
if(num2<0)num2=59;
}
elseif(pstn==3)
{
year--;
}
elseif(pstn==4)
{
month--;
if(month<1)month=12;
}
elseif(pstn==5)
{
day--;
if(day==0)
{
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)day=31;
elseif(month==2)
{
if((year%4==0&&year%100!
=0)||year%400==0)day=29;
elseday=28;
}
elseday=30;
}
}
while(!
k3);
}
}
if(!
k1)
{
delay(5);
if(!
k1)
{
pstn++;
if(pstn==6)
{
pstn=0;
test=0;
}
while(!
k1);
}
}
if(!
k4)
{
delay(5);
if(!
k4)
{
pstn=0;
test=0;
}
while(!
k4);
}
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
if(day>=32)
{
day=1;
}
}
elseif(month==2)
{
if((year%4==0&&year%100!
=0)||year%400==0)
{
if(day>=30)
{
day=1;
}
}
else
{
if(day>=29)
{
day=1;
}
}
}
else
{
if(day>=31)
{
day=1;
}
}
if(month>=13)
{
month=1;
}
xianshi1();
}
if(num0==temp0&&num1==temp1&&num2==temp2);
else
{
numh=num0;
numm=num1;
nums=num2;
}
return0;
}
unsignedintjiaozhun()
{
write_com(0x01);
while(tset)
{
if(!
k2)
{
delay(5);
if(!
k2)
{
if(pste==0)
{
a++;
if(a>65536)a=65536;
}
elseif(pste==1)
{
b++;
if(b>65536)b=65536;
}
}
while(!
k2);
}
if(!
k3)
{
delay(5);
if(!
k3)
{
if(pste==0)
{
a--;
}
elseif(pste==1)
{
b--;
}
}
while(!
k3);
}
if(!
k5)
{
delay(5);
if(!
k5)
{
pste++;
if(pste==2)
{
pste=0;
tset=0;
}
}
while(!
k5);
}
xianshi2();
}
return0;
}
main()
{
init();
wr=0;
init1();
while
(1)
{
riqi();
xianshi();
if(!
k1)
{
delay(5);
if(!
k1)
{
while(!
k1);
test=1;
shezhi();
}
}
if(!
k5)
{
delay(5);
if(!
k5)
{
while(!
k5);
tset=1;
jiaozhun();
}
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 1602 液晶显示 时钟