利用51单片机设计一个秒表 (一定要按要求做到0.01秒)

2025-04-07 07:53:49
推荐回答(3个)
回答(1):

最低位,是0.01s 变化一次,一秒钟,变化 100 次。

这么快,人的眼睛,分辨不出来。

只能看到一个 8。


停止时,才能看到稳定的数字。

程序如下:

#include 

sbit P3_5 =P3^5;

unsigned char counet, m[4] = {0,0,0,0};  

void display() 

{  

    unsigned char code Tab[] = {

      0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 

    unsigned char code Bit[] = {8, 4, 2, 1};

    unsigned char i, j;

    for (i = 0; i < 4; i++)  {

      P0 = Tab[m[i]];  if (i == 2)  P0 &= 127;

      P2 = Bit[i]; for(; j > 0; j++);  P2 = 0; 

    }

}

void wait_key()

{

    while( P3_5)  display(); 

    while(!P3_5)  display(); 

}

main() 

{  

    TMOD = 0x02;

    IE = 0x82; 

    while(1)  {  

      wait_key(); TR0 = 1; TH0 = TL0 = 6;

      wait_key(); TR0 = 0;

      wait_key(); m[0] = m[1] = m[2] = m[3] = 0;      

    } 

void time0() interrupt 1  

{  

    counet++; 

    counet %= 40; 

    if(!counet) {  

      m[0]++;  m[0] %= 10;

      if(!m[0]) {

        m[1]++;  m[1] %= 10;

        if(!m[1]) {

          m[2]++;  m[2] %= 10;

          if(!m[2]) {

            m[3]++;  m[3] %= 10;

     }}}}

}

回答(2):

 

#include
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;

sbit P3_5 =P3^5;
unsigned char keycnt;
 
unsigned char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned int counet,second,msecond,minute;
void delay(unsigned int  m)
{
  unsigned char s;   
  for(;m>0;m--)  
  for(s=124;s>0;s--);
 } 

void display()

 P0=Tab[msecond%10];
 LED4=1;
 delay(5);
 LED4=0;
 
 P0=Tab[second%10]+0x80;
 LED3=1;
 delay(5);
 LED3=0;
 
 P0=Tab[second/10];
 LED2=1;
 delay(5);
 LED2=0;
 
 P0=Tab[minute%10];
 LED1=1;
 delay(5);
 LED1=0;
}

main()

    unsigned char i,j;
 P0=0xff;
 P1=0xff;
 TMOD=0x01;
// TH0=0x3c;
// TL0=0xb0;
 EA=1;
 ET0=1;
// TR0=1; 
 while(1)
 { 
 display();
 if(P3_5==0)
 {
  for(i=20;i>0;i--)
  for(j=248;j>0;j--);
  if(P3_5==0)
  {
  keycnt++;
  switch(keycnt)
  {
  case 1:
     TH0=0x3c;
     TL0=0xb0;
  TR0=1;
  break;
  case 2:
  TR0=0;
  break;
  case 3:
  second=0;
  msecond=0;
  minute=0;
  keycnt=0;
  break;
 }
 while(P3_5==0);
 }
 }
 }

void time0() interrupt 1 

TH0=0x3c;
TL0=0xb0;
counet++;
if(counet==2)

counet=0;
msecond++;
if(msecond==10)

msecond=0;
second++;
if(second==60)

second=0;
minute++;
if(minute==10)

minute=0;
}
}
}
}
}

回答(3):

用定时器

我是做单片机的