程序:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar
t,s=0,m=11,h=0,qian=0,bai=0,shi=0,ge=0,s0=0,m0=0,h0=0,qian0=0,bai0=0,shi0=0,ge0=0,n1=0; sbit key1=P1^0; //功能
sbit key2=P1^1; //加一
sbit key3=P1^2; //减一
sbit key4=P1^3; //查看秒数
bit mm=0;
sbit beep=P2^3;
uint a;
void delay_1ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay(uint i)
{
uint j;
for(;i>0;i--)
for(j>19;j>0;j--);
}
/*void clock()
{
for(a=0;a<=50;a++)
{
beep=1;
delay_1ms(200);
beep=0;
delay_1ms(200);
}
}*/
void timer () interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t==20)
{
s++;t=0;
if(s==60)
{
m++;s=0;
if(m==60)
{
h++;m=0;
if(h==24)
h=0;
}
}
}
}
void display(uchar h,uchar m,uchar s) {
qian=h/10;
bai=h%10;
shi=m/10;
ge=m%10;
P0=num[qian];
P2=0xef;
delay_1ms(2);
P0=0xff;
P0=num[bai];
P2=0xdf;
delay_1ms(2);
P0=0xff;
P0=num[shi];
P2=0xbf;
delay_1ms(2);
P0=0xff;
P0=num[ge];
P2=0x7f;
delay_1ms(2);
P0=0xff;
}
void display0(uchar h0,uchar m0,uchar s0) {
qian0=h0/10;
bai0=h0%10;
shi0=m0/10;
ge0=m0%10;
P0=num[qian0];
P2=0xef;
delay_1ms(2);
P0=0xff;
P0=num[bai0];
P2=0xdf;
delay_1ms(2);
P0=0xff;
P0=num[shi0];
P2=0xbf;
delay_1ms(2);
P0=0xff;
P0=num[ge0];
P2=0x7f;
delay_1ms(2);
P0=0xff;
}
void keyscan()//按键扫描
{
if(key4==0)
mm=!mm;
while(!key4)
display(m,s,0);
if(key1==0)
{
mm=0;
delay(20);//消抖
if(key1==0) //功能选择
{
TR0=0;
n1++;
while(!key1)
display(h,m,s);
if(n1==7)
{
TR0=1;
n1=0;
}
}
}
if(n1!=0)
{
if(n1==1)
{
if(key2==0) //调时
{ //加
delay(20);
if(key2==0)
{
h++;
if(h==24)
h=0;
}
while(!key2)
display(h,m,s);
}
else if(key3==0) //减
{
delay(20);
if(key3==0)
{
if(h==0)
h--;
}
while(!key3)
display(h,m,s);
}
}
if(n1==2)
{
if(key2==0) //调分
{
delay(20);
if(key2==0)
{
m++;
if(m==60)
m=0;
}
while(!key2)
display(h,m,s);
}
else if(key3==0)
{
delay(20);
if(key3==0)
{
if(m==0)
m=60;
m--;
}
while(!key3)
display(h,m,s);
}
}
if(n1==3)
{
if(key2==0) //调秒
{
delay(20);
if(key2==0)
{
s++;
if(s==60)
}
while(!key2)
display(m,s,0);
}
else if(key3==0)
{
delay(20);
if(key3==0)
{
if(s==0)
s=60;
s--;
}
while(!key3)
display(m,s,0);
}
}
if(n1==4)
{
if(key2==0) //调闹钟时
{ //加
delay(20);
if(key2==0)
{
h0++;
if(h0==24)
h0=0;
}
while(!key2)
display0(h0,m0,s0);
}
else if(key3==0) //减
{
delay(20);
if(key3==0)
{
if(h0==0)
h0=24;
h0--;
}
while(!key3)
display0(h0,m0,s0);
}
display0(h0,m0,s0);
}
if(n1==5)
{
if(key2==0) //调闹钟分
{
delay(20);
if(key2==0)
{
m0++;
if(m0==60)
m0=0;
}
while(!key2)
display0(h0,m0,s0);
}
else if(key3==0)
{
delay(20);
if(key3==0)
{
if(m0==0)
m0=60;
m0--;
}
while(!key3)
display0(h0,m0,s0);
}
display0(h0,m0,s0);
}
if(n1==6)
{
if(key2==0) //调闹钟秒
{
delay(20);
if(key2==0)
{
s0++;
if(s0==60)
s0=0;
}
while(!key2)
display0(m0,s0,0);
}
else if(key3==0)
{
delay(20);
if(key3==0)
{
if(s0==0)
s0=60;
s0--;
}
while(!key3)
display0(m0,s0,0);
}
display0(m0,s0,0);
}
}
}
void main()
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; //打开总中断
ET0=1;//打开定时器中断
TR0=1;//启动定时器0
while(1)
{
keyscan();
if(n1==7 || mm)
display(m,s,0);
else
display(h,m,s);
if((h==h0)&&(m==m0)&&(s==s0))
{
TR0=1;
//clock();
for(a=0;a<=145;a++)
{
beep=1;
delay_1ms(200);
beep=0;
delay_1ms(200);
display(m,s,0);
}
display(h,m,s);
}
}
}。