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

如题所述

最低位,是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;

     }}}}

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-11-10

 

#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秒(不知道怎么改啊)

本回答被网友采纳
第2个回答  2014-11-10

用定时器

我是做单片机的

利用51单片机设计一个秒表 (一定要按要求做到0.01秒)
最低位,是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,...

用51单片机设计一个秒表,计时范围从00:00-59:59.
disdat[2]=sec\/10;disdat[1]=min%10;disdat[0]=min\/10;}void ext0() interrupt 0{key++;key%=3;}void t0isr() interrupt 1\/\/秒计时{TH0=0x3c;TL0=0xb0;time++;if(time==20){time=0;sec++;if(sec>59){sec=0;min++;if(min>59)...

51单片机 秒表设计
sbit D1=P3^0;sbit D2=P3^1;sbit D3=P3^2;sbit D4=P3^3;sbit key=P3^5;sbit key1=P3^7;bit j;uint y;void main(){ TMOD=0x01;TH0=(65536-10000)\/256;TL0=(65536-10000)%256;EA=1;ET0=1;TR0=1;bai=0;shi=0;while(1){ if(key==0){ j=0;} if(key1==0){...

51单片机的秒表计时器设计,求大神帮忙设计电路图和C语言程序!!_百度知...
这个程序可以实现秒的计时,按键控制开始、暂停、清零功能,更多功能自己在看清程序的基础上进行改进。include <reg51.H>sbit P3_5 =P3^5;unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};unsigned char...

51单片机实现秒表,要求16进制进位
51单片机实现秒表, 0~9、A、b、C、d、E、F,16进制秒表。include<reg52.h> define uint unsigned int define uchar unsigned char uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar bai,shi;uint a1,a2;sbit D1...

51单片机数字秒表的程序 1、能实现0.0到9.9的计数 2、使用数码管显示计...
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 ...

基于51单片机的秒表计时怎么这么快
基于51单片机的秒表计时快是因为精度高。51单片机的定时器0的方式1计时,结果用4位数码管显示,分别为秒十位,秒个位,毫秒百位,毫秒十位。所以总共最大计时为1分钟,精确到了0.01秒。

51单片机设计一个秒表,用两个数码管(任意相邻的两个)显示。
DB 60H;"1"01H DB 0DAH;"2"02H DB 0F2H;"3"03H DB 66H;"4"04H DB 0B6H;"5"05H DB 0BEH;"6"06H DB 0E0H;"7"07H DB 0FEH;"8"08H DB 0F6H;"9"09H DB 0EEH;"A"0AH DB 3EH;"B"0BH DB 9CH;"C"0CH DB 7AH;"D"0DH DB 9EH;"E"0EH DB 8EH;"F"0FH DB...

求高手为下面的仿真图设计一个51单片机实现秒表的程序,要求:2位数码...
EA=1;ET0=1;} void T0INT() interrupt 1 \/\/定时器T0中断 方式1 { uchar time;TH0=0x3c;TL0=0xb0;time++;if(time==20) \/\/20X50ms=1s { time=0;ge++;} } void main(){ t0intinit( );while(1){ while(!KS){delay(10);if(KS)TR0=1;} while(!KP){ delay(10);if...

51单片机中用数码管做秒表时怎么用一个独立按键控制开始和暂停,即第一...
其实,控制秒表的启动和停止,很简单。要做秒表,一定要用定时器吧,假如用T0,那开始初始化时,不写TR0=1,先不启动。\\x0d\\x0a当按一下键,再启动,TR0=1,就开始计时了。\\x0d\\x0a再 按一下键,就停止,TR0=0,就不计时了。\\x0d\\x0a程序好写,先 定义一个按键\\x0d\\x0asbit ...

相似回答