1.要求
(1)初始化显示0-00.00
(2)按下启动键:秒表开始计时9-00.00计时,每一秒蜂鸣器响一次
(3)按下暂停键:秒表暂停计时,显示静止
(4)按下重置键:秒表恢复至0-00.00,重新计时
2.硬件电路图
1.蜂鸣器:NPN管高电平有效,PNP管低电平有效
2.使用P1,P2,P3口进行设置
3.代码
(1)中断函数
每十毫秒中断一次,每一百次为一秒
void T_10ms () interrupt 1
{
TH0=0xd8;TL0=0xf0;//初值设置
ms++;
beer=0;//蜂鸣器设置
if(100==ms)
{
ms=0;s++;//一秒计时
beer=1;delay();//蜂鸣器响一次
}
if(60==s)
{
s=0;m++;//60秒进位一分钟,一分钟计时
}
if((9==m)&&(59==s)&&(99==ms))//达到计时最大值时,暂停
{
beer=0;m=9;TR0=0;
}
}
(2)显示函数
void display()
{
int i=0;
data_time[0]=m;//分钟(第一个数码码)
data_time[1]=10;//(第二位码显示“-”)
data_time[2]=s/10;//秒的十位
data_time[3]=s%10;//秒个位(第四个数码码)
data_time[4]=ms/10;//毫秒十位
data_time[5]=ms%10;//毫秒个位(第六个数码管)
for(i=0;i<6;i++)
{
P3=commod[i];//位码控制显示
P2=led[data_time[i]];//段码控制显示
if(P3==commod[3])//秒的个位显示小数点
{
P2=led[data_time[i]]|0x80;
}
delay();//延时显示
}
}
(3)主函数
void delay()//延时函数,设置时间短一点,六个数字同时显示
//设置时间长的话,六个数字诸位循环显示
{
int i=0;
for(i=0;i<110;i++)
{
;
}
}
void main()
{
TMOD=0x01;//T0设置计时方式1
TCON=0x00;//TR0置0,计时禁止
TH0=0xd8;TL0=0xf0;//计数初值设置
IE=0x82;//中断总允许和T0中断允许
beer=0;//蜂鸣器初值设置
while(1)
{
display();//显示函数
switch(P1|0X1F)//按键情况判断
{
case 0xdf://开始计时
TR0=1;break;
case 0xbf://中止计时
TR0=0;break;
case 0x7f://重置计时
TR0=0;
ms=0;s=0;m=0;
break;
}
}
}