制作一个数码管秒表,用两个led数码管显示,最小计时单位为100ms,范围为0.1-9.9s,按下第一个功能键后开始计时,第二次按下时停止
#include <reg51.h>
unsigned char code discode1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
unsigned char code discode2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char timer=0;
unsigned char second;
unsigned char key=0;
main()
{
TMOD=0x01;
ET0=1;
EA=1;
second=0;
P0=discode1[second/10];
P2=discode2[second%10];
while(1)
{
if((P3&0x01)==0x00)
{
key++;
switch(key)
{
case 1:
TH0=0xee;
TL0=0x00;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
key=0;
second=0;
P0=discode1[second/10];
P2=discode2[second%10];
break;
}
while((P3&0x01)==0x00);
}
}
}
void int_T0() interrupt 1 using 0
{
TR0=0;
TH0=0xee;
TL0=0X00;
timer++;
if(timer==20)
{
timer=0;
second++;
P0=discode1[second/10];
P2=discode2[second%10];
}
if(second==99)
{
TR0=0;
second=0;
key=2;
}
else
{
TR0=1;
}
}
附件里面是仿真图,不含代码(自行生成hex文件)仅供参考,请自行测试,如有错误请告知:
制作LED数码管秒表.zip
(40.65 KB, 下载次数: 13)
|