这是我自己写的时钟程序,没有用芯片只用了51单片机自带的定时器设置的时钟,请问怎么在这个基础上加一个闹钟?求指点,谢谢。
uchar wei[4]={0XEf,0XDf,0XBf,0X7f};
uchar LightSign= 0; // 闪烁标志,=1 时灭, =0 时亮
sbit s1=P1^0;
sbit s2=P1^1;
sbit s3=P1^2;
uint a,b,c,d,e,f,t,i,m;
uint a1=0,b1=0,c1=0,d1=0,s1num=0,s2num=0,i1,k1;
void delay(uchar n)
{
uchar i,j;
for(i=0;i<n;i++)
{
for(j=13;j>0;j--)
{ ;
}
}
}
void int0(void) interrupt 1
{
TR0=0; t++;
m++;
if(m==22)
m=0;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
if(t==11)
LightSign=s2num;
if(t==22)
{t=0;
f++;
LightSign=0; }
if(f==59)
{
f=0;
d++;
}
if(d==10)
{c++;
d=0;
}
if(c==6)
{b++;
c=0;
}
if(b==10)
{a++;
b=0;
}
if(a==2&&b==4){a=b=0;}
e=1000*a+100*b+10*c+d;
TR0=1;
}
/*********************************************************************/
void Led(int date) //显示函数
{
uint w,x,y,z;
w=date/1000; //求千位
x=date%1000/100; //求百位
y=date%100/10; //求十位
z=date%10; //求个位
P2=0XFF;
if(LightSign==4)
P0= 0xFF;
else
P0=seg7code[w]; //主函数一直循环扫描 在t=11时闪烁,t=2
P2=wei[0];
delay(80);
P2=0XFF;
if(LightSign==3)
P0= 0xFF;
else
P0=seg7cade[x];
P2=wei[1];
delay(80);
P2=0XFF;
if(LightSign==2)
P0= 0xFF;
else
P0=seg7code[y];
P2=wei[2];
delay(80);
P2=0XFF;
if(LightSign==1)
P0= 0xFF;
else
P0=seg7code[z];
P2=wei[3];
delay(80);
P2=0XFF;
}
void jishu()
{ i1=1;
k1=1;
while(k1)
{
Led(0);
if(s3==0)
{
while(s3==0){;}
k1=0;
}
if(s1==0)
{while(s1==0){;}
i1=0;k1=0;s1num=0;
}
}
while(i1)
{
if(m==21) //时间的修改
{
m=0;
d1++;
}
if(d1==10)
{c1++;
d1=0;
}
if(c1==10)
{
b1++;
c1=0;
}
if(b1==10)
{a1++;
b1=0;
}
if(a1==10){a1=b1=c1=d1=0;}
if(s2==0)
{
while(s2==0){;} //计数暂停
// j1=t;
k1=1;
while(k1)
{
// t=j1;
// t=0;
e=1000*a1+100*b1+10*c1+d1;
Led(e);
if(s3==0){while(s3==0){;}k1=0;}
if(s1==0){while(s1==0){;}i1=0;s1num=0;s2num=0;k1=0;} //暂停后清零 计数后操作
}
}
if(s1==0){while(s1==0){;}i1=0;s1num=0;s2num=0;} ///直接清零
e=1000*a1+100*b1+10*c1+d1;
Led(e); }
}
void keyscan()
{
if(s1==0)
{
while (s1==0) {;}
s1num++;
if(s1num==3) {s1num=0;}
if(s1num==2) {jishu();}
if(s1num==0) {s2num=0;}
if(s1num!=0) {s2num=1;}
}
if(s2==0)
{
while (s2==0) {;}
if(s1num==1)
{
s2num++;
if(s2num==5){s2num=1;}
}}
if(s3==0) //
{
while (s3==0) {;}
if(s1num==1)
{
if(s2num==1)d++;
if(s2num==2)c++;
if(s2num==3)b++;
if(s2num==4)a++;
e=1000*a+100*b+10*c+d; } }
Led(e);
}
void main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
e=1000*a+100*b+10*c+d;
keyscan();
Led(e);
}
}
|