其实不用定时中断也能实现功能:
#include<reg51.h> 主函数
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};定义0-9数组
unsigned int tmp;定义变量
void delay(unsigned int xms)定义延时函数
{unsigned int j,i;
for(i=0;i<xms;i++)
for(j=0;j<100;j++);
}
void disp()定义子函数
{
P1=tmp;
delay(1);
P2=0xff;
tmp=tmp<<1;
}
void main( )
{
unsigned char z,s=00,m=00,h=00;给时钟初始值
while(1)
{
for(z=0;z<100;z++)
{
tmp=0x01;
P2=tab[h/10];小时显示
disp();
P2=tab[h%10];
disp();
P2=tab[m/10];分钟显示
disp();
P2=tab[m%10];
disp();
P2=tab[s/10];秒显示
disp();
P2=tab[s%10];
disp();
}
s++;
while(s==60)秒进一位,到60清0
{
m++;
s=00;
}
while(m==60)分钟进一位,到60清0
{
h++;
m=00;
}
while(h==24)小时进一位,到24清0
{
h=00;
}
}
}
最简便的办法是:直接使用电子钟做信号源,在其(驱动输出)上外接一个9018晶体管,晶体管不需要任何外围元件,有信号时导通电量LED,没信号时截止LED熄灭。晶体管可使用独立的电源,与石英钟分别供电,也可以分压后使用一组电源供电。更换掉石英钟的“震荡电容”,何以随意调节闪光频率。石英钟的“震荡电容”就露在外边,很好找。
555时基电路的应用十分广泛,你可以把它接成周期为0.5秒至1秒的“多谐震荡器”或者“间歇震荡器”,但是,他的输出电流有限,达不到300MA的要求,必须外加一级功放。另外,你可以使用两只9014、两个电阻,两个小电解电容,接成一个多谐震荡器,后边追加一级功放。