新闻中心

EEPW首页>嵌入式系统>设计应用> 51单片机小闹钟

51单片机小闹钟

作者: 时间:2016-11-25 来源:网络 收藏


void keyscan()
{

本文引用地址://m.amcfsurvey.com/article/201611/321542.htm

if(hour_key==0)//时按键
{

delay(10);
if(hour_key==0)
{
while(!hour_key)display(hour1,minu1,sec1);//消除数码管的抖动

if(mode_number%2==0)//如果在时钟模式下,时钟时+1
hour1++;
else hour0++;//如果在闹钟模式下,闹钟时+1

if(hour1==12)
{
hour1=0;
}

if(hour0==12)
{
hour0=0;
}

}
}

if(minu_key==0)//分按键
{

delay(10);
if(minu_key==0)
{
while(!minu_key)display(hour1,minu1,sec1);//消除数码管的抖动
if(mode_number%2==0)
minu1++;
else
minu0++;

if(minu1==60)
{
minu1=0;
}

if(minu0==60)
{
minu0=0;
}

}

}


if(mode_key==0)//模式按键

{

delay(10);
if(mode_key==0)
{

while(!mode_key)display(hour1,minu1,sec1);//数码管的抖动

mode_number++;


}

}


if(stopsounder_key==0)//关闹钟按键
{
sounder_flag=1;
delay(10);
if(stopsounder_key==0)
{

while(!stopsounder_key)display(hour1,minu1,sec1);

beep=1;
}

}



}




void display(uchar hour,uchar minu,uchar sec)
{
h1=hour/10;
h2=hour;

m1=minu/10;
m2=minu;

s1=sec/10;
s2=sec;


P2=0xff;
P1=table[h1];
P2=select[0];
delay(5);

P2=0xff;
P1=table[h2];
P2=select[1];
delay(5);

P2=0xff;
P1=0x40;;
P2=select[2];
delay(5);

P2=0xff;
P1=table[m1];
P2=select[3];
delay(5);

P2=0xff;
P1=table[m2];
P2=select[4];
delay(5);

P2=0xff;
P1=0x40;
P2=select[5];
delay(5);

P2=0xff;
P1=table[s1];
P2=select[6];
delay(5);

P2=0xff;
P1=table[s2];
P2=select[7];
delay(5);

}



void timer1_int() interrupt 3//控制时钟工作50ms
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%6;
b++;
if(b==10)led=~led;
if(b==20)
{
led=~led;
b=0;
sec1++;
if(sec1==60)
{

sounder_flag=0;//每隔一分钟,释放检测闹钟

sec1=0;
minu1++;
if(minu1==60)
{
minu1=0;
hour1++;
if(hour1==24)
hour1=0;

}
}

}

}



void main()
{
init();


for(;;)
{

keyscan();//按键扫描


if(mode_number%2==0)//正常时钟显示
{

display(hour1,minu1,sec1);
}

else
{


display(hour0,minu0,sec0);//设定时间显示

delay(100);

}




if(hour0==hour1&&minu0==minu1)//如果设定的时间到
{
if(!sounder_flag)//且按键按下一分钟之后
{
beep=0;//闹铃开


}

}



}


}


上一页 1 2 下一页

关键词:51单片机小闹

评论


技术专区

关闭