这是对之前电子钟功能的扩展,主要是增加了闹钟模块。即在预定时间响铃一分钟,一分钟后自动停止,或者按set键实现手动停止。

那它是用来研究数码管的。下一步是液晶显示的研究。

单片机程序设计如下:

#包括《reg51.h》

#定义uchar无符号字符

无符号字符码表[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e };//数码管数字编码

uchar i,j,k,second,tcount,minute,hour,tminute,thour,ring

sbit beep=p2^6;sbit s2=p3^4;

//-

延迟(uchar n)

{

for(j=n;j》0;j -)

for(k=125;k》0;k-);

}

//-

使用0使定时器0()中断1无效

{

TH0=(65536-50000)/256;//中断设置初始化

TL0=(65536-50000)% 6;

tcount

If(tcount==20) //满1秒

{ t count=0;第二;哔声=0;//秒加1

If(second==60) //满1分

{秒=0;分钟;//分数加1,秒归零

If(minute==60) //满1小时

{

分钟=0;小时;//小时数加1,分数归零。

if(小时==24)

{ hour=0;}

}

}

}

}

使用1使定时器1()中断3无效

{

TH1=0x3c//中断设置初始化

TL1=0xb0

if(minute==t minute hour==thour ring==1){ beep=0;}//在预设时间自动响铃,一分钟后关机。

如果(S2==0)

{

响铃=0;//铃声中断。

}

}

//-

void main()

{ tminute=1;thour=0;//预设振铃时间

秒=55;分钟=0;小时=0;//给电子钟赋一个初始值,即启动时显示的时间。

ring=1;//启动响铃功能。

TH0=(65536-50000)/256;//中断设置初始化

TL0=(65536-50000)% 6;

EA=1;ET0=1;TMOD=0x 21;TR0=1;//打开中断总开关,计数器0允许中断。设置中断模式并启动计数器0。

ET1=1;TR1=1;

While(1) //无限循环,进入显示,主要是动态显示的原理。

{

p0=table[(second)];

P2=0x df;

延迟(5);

P0=表[(秒/10)];

P2=0x ef;

延迟(5);

p0=table[(minute)];

P2=0xf 7;

延迟(5);

P0=表[(分钟/10)];

P2=0x FB;

延迟(5);

p0=table[(hour)];

P2=0x FD;

延迟(5);

P0=表[(小时/10)];

P2=0x Fe;

延迟(5);

}

}