电子钟含有闹钟功能.docx
- 文档编号:26575597
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:15
- 大小:15.91KB
电子钟含有闹钟功能.docx
《电子钟含有闹钟功能.docx》由会员分享,可在线阅读,更多相关《电子钟含有闹钟功能.docx(15页珍藏版)》请在冰豆网上搜索。
电子钟含有闹钟功能
#include
typedefunsignedcharuint8;
typedefunsignedintuint16;
uint8number[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40};
sbitkey1=P3^4;
sbitkey2=P3^5;
sbitkey3=P3^6;
sbitkey4=P3^3;
sbitspeaker=P1^0;
voidsetclock();
voidsolveclock();
voiddelay();
voidtimerinit();
voiddisplay(uint8u,uint8v,uint8w);
intkey();
voidchoice();
uint16aa,bb,cc,temp;//分别代表时分秒寄存器
uint8dd;//按键4的标志
intas,T_n;
intsethour,setmin,setsec;
staticinte;
intflag_set=0;
/***************开始闪烁*****************/
/*voidstart_flash(void)
{ET1=0;
T_n=0;
if(dd==0)
{if(as==1)
{
display(00,bb,aa);
if(as==2)
display(cc,00,aa);
if(as==3)
display(cc,bb,00);}}
else
{if(as==1)
display(00,setmin,setsec);
if(as==2)
display(sethour,00,setsec);
if(as==3)
display(sethour,setmin,00);}
//TH1=(65536-50000)/256;
//TL1=(65536-50000)%256;
//TR1=1;
ET1=1;
}*/
/*
*停止clock数字闪烁
*/
/*voidstop_flash(void)
{
ET1=0;
TR1=0;
if(dd==0)
display(cc,bb,aa);
else
display(sethour,setmin,setsec);
}*/
voidmain()
{aa=0,bb=0,cc=0;
speaker=0;
timerinit();
T_n=0;
while
(1)
{
solveclock();
if((key()!
=0)&&(dd==0))
choice();
if(dd==1)
{setclock();
}
}
}
/*********延时程序************/
voiddelay()
{uint16m,x;
for(m=0;m<10;m++)
for(x=0;x<50;x++);
}
voiddelay2()
{
uint16y;
for(y=0;y<800;y++);
}
/*****************定时器中断初始化*********************/
voidtimerinit()
{TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET1=1;
TR1=1;
EA=1;
}
/*********************动态扫描程序**********************/
voiddisplay(uint8u,uint8v,uint8w)
{
P2=0xfe;
if(e==3)
{
if(flag_set==0)
P0=number[w%10];
else
P0=0x00;
delay();}
else
P0=number[w%10];
delay();
P2=0xfd;
if(e==3)
{
if(flag_set==0)
P0=number[w/10];
else
P0=0x00;
delay();}
else
P0=number[w/10];
delay();
P2=0xfb;
P0=number[10];
delay();
P2=0xf7;
if(e==2)
{
if(flag_set==0)
P0=number[v%10];
else
P0=0x00;
delay();}
else
P0=number[v%10];
delay();
P2=0xcf;
if(e==2)
{
if(flag_set==0)
P0=number[v/10];
else
P0=0x00;
delay();}
else
P0=number[v/10];
delay();
P2=0xdf;
P0=number[10];
delay();
P2=0xbf;
if(e==1)
{
if(flag_set==0)
P0=number[u%10];
else
P0=0x00;
delay();}
else
P0=number[u%10];
delay();
P2=0x7f;
if(e==1)
{
if(flag_set==0)
P0=number[u/10];
else
P0=0x00;
delay();}
else
P0=number[u/10];
delay();
}
/******************按键程序*************/
staticintl,c,d;
intkey()
{
if(key1==0)
{delay();
if(key1==0)
TR0=0;
e++;
}
if(key2==0)
{delay();
if(key2==0)
l=1;;
}
if(key3==0)
{delay();
if(key3==0)
c=1;
}
if(key4==0)
{delay();
if(key4==0)
dd=1;
}
while((key1==0)||(key2==0)||(key3==0)||(key4==0));
returne;
}
/**********************对按键处理程序****************/
voidchoice()
{intas;
while
(1)
{as=key();
if(dd==0)
{if(as==1)
{TR0=0;
ET0=0;
if(l==1)
if(cc==23)
cc=0;
else
cc++;
l=0;
if(c==1)
if(cc==0)
cc=23;
else
cc--;
c=0;}}
if(dd==1)
{if(as==1)
{TR0=0;
ET0=0;
if(l==1)
if(sethour==23)
sethour=0;
else
sethour++;
l=0;
if(c==1)
if(sethour==0)
sethour=23;
else
sethour--;
c=0;}
}
if(dd==0)
{if(as==2)
{ET0=0;
TR0=0;
if(l==1)
if(bb==59)
bb=0;
else
bb++;
l=0;
if(c==1)
if(bb==0)
bb=59;
else
bb--;
c=0;
}}
if(dd==1)
{if(as==2)
{
TR0=0;
if(l==1)
if(setmin==59)
setmin=0;
else
setmin++;
l=0;
if(c==1)
if(setmin==0)
setmin=59;
else
setmin--;
c=0;
}}
if(dd==0)
{if(as==3)
{ET0=0;
TR0=0;
if(l==1)
if(aa==59)
aa=0;
else
aa++;
l=0;
if(c==1)
if(aa==0)
aa=59;
else
aa--;
c=0;
}}
if(dd==1)
{if(as==3)
{
TR0=0;
if(l==1)
if(setsec==59)
setsec=0;
else
setsec++;
l=0;
if(c==1)
if(setsec==0)
setsec=59;
else
setsec--;
c=0;
}}
if(as==4)
{as=0;
e=0;
timerinit();
dd=0;
break;
}
}
}
/********************设置闹钟*********************/
voidsetclock()
{
setsec=0;
setmin=0;
sethour=0;
while
(1){
choice();
if(as==0)
{dd=0;
break;}
}
}
voidsolveclock()
{
if((setsec==aa)&&(setmin==bb)&&(sethour==cc))
{speaker=1;
delay2();}
if((aa==0)&&(bb==0))
{speaker=1;
delay2();}
speaker=0;
}
/*****************定时器0中断************/
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
temp++;
if(temp==20)
{temp=0;
aa++;
if(aa==60)
{bb++;
aa=0;}
if(bb==60)
{cc++;
bb=0;}
if(cc==24)
cc=0;
}
}
voidtimer1()interrupt3
{T_n++;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(T_n==10)
{T_n=0;
if(flag_set==0)flag_set=1;
elseflag_set=0;
}
if(dd==0)
display(cc,bb,aa);
else
display(sethour,setmin,setsec);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子钟 含有 闹钟 功能