效果如圖:

源程序:
/***************************************************
作者: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();
}
}
}
|