搜档网
当前位置:搜档网 › 单片机日历时钟C程序

单片机日历时钟C程序

#include
#include
void delay(uint z) //延迟函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=40;y>0;y--);
}
void write_com(uchar com) //写指令函数
{
rs=0;
P0=com;
lcden=1;
delay(5);
lcden=0;
delay(5);
}
void write_dat(uchar dat) //写数据函数
{
rs=1;
P0=dat;
lcden=1;
delay(5);
lcden=0;
delay(5);
}
void init() //初始化函数
{
uchar num;
a=4;
nian=2011;
yue=11;
ri=30;
shi=23;
fen=59;
miao=55;
dula=0;
wela=0;
count=0;
lcden=0;
delay(5);
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
for(num=0;num<15;num++)
{
write_dat(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<12;num++)
{
write_dat(table1[num]);
delay(5);
}
TCON=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void write_sfm(uchar add,uchar dat)//时分秒函数
{
uchar shi,ge;
shi=dat/10;
ge=dat%10;
write_com(0x80+0x40+add);
write_dat(0x30+shi);
write_dat(0x30+ge);
}
void write_yr(uint add,uint dat) //月日函数
{
uchar shi,ge;
shi=dat/10;
ge=dat%10;
write_com(0x80+add);
write_dat(0x30+shi);
write_dat(0x30+ge);
}
void write_nian(uint add,uint dat) //年函数
{
uchar qian,bai,shi,ge;
qian=dat/1000;
bai=dat%1000/100;
shi=dat%100/10;
ge=dat%10;
write_com(0x80+add);
write_dat(0x30+qian);
write_dat(0x30+bai);
write_dat(0x30+shi);
write_dat(0x30+ge);
}
void keyscan() //按键扫描函数
{
rd=0;
if(shu==0)
{
if(k1==0)
{
delay(5);
if(k1==0)
{
while(!k1);
shu++;
TR0=0;
write_com(0x80+0x40+11);
write_com(0x0f);

}
}
}
if(shu==1)
{
if(k2==0)
{
delay(5);
if(k2==0)
{
while(!k2);
miao++;
if(miao==60)
miao=0;
write_sfm(10,miao);
write_com(0x80+0x40+11);
}
}
if(k3==0)
{
delay(5);
if(k3==0)
{
while(!k3);
miao--;
if(miao==-1)
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+11);
}
}
}
if(shu==1)
{
if(k1==0)
{
delay(5);
if(k1==0)
{
while(!k1);
shu++;
write_com(0x80+0x40+8);
write_com(0x0f);
}
}
}
if(shu==2)
{
if(k2==0)
{
delay(5);
if(k2==0)
{
while(!k2);
fen++;
if(fen==60)
fen=0;
write_sfm(7,fen);
write_com(0x80+0x40+8);
}
}
if(k3==0)
{
delay(5);
if(k3==0)
{
while(!k3);
fen--;
if(fen==-1)
fen=59;
write_sfm(7,fen);
write_com(0x80+0x40+8);
}
}
}
if(shu==2)
{
if(k1==0)
{
delay(5);
if(k1==0)
{
while(!k1);
shu++;
write_com(0x80+0x40+5);
write_com(0x0f);
}
}
}
if(shu==3)
{
if(k2==0)
{
delay(5);
if(k2==0)
{
while(!k2);
shi++;
if(shi==24)
shi=0;
write_sfm(4,shi);
write_com(0x80+0x40+5);
}
}
if(k3=

=0)
{
delay(5);
if(k3==0)
{
while(!k3);
shi--;
if(shi==-1)
shi=23;
write_sfm(4,shi);
write_com(0x80+0x40+5);
}
}
}
if(shu==3)
{
if(k1==0)
{
delay(5);
if(k1==0)
{
while(!k1);
//TR0=1;
shu++;
write_com(0x80+10);
write_com(0x0f);
}
}
}
if(shu==4)
{

if(k2==0)
{
delay(5);
if(k2==0)
{
while(!k2);
ri++;
if((yue==1)|(yue==3)|(yue==5)|(yue==7)|(yue==8)|(yue==10)|(yue==12))
{
if(ri==32)
ri=1;
}
if((yue==4)|(yue==6)|(yue==9)|(yue==11))
{
if(ri==31)
ri=1;
}
if(yue==2)
{
if(ri==29)
ri=1;
}
write_yr(9,ri);
write_com(0x80+10);
}
}
if(k3==0)
{
delay(5);
if(k3==0)
{
while(!k3);
ri--;
if((yue==1)|(yue==3)|(yue==5)|(yue==7)|(yue==8)|(yue==10)|(yue==12))
{
if(ri==0)
ri=31;
}
if((yue==4)|(yue==6)|(yue==9)|(yue==11))
{
if(ri==0)
ri=30;
}
if(yue==2)
{
if(ri==0)
ri=28;
}
write_yr(9,ri);
write_com(0x80+10);
}
}
}
if(shu==4)
{
if(k1==0)
{
delay(5);
if(k1==0)
{
while(!k1);
//TR0=1;
shu++;
write_com(0x80+7);
write_com(0x0f);
}
}
}
if(shu==5)
{
if(k2==0)
{
delay(5);
if(k2==0)
{
while(!k2);
yue++;
if(yue==13)
yue=1;
write_yr(6,yue);
write_com(0x80+7);
}
}
if(k3==0)
{
delay(5);
if(k3==0)
{
while(!k3);
yue--;
if(yue==0)
yue=12;
write_yr(6,yue);
write_com(0x80+7);
}
}
}
if(shu==5)
{
if(k1==0)
{
delay(5);
if(k1==0)
{
while(!k1);
//TR0=1;
shu++;
write_com(0x80+4);
write_com(0x0f);
}
}
}
if(shu==6)
{
if(k2==0)
{
delay(5);
if(k2==0)
{
while(!k2);
nian++;
write_nian(1,nian);
write_com(0x80+4);
}
}

}
if(shu==6)
{
if(k1==0)
{
delay(5);
if(k1==0)
{
while(!k1);
TR0=1;
shu=0;
write_com(0x0c);
}
}
}
}
void main() //主函数
{
init();
while(1)
{
keyscan();
if(count==147)
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
ri++;
if((yue==1)|(yue==3)|(yue==5)|(yue==7)|(yue==8)|(yue==10)|(yue==12))
{
if(ri==32)
{
ri=1;
yue++;
if(yue==13)
{
yue=1;
nian++;
write_nian(1,nian);
}
write_yr(6,yue);
}
}
if((yue==4)|(yue==6)|(yue==9)|(yue==11))
{
if(ri==31)
{
ri=1;
yue++;
if(yue==13)
{
yue=1;
nian++;
write_nian(1,nian);
}

write_yr(6,yue);
}
}
if(yue==2)
{
if(ri==29)
{
ri=1;
yue++;
if(yue==13)
{
yue=1;
nian++;
write_nian(1,nian);
}
write_yr(6,yue);
}
}
write_yr(9,ri);
a=a+4;
if(a>25)
a=0;
write_com(0x80+12);
for(b=a;bwrite_dat(tableweek[b]);
}
write_sfm(4,shi);
}
write_sfm(7,fen);
}
write_sfm(10,miao);
}
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
}

相关主题