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

 我来答
做而论道
高能答主

推荐于2017-09-15 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部

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

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

只能看到一个 8。


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

程序如下:

#include<reg52.h> 

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;

     }}}}

}

liuzhou_huang
2014-11-10 · TA获得超过979个赞
知道小有建树答主
回答量:795
采纳率:93%
帮助的人:253万
展开全部

 

#include<reg52.h>
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;
}
}
}
}
}

追问
只能实现显示的时间基本单位是0.1秒,不是0.01秒(不知道怎么改啊)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
查晓筠0i5
2014-11-10 · TA获得超过2752个赞
知道大有可为答主
回答量:2.1万
采纳率:1%
帮助的人:4893万
展开全部

用定时器

我是做单片机的

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式