顯示格式:24小時制 比如 17 46 00(只有六個數碼管)17點46分00秒。
開始的時間可以任意確定;
利用獨立鍵盤來調電子表;
這個電子表的功能: 開始可以任意的顯示時間,key1 可以調時針,key2可以調分針,key3調秒針,
key4 可以清零。
利用中斷可以準確的定時一秒。
#include <reg52.H>
#define uint unsigned int
#define uchar unsigned char
uint m,n,g,num,shi,ge,bai,qia,wan,swa;
l=19; k=46;
uchar code table1[]=
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
void delay()
{
uint i,j;
for(i=0;i<5;i++)
for(j=0;j<100;j++);
}
void key_scan()
{
if(key1==0)
{
delay();
if(key1==0)
l++;
while(!key1);
}
if(key2==0)
{
delay();
if(key2==0)
k++;
while(!key2);
}
if(key3==0)
{
delay();
if(key2==0)
m++;
while(!key3);
}
if(key4==0)
{
delay();
if(key4==0)
{ l=0;k=0;m=0; }
while(!key4);
}
}
display(uchar swa, uchar wan,uchar qia, uchar bai,uchar shi,uchar ge)
{
wela=1;
P2=0Xff;
P2=0xfe;
wela=0;
dula=1;
P0=0XFF;
P0=table1[swa];
dula=0;
delay();
wela=1;
P2=0Xff;
P2=0xfd;
wela=0;
dula=1;
P0=0XFF;
P0=table1[wan];
dula=0;
delay();
wela=1;
P2=0Xff;
P2=0xfb;
wela=0;
dula=1;
P0=0XFF;
P0=table1[qia];
dula=0;
delay();
wela=1;
P2=0Xff;
P2=0xf7;
wela=0;
dula=1;
P0=0XFF;
P0=table1[bai];
dula=0;
delay();
wela=1;
P2=0Xff;
P2=0xef;
wela=0;
dula=1;
P0=0XFF;
P0=table1[shi];
dula=0;
delay();
wela=1;
P2=0Xff;
P2=0xdf;
wela=0;
dula=1;
P0=0XFF;
P0=table1[ge];
dula=0;
delay();
}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
EA=1;
ET0=1;
TR0=1;
while(1)
{
key_scan();
display(swa,wan,qia,bai,shi,ge);
}
}
void T0_time()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
g++;
if(g==20)
{
g=0;
m++;
if(m==60){m=0; k++;}
if(k==60){k=0; l++;}
if(l==24) l=0;
ge=m;
shi=m/10;
bai=k;
qia=k/10;
wan=l;
swa=l/10;
}
}
|