一、实验要求
用2位数码管显示计时时间,最小计时单位为"百毫秒",计时范围0.1~9.9s。当第1次按一下计时功能键时,秒表开始计时并显示;第2次按一下计时功能键时,停止计时,将计时的时间值送到数码管显示;如果计时到9.9s,将重新开始从0计时;第3次按一下计时功能键,秒表清0。再次按一下计时功能键,则重复上述计时过程。
本秒表应用定时器模式,计时范围0.1~9.9s。此外还涉及如何编写控制LED数码管显示的程序。
二、设计硬件电路原理图,画出实际接线图。
三、根据实验任务设计出相应的程序。
cs
#include <reg51.h>
#define uchar unsigned char
sbit Key=P3^6;
char i=10;
Key_Num=0;
second=0;
Count_Enable=0;
uchar code dis[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86, 0x8e};
unsigned int time;
void delay(unsigned int time)
{
unsigned int i;
for(i=0; i<time; i++)
{}
}
void main()
{
TMOD=0x01;
TH0=0xd8;
TL0=0xf0;
P1=0xff;
P3=0xff;
EA=1;
ET0=1;
TR0=1;
Count_Enable=1;
while(1)
{
if(!Key)
{
delay(10);
if(!Key)
{
while(!Key)
Key_Num++;
switch(Key_Num)
{
case 1:
//TR0=1;
Count_Enable=1;
break;
case 2:
//TR0=0;
Count_Enable=0;
break;
case 3:
//TR0=0;
Count_Enable=0;
second=0;
Key_Num=0;
break;
}
}
}
P2=0x01;
P0=dis[second%10];
delay(1);
P0=0xff;
P2=0x02;
P0=dis[second/10]&0x7f;
delay(1);
P0=0xff;
}
}
void timer0() interrupt 1
{
/*static display_SW=1;
TH0=0xD8;
TL0=0xF0;
if(display_SW)//个位
{
display_SW=0;
P2=0x01;
P0=dis[second%10];
delay(1);
//P0=0xff;
}
else//十位
{
display_SW=1;
P2=0x02;
P0=dis[second/10]&0x7f;
delay(1);
//P0=0xff;
}*/
TH0=0xD8;
TL0=0xF0;
if(Count_Enable)
{
i--;
if(i<=0)
{
i=10;
second++;
if(second>99)
{
second=0;
}
}
}
}