原创作品,水平有限,看着见谅,嘴下留情。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f,0};
sbit dula=P2^6;
sbit wela=P2^7;
//sbit key=P3^4;
uchar hour2, hour1, min2, min1, sec2, sec1, t, flag;
uint num=43180, num1=8765;
void delay(uchar);
void display(uchar, uchar, uchar, uchar, uchar, uchar);
void display1(uchar, uchar, uchar, uchar, uchar, uchar);
void init();
void deb_clock();
void ala_clock();
void main() //主函数
{
init();
while(1)
{
P3=0xfb;
if(P3==0xfb)
{
display(hour2, hour1, min2, min1, sec2, sec1);
deb_clock();
}
else if(P3!=0xfb)
{
display1(hour2, hour1, min2, min1, sec2, sec1);
ala_clock();
}
}
}
void delay(uchar z) //延时函数
{
uint x, y;
for(x=z; x>0; x--)
for(y=110; y>0; y--);
}
void display(uchar hour2, uchar hour1, uchar min2, uchar min1,
uchar sec2, uchar sec1) //时钟显示函数
{
hour2=num/3600/10;
hour1=num/3600%10;
min2=num%3600/60/10;
min1=num%3600/60%10;
sec2=num%60/10;
sec1=num%60%10;
dula=1; //秒
P0=table[sec1];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
dula=1;
P0=table[sec2];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
dula=1; //分
P0=table[min1];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1;
P0=table[min2];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1; //小时
P0=table[hour1];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[hour2];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
}
void display1(uchar hour2, uchar hour1, uchar min2, uchar min1,
uchar sec2, uchar sec1) //闹钟显示函数
{
hour2=num1/3600/10;
hour1=num1/3600%10;
min2=num1%3600/60/10;
min1=num1%3600/60%10;
sec2=num1%60/10;
sec1=num1%60%10;
dula=1; //秒
P0=table[sec1];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
dula=1;
P0=table[sec2];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
dula=1; //分
P0=table[min1];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1;
P0=table[min2];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1; //小时
P0=table[hour1];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[hour2];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
}
void timer() interrupt 1 //定时器0中断设置
{
t++;
if(t==20)
{
t=0;
num++;
if(num==46800)
{
num=3600;
}
}
if(num==num1)
{
P1=0;
}
TH0=0x3c;
TL0=0xb0;
}
void init() //对定时器0进行初始化
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
}
void deb_clock() //校时,利用第二行矩阵键盘分别调节十,分,秒
{
P3=0xfd;
if(P3!=0xfd)
{
delay(5);
if(P3!=0xfd)
{
TR0=0;
switch(P3)
{
case 0xcd: //调秒
num++;
while(P3!=0xed); //松手检测
break;
case 0xad: //调分
num=num+60;
while(P3!=0xed);
break;
case 0x6d: //调小时
num=num+3600;
if(num/3600==13)
{
num=3600;
}
while(P3!=0xed);
break;
}
while(P3==0xed) //松手检测
{
display(hour2, hour1, min2, min1, sec2, sec1);
}
TR0=1;
}
}
}
void ala_clock() //闹钟设置函数
{
//uint num1;
// P3=0xfb;
if(P3!=0xfb)
{
delay(5);
if(P3!=0xfb)
{
switch(P3)
{
case 0xcb: //调秒
num1++;
while(P3!=0xeb); //松手检测
break;
case 0xab: //调分
num1=num1+60;
while(P3!=0xeb);
break;
case 0x6b: //调小时
num1=num1+3600;
if(num1/3600==13)
{
num1=3600;
}
while(P3!=0xeb);
break;
}
while(P3==0xeb) //松手检测
{
display1(hour2, hour1, min2, min1, sec2, sec1);
}
}
}
// return num1;
}
文章评论(0条评论)
登录后参与讨论