#include<reg51.h>
#include"lcd.h"
sbit P32=P3^2;
sbit P37=P3^7;
//unsigned char io;
void delay(uint x);
unsigned int s0=0,s1=0,t0,t1,io1,io2,max=0,min=50000,k;
void timer0(void) interrupt 1 //定時器0服務程序
{
s0++;
}
void timer1(void)interrupt 3 //定時器1服務程序
{
s1++;
}
void main(void)
{ float io;
LcdInit();
TMOD=0xa2; //定時器模式,1為2方式,但GATE為1
EA=1;
P32=1; //p32,int0口先給低電平
ET0=1;
TH0=0x9c;
TL0=0x9c;
ET1=1;
TH1=0x9c;
TL1=0x9c;
LcdWriteCom(0x80);
LcdWriteData('B');
LcdWriteData('-');
LcdWriteData('-');
LcdWriteData('M');
LcdWriteData('A');
LcdWriteData('X');
LcdWriteData(':');
LcdWriteCom(0x8f);
LcdWriteData('%');
LcdWriteCom(0x80+0x40);
LcdWriteData('B');
LcdWriteData('-');
LcdWriteData('-');
LcdWriteData('M');
LcdWriteData('I');
LcdWriteData('N');
LcdWriteData(':');
LcdWriteCom(0x80+0x4f);
LcdWriteData('%');
while(P32); //這兩次是為了去除半沿
while(!P32);
delay(2000);
P37=1;
while(1)
{ while(P37==1)
{
while(P32); //這兩次是為了去除半沿
while(!P32);
TR0=1; //開始計時
TR1=1;
while(P32);
TR0=0; //T0停
while(!P32);
TR1=0; //T1停
if(s0>50&&s1>50)
{
t0=s0;
t1=s1;
}
else
{
t0=s0*100+(TL0-0x9c);
t1=s1*100+(TL1-0x9c);
}
io=(10*t1/t0); //浮點數據提高精度
io1=10000/io; //整型數據便于顯示
io2=io1*10; //浮點數據提高精度
if(io2<min)
{
min=io2;
}
else if(io2>max&&50000>io2)
{
max=io2;
}
LcdWriteCom(0x89);
LcdWriteData('0'+max/1000);
LcdWriteData('0'+max%1000/100);
LcdWriteData('.');
LcdWriteData('0'+max%100/10);
LcdWriteData('0'+max%10);
LcdWriteCom(0x80+0x49);
LcdWriteData('0'+min/1000);
LcdWriteData('0'+min%1000/100);
LcdWriteData('.');
LcdWriteData('0'+min%100/10);
LcdWriteData('0'+min%10);
delay(3);
t0=0,t1=0,s0=0,s1=0; //清值
TL0=0x9c;
TL0=0x9c;
}
while(P37==0)
{
LcdWriteCom(0x80);
LcdWriteData('B');
LcdWriteData('-');
LcdWriteData('-');
LcdWriteData('M');
LcdWriteData('A');
LcdWriteData('X');
LcdWriteData(':');
LcdWriteCom(0x8f);
LcdWriteData('%');
LcdWriteCom(0x80+0x40);
LcdWriteData('B');
LcdWriteData('-');
LcdWriteData('-');
LcdWriteData('M');
LcdWriteData('I');
LcdWriteData('N');
LcdWriteData(':');
LcdWriteCom(0x80+0x4f);
LcdWriteData('%');
LcdWriteCom(0x89);
LcdWriteData('0'+max/1000);
LcdWriteData('0'+max%1000/100);
LcdWriteData('.');
LcdWriteData('0'+max%100/10);
LcdWriteData('0'+max%10);
LcdWriteCom(0x80+0x49);
LcdWriteData('0'+min/1000);
LcdWriteData('0'+min%1000/100);
LcdWriteData('.');
LcdWriteData('0'+min%100/10);
LcdWriteData('0'+min%10);
delay(3000);
break;
}
}
}
void delay(uint x)
{
uint y,z;
for(y=x;y>0;y--)
{
for(z=199;z>0;z--);
}
}
|