/*óö¨ê±Æ÷/¼ÆêyÆ÷1¤×÷·½ê½3£¬tl0λ¿ØÖÆpwmÕ¼¿Õ±è£¬óÃth0λ2aá¿3¬éù2¨¸ßμçÆ½3ÖDøê±¼ä*/
#include"reg52.h"
#include"us015.h"
sbit PWM=P2^5;
typedef unsigned char u8;
typedef unsigned int u16;
u16 count,Time;
void delay2s(void) //Îó2î 0us
{
unsigned char a,b,c,n;
for(c=167;c>0;c--)
for(b=39;b>0;b--)
for(a=152;a>0;a--);
for(n=1;n>0;n--);
}
void Time3Init(){
TMOD=0X03;
TH0=256-200;
TL0=256-250;
ET0=1;
ET1=1;
EA=1;
TR0=1;
TR1=1;
}
void Timemath(){
delay(500);
US015main();
if(distance<=200){
Time=2;
delay2s();
US015main();
if(distance<=200){
Time=10;
delay2s();
US015main();
if(distance<=200){Time=6;}//oóíË
else{Time=6;}//oóÃæ½ó×aÏò¿ØÖÆ
return;
}
else{Time=6;} //oóÃæ½ó×aÏò¿ØÖÆ
return;
}
else{Time=6;} //¼ìDøÇ°½ø
return;
delay(1000);
}
void main(){
Time3Init();
while(1){
Time=6;
Timemath();
}
}
void Timer2() interrupt 3
{ TL0=256-250;
count++;
if(count<=Time){
PWM=1;
}
else{PWM=0;}
if(count>=80){
count=0;
TL0=256-250;
}
}
us015.c
#include"us015.h"
#include"intrins.h"
uint count0,Time0,distance,disp[4];
uchar code smgduan[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uchar tep){ //Ñóê±oˉêy
while(tep--);
}
void us015_Start(){ //3õê¼»ˉoˉêy
Trig=0;
Echo=0;
Trig=1; //Ñóê±12us£¬òaÇó′óóú10us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Trig=0;
}
void Digdisplay(){
uchar i;
disp[0]=smgduan[distance%1000%100%10]; //¸ö
disp[1]=smgduan[distance%1000%100/10]; //ê®
disp[2]=smgduan[distance%1000/100];//°ù
disp[3]=smgduan[(distance/1000)]; //ǧ
for(i=0;i<4;i++){
switch(i){
case 0:LSA=0,LSB=0,LSC=0;break;
case 1:LSA=1,LSB=0,LSC=0;break;
case 2:LSA=0,LSB=1,LSC=0;break;
case 3:LSA=1,LSB=1,LSC=0;break;
}
P0=disp[i];
delay(100);
P0=0x00;
}
}
void US015main(){
uint i,tp;
TH0=256-200;
count0=0;
us015_Start();
while(!Echo){;}
TR0=1;
while(Echo){;}
TR0=0;
tp=TH0-56;
TH0=0;
Time0=tp+count0*200;
distance=(long)(Time0*0.171); //2aá¿μľààë
for(i=50;i>0;i--){
Digdisplay();}
}
void Timer3()interrupt 1
{
count0++;
TH0=256-200;
if(count0>=400){
TR0=0;
count0=0;
TH0=256-200;
}
}
us015.h
#ifndef _US015_H_
#define _US015_H_
#include"reg52.h"
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
sbit Trig=P2^0;
sbit Echo=P2^1;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
void delay(uchar tep);
void us015_Start();
void Digdisplay();
void US015main();
void Timer3();
extern uint distance;
#endif
|