效果如图:

源程序:
/***************************************************
作者:T.Z.R.
使用简介:写的过于差劲,仅供菜鸟看看玩玩,高人别P我……
主要功能:1.显示时间(……)
2.二十四小时整点报时,蜂鸣器响1秒.
3.具有闹钟功能,闹钟响一分钟,中途可以按下Set键停止吵人。
缺点:由于使用数码管,无时无刻亮着,所以有些耗电……
***************************************************/
#include <at89x52.h>
sbit w4=P3^5;
sbit w3=P3^4;
sbit w2=P3^3;
sbit w1=P3^2;
sbit beep=P3^7;
sbit mode=P3^0;
sbit set=P3^1;
sbit d=P1^7;
/*变量声明部分*/
unsigned char code num [10]={0x7e,0x48,0x3d,0x6d,0x4b,0x67,0x77,0x4c,0x7f,0x6f}; //核心部分,用于显示数码管
unsigned char i;
unsigned char sec;
unsigned char min;
unsigned char hour;
unsigned char mmin;
unsigned char mhour;
unsigned char day;
unsigned char month;
unsigned char v1;
unsigned char v2;
unsigned char v3;
unsigned char v4;
unsigned char k1;
unsigned char k2;
unsigned char k3;
unsigned char k4;
unsigned char mos;
unsigned int ms;
bit sh;
bit alm;
void hp(void){
w1=0;
w2=0;
w3=0;
w4=0;
}
void delay(unsigned int a){
unsigned int i;
while(--a>0){
for(i=0;i<300;i++);
}
}
/*主函数开始*/
void main (void){
alm=1;
hour=11;
min=59;
mhour=12;
mmin=0;
sec=55;
beep=1;
ms=0;
mos=0;
mode=0;
set=0;
while(1){
if(mode==1){
delay(20);
if(mode==1){
mos++;
if(mos==5){
mos=0;
}
while(mode==1);
}
}
if(set==1){
delay(20);
if(set==1){
if(hour==mhour && min==mmin && alm==1){
alm=0;
}
if(mos==1){
hour++;
}
if(mos==2){
min++;
}
if(mos==3){
mhour++;
alm=1;
}
if(mos==4){
mmin++;
alm=1;
}
while(set==1);
}
}
if(mos==0){
ms++;
}
if(ms==14600){
sec++;
ms=0;
beep=0;
if(hour==mhour && min==mmin && alm==1){
beep=0;
}else{
beep=1;
}
sh=~sh;
}
if(sec==60){
min++;
sec=0;
}
if(min==60){
min=0;
hour++;
beep=0;
alm=1;
}
if(hour==24){
hour=0;
}
if(mhour==24){
mhour=0;
}
if(mmin==60){
mmin=0;
}
v1=hour%10;//小时4数 24:10
v2=hour/10;//小时2数
v3=min%10;//分钟0数
v4=min/10;//分钟1数
k1=mhour%10;//小时4数 24:10
k2=mhour/10;//小时2数
k3=mmin%10;//分钟0数
k4=mmin/10;//分钟1数
if(mos!=3 && mos!=4){
if(mos!=2){
hp();
w4=1;
P1=~num[v2];//v4
hp();
w3=1;
P1=~num[v1];//v3
d=sh;
hp();
}
if(mos!=1){
w2=1;
P1=~num[v4];
hp();
w1=1;
P1=~num[v3];
hp();
}
}
if(mos==3){
hp();
w4=1;
P1=~num[k2];//v4
hp();
w3=1;
P1=~num[k1];//v3
d=sh;
hp();
}
if(mos==4){
w2=1;
P1=~num[k4];
hp();
w1=1;
P1=~num[k3];
hp();
}
}
}
|