C51 秒表设计,定时器查询法,精确到0.01秒

在这里插入图片描述
在这里插入图片描述

#include <reg52.h>
#include <stdlib.h>
#define uint unsigned long
#define uchar unsigned char
sbit N1 = P1^4;
sbit N2 = P1^5;
sbit N3 = P1^6;
sbit N4 = P1^7;
sbit A1 = P3^1;
sbit A2 = P3^0;
sbit A3 = P3^2;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 
uchar code table2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
uint i;
int t=0;

void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=10;j>0;j--);
}
void display(uint i)  
{
N1=0;
P2=table[(i%10000)/1000];
delayms(1);
P2=0XFF;
N1=1;

N2=0;
P2=table2[(i%1000)/100];
delayms(1);
P2=0XFF;
N2=1;

N3=0;
P2=table[(i%100)/10];
delayms(1);
P2=0XFF;
N3=1;

N4=0;
P2=table[i%10];
delayms(1);
P2=0XFF;
N4=1;
}
void main()
{
TMOD=0X00;
TH0=0xE0;
TL0=0x18;
EA=1;
ET0=1;
TR0=0;
i=0;
while(1)
{
 if(TF0==1)
 {
  t++;
  TH0=0xE0;
  TL0=0x18;
  TF0=0;
  if(t==10)
  {
   i++;
   t=0;
   if(i==10000)
   {
    i=0;
	t=0;
	}
   }
  }
display(i);
}
if(A1==0)
{
 TR0=0;
 t=0;
 display(i);
 }
 if(A2==0)
 {
  TR0=1;
  t=0;
  }
  if( A3==0)
  {
   t=0;
   i=0;
   P2=0xFF;
}
}

版权声明:本文为qq_52679261原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。