at89c51时钟闹钟程序.docx
《at89c51时钟闹钟程序.docx》由会员分享,可在线阅读,更多相关《at89c51时钟闹钟程序.docx(26页珍藏版)》请在冰点文库上搜索。
![at89c51时钟闹钟程序.docx](https://file1.bingdoc.com/fileroot1/2023-5/15/0595c637-27ed-4d6a-a603-cb6b5e4dc3b5/0595c637-27ed-4d6a-a603-cb6b5e4dc3b51.gif)
at89c51时钟闹钟程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineshumaP1
#definewP3
sbitwei=P2^2;
sbitduan=P2^3;
sbitbeep=P2^1;
sbitk1=P0^0;
sbitk2=P0^1;
sbitk3=P0^2;
sbitk4=P0^3;
sbitk5=P0^4;
sbitled=P2^0;
ucharcodeduanma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
ucharcodeweekma[7]={0x80,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0};
ucharshi,fen,miao,tt;
ucharshi1,fen1,miao1;
ucharshi2,fen2,miao2;
ucharyue,ri,week;
uintnian;
ucharset1=1,set2=1;
voidchushi();//初始化
voiddisplay();//时钟显示
voiddisplay0();
voiddisplay1();//闹钟1显示
voiddisplay2();//闹钟2显示
voidnaozhong();//闹钟报时
voidbaoshi();//整点报时
voidset_shizhong();//时钟设置
voidset_naozhong1();//闹钟1设置
voidset_naozhong2();//闹钟2设置
voidset_riqi();
voidkey_change();//选择数码管显示的内容
voidkey_set();//选择修改的数码
ucharjia(uchar);
ucharjian(uchar);
voidxingqi();
voiddelay1(uintz);
voidmain()
{
chushi();
while
(1)
{
xingqi();
set_shizhong();
set_naozhong1();
set_naozhong2();
set_riqi();
key_change();
key_set();
if(set1==1)
display();
if(set1==2)
display0();
if(set1==3)
display1();
if(set1==4)
display2();
w=weekma[week%7];
baoshi();
naozhong();
}
}
voidchushi()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
shi=0;
fen=0;
miao=0;
shi1=1;
fen1=0;
miao1=0;
shi2=2;
fen2=0;
miao2=0;
nian=2011;
yue=4;
ri=12;
week=2;
tt=0;
beep=0;
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt>=20)
{
tt=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
ri++;
week++;
if(ri==31)
{
ri=1;
yue++;
if(yue==13)
{
yue=1;
nian++;
}
}
}
}
}
}
}
voiddisplay()
{
led=0;
duan=1;
shuma=duanma[shi/10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xfe;
wei=0;
delay1(3);
duan=1;
shuma=duanma[shi%10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xfd;
wei=0;
delay1(3);
duan=1;
shuma=0x40;
duan=0;
shuma=0xff;
wei=1;
shuma=0xfb;
wei=0;
delay1(3);
duan=1;
shuma=duanma[fen/10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xf7;
wei=0;
delay1(3);
duan=1;
shuma=duanma[fen%10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xef;
wei=0;
delay1(3);
duan=1;
shuma=0x40;
duan=0;
shuma=0xff;
wei=1;
shuma=0xdf;
wei=0;
delay1(3);
duan=1;
shuma=duanma[miao/10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xbf;
wei=0;
delay1(3);
duan=1;
shuma=duanma[miao%10];
duan=0;
shuma=0xff;
wei=1;
shuma=0x7f;
wei=0;
delay1(3);
}
voiddisplay0()
{
ucharnian1,nian2,nian3,nian4;
nian1=nian/1000;
nian2=nian%1000/100;
nian3=nian%1000%100/10;
nian4=nian%1000%100%10;
led=0;
duan=1;
shuma=duanma[nian1];
duan=0;
shuma=0xff;
wei=1;
shuma=0xfe;
wei=0;
delay1(3);
duan=1;
shuma=duanma[nian2];
duan=0;
shuma=0xff;
wei=1;
shuma=0xfd;
wei=0;
delay1(3);
duan=1;
shuma=duanma[nian3];
duan=0;
shuma=0xff;
wei=1;
shuma=0xfb;
wei=0;
delay1(3);
duan=1;
shuma=duanma[nian4];
duan=0;
shuma=0xff;
wei=1;
shuma=0xf7;
wei=0;
delay1(3);
duan=1;
shuma=duanma[yue/10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xef;
wei=0;
delay1(3);
duan=1;
shuma=duanma[yue%10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xdf;
wei=0;
delay1(3);
duan=1;
shuma=duanma[ri/10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xbf;
wei=0;
delay1(3);
duan=1;
shuma=duanma[ri%10];
duan=0;
shuma=0xff;
wei=1;
shuma=0x7f;
wei=0;
delay1(3);
}
voiddisplay1()
{
led=1;
duan=1;
shuma=duanma[shi1/10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xfe;
wei=0;
delay1(3);
duan=1;
shuma=duanma[shi1%10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xfd;
wei=0;
delay1(3);
duan=1;
shuma=0x40;
duan=0;
shuma=0xff;
wei=1;
shuma=0xfb;
wei=0;
delay1(3);
duan=1;
shuma=duanma[fen1/10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xf7;
wei=0;
delay1(3);
duan=1;
shuma=duanma[fen1%10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xef;
wei=0;
delay1(3);
duan=1;
shuma=0x40;
duan=0;
shuma=0xff;
wei=1;
shuma=0xdf;
wei=0;
delay1(3);
duan=1;
shuma=duanma[miao1/10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xbf;
wei=0;
delay1(3);
duan=1;
shuma=duanma[miao1%10];
duan=0;
shuma=0xff;
wei=1;
shuma=0x7f;
wei=0;
delay1(3);
}
voiddisplay2()
{
led=1;
duan=1;
shuma=duanma[shi2/10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xfe;
wei=0;
delay1(3);
duan=1;
shuma=duanma[shi2%10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xfd;
wei=0;
delay1(3);
duan=1;
shuma=0x40;
duan=0;
shuma=0xff;
wei=1;
shuma=0xfb;
wei=0;
delay1(3);
duan=1;
shuma=duanma[fen2/10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xf7;
wei=0;
delay1(3);
duan=1;
shuma=duanma[fen2%10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xef;
wei=0;
delay1(3);
duan=1;
shuma=0x40;
duan=0;
shuma=0xff;
wei=1;
shuma=0xdf;
wei=0;
delay1(3);
duan=1;
shuma=duanma[miao2/10];
duan=0;
shuma=0xff;
wei=1;
shuma=0xbf;
wei=0;
delay1(3);
duan=1;
shuma=duanma[miao2%10];
duan=0;
shuma=0xff;
wei=1;
shuma=0x7f;
wei=0;
delay1(3);
}
voiddelay1(uintz)//ms延时
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
ucharjia(ucharn)//加1函数
{
if(k3==0)
{
delay1(15);
if(k3==0)
{
n++;
while(!
k3);
}
}
return(n);
}
ucharjian(ucharm)//减1函数
{
if(k4==0)
{
delay1(15);
if(k4==0)
{
m--;
while(!
k4);
if(m<0)
{m=0;}
}
}
return(m);
}
voidxingqi()
{
if(k5==0)
{
delay1(15);
if(k5==0)
{
week++;
while(!
k5);
}
}
}
voidkey_change()//k1按键扫描
{
if(k1==0)
{
delay1(15);
if(k1==0)
{
set1++;
while(!
k1);
if(set1==5)
{set1=1;}
}
}
}
voidkey_set()//k2按键扫描
{
if(k2==0)
{
delay1(15);
if(k2==0)
{
set2++;
while(!
k2);
if(set2==5)
{set2=1;}
}
}
}
voidbaoshi()//整点报时函数
{
if(fen==00&&miao==00)
{
beep=1;
}
if(miao==4)
{
beep=0;
}
}
voidnaozhong()//闹钟函数
{
uintx;
if(shi==shi1&&fen==fen1&&miao==miao1)
{
for(x=0;x<800;x++)
{
beep=!
beep;
delay1(10);
}
}
if(shi==shi2&&fen==fen2&&miao==miao2)
{
for(x=0;x<800;x++)
{
beep=!
beep;
delay1(10);
}
}
}
voidset_riqi()
{
if(set1==2)
{
if(set2==2)
{
nian=jia(nian);
nian=jian(nian);
}
if(set2==3)
{
yue=jia(yue);
if(yue==13)
{yue=1;}
yue=jian(yue);
if(yue==-1)
{yue=12;}
}
if(set2==4)
{
ri=jia(ri);
if(ri==31)
{ri=1;}
ri=jian(ri);
if(ri==-1)
{ri=30;}
}
}
}
voidset_shizhong()
{
if(set1==1)
{
if(set2==2)
{
shi=jia(shi);
if(shi==24)
{shi=0;}
shi=jian(shi);
if(shi==-1)
{shi=23;}
}
if(set2==3)
{
fen=jia(fen);
if(fen==60)
{fen=0;}
fen=jian(fen);
if(fen==-1)
{fen=59;}
}
if(set2==4)
{
miao=jia(miao);
if(miao==60)
{miao=0;}
miao=jian(miao);
if(miao==-1)
{miao=59;}
}
}
}
voidset_naozhong1()
{
if(set1==3)
{
if(set2==2)
{
shi1=jia(shi1);
if(shi1==24)
{shi1=0;}
shi1=jian(shi1);
if(shi1==-1)
{shi1=23;}
}
if(set2==3)
{
fen1=jia(fen1);
if(fen1==60)
{fen1=0;}
fen1=jian(fen1);
if(fen1==-1)
{fen1=59;}
}
if(set2==4)
{
miao1=jia(miao1);
if(miao1==60)
{miao1=0;}
miao1=jian(miao1);
if(miao1==-1)
{miao1=59;}
}
}
}
voidset_naozhong2()
{
if(set1==4)
{
if(set2==2)
{
shi2=jia(shi2);
if(shi2==24)
{shi2=0;}
shi2=jian(shi2);
if(shi2==-1)
{shi2=23;}
}
if(set2==3)
{
fen2=jia(fen2);
if(fen2==60)
{fen2=0;}
fen2=jian(fen2);
if(fen2==-1)
{fen2=59;}
}
if(set2==4)
{
miao2=jia(miao2);
if(miao2==60)
{miao2=0;}
miao2=jian(miao2);
if(miao2==-1)
{miao2=59;}
}
}
}