#include <reg52.h>
#include <function.h>//详见第六章第8讲
#include <timer.h>//详见第八章第11讲
#include <intrins.h>
sbit TRIG = P2^0;
sbit ECHO = P2^1;
u8 FLAG=0,BEEP_FLAG=0;
void delay_20us()
{
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
}
void main()
{
u16 time_data,CM_data;
TRIG = 0;
ECHO = 0;
LED_Init();
EA = 1;
TIM1_Init(100,34);
TMOD &= 0xF0;
TMOD |= 0x01;
ET0 = 1;
while(1)
{
TH0 = 0;
TL0 = 0;
FLAG = 0;
TRIG = 1;
delay_20us();
TRIG = 0;
while(!ECHO);
TR0 = 1;
while(ECHO);
TR0 = 0;
time_data =TH0;
time_data=(time_data<<8)|TL0;
CM_data = time_data/54;
if(FLAG==1){ShowNumber(999); delay_ms(20);}
else {ShowNumber(CM_data); delay_ms(20);}
if(CM_data<=10)BEEP_FLAG=1;
else BEEP_FLAG=0;
}
}
void TIM1_IRQHandler() interrupt 3
{
static u8 i=0;
TH1 = T1RH;
TL1 = T1RL;
i++;
if(i>=5){i=0; SEG_Scan();}
if(BEEP_FLAG==1)BEEP=!BEEP;
}
void TIM0_IRQHandler() interrupt 1
{
FLAG=1;
}