Encuentre el programa c para medición de distancias ultrasónicas
Programa fuente de alcance ultrasónico producido por at89c2051
· Versión del archivo: V1.0
· Desarrollador: Original en este sitio
· Fuente del archivo: local
· Idioma de la interfaz: chino simplificado
· Método de autorización: gratuito
Programa fuente de alcance ultrasónico producido por at89c2051
Palabras clave: alcance ultrasónico
Programa fuente de alcance ultrasónico producido por at89c2051
#include
#define k1 P3_4 p>
#define csbout P3_5 //Transmisión de ultrasonido
#define csbint P3_7 //Recepción de ultrasonido
#define csbc=0.034
#define bg P3_3
unsigned char csbds,opto,digit,buffer[3],xm1,xm2,xm0,key,jpjs;//Mostrar identificación
unsigned char convert[10]={ 0x3F,0x06,0x5b ,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9 código de segmento
unsigned int s,t,i, xx,j,sj1,sj2 ,sj3,mqs, sx1;
bit cl;
void csbcj();
void delay(j); //Función de retardo
void scanLED (); //Mostrar función
void timeToBuffer(); //Mostrar función de conversión
voidkeyscan();
void k1cl(); p>
void k2cl();
void k3cl();
void k4cl();
void offmsd( );
void main() //Función principal
{
EA=1; //Habilitar interrupciones
TMOD=0x11 //Establecer temporizador 0 para contar y configurar el temporizador 1 para cronometrar
ET0=1; //Interrupción del temporizador 0 habilitada
ET1=1 //Interrupción del temporizador 1 habilitada
TH0; =0x00;
TL0=0x00;
TH1=0x9E;
TL1=0x57;
csbds=0;
csbint=1; p>
csbout=1;
cl=0;
ōpto=0xff;
jpjs=0;
sj1 =45;
sj2=200;
sj3=400;
k4cl();
TR1=1
mientras(1)
{
teclascan();
if(jpjs<1)
{ p>
csbcj();
if(s>sj3)
{
buffer[2]=0x76
búfer[1]=0x76;
búfer[0]=0x76
}
si(s { búfer[2]=0x40 búfer[1]=0x40 búfer[0]=0x40; } else timeToBuffer(); } else timeToBuffer(); //Convierte el valor en código de segmento LED offmsd(); scanLED(); //Función de visualización if(s bg=0; bg=1; } } void scanLED() //Mostrar módulo de función { digit=0x04; for( i=0; i<3; i++) //Pantalla de 3 dígitos { P3=~digit&opto; //Muestra cada dígito por turno P1=~buffer; //Envía los datos de visualización al puerto P1 delay(20); //Retrasa el procesamiento P1 =0xff; //El puerto P1 está configurado en nivel alto (cerrado) if((P3&0x10)==0) //Juzga si se han mostrado los 3 dígitos key=0; digit>>=1; //Ciclo de desplazamiento hacia la derecha en 1 dígito } } void timeToBuffer ( ) //Convertir módulo de función de código de segmento { xm0=s/100 xm1=(s-100*xm0)/10;< / p> xm2=s-100*xm0-10*xm1; búfer[2]=convertir[xm2] búfer[1]=convertir[xm1; ] ; buffer[0]=convert[xm0]; } retraso nulo(i) { while(--i); } void timer1int (void) interrumpe 3 usando 2 { TH1 =0x9E; TL1=0x57; csbds++; if(csbds>=40) { csbds=0; cl=1; } } void csbcj() { if(cl==1) { TR1=0; TH0=0x00; TL0=0x00; i=10; while(i--) { csbout=! csbout ; } TR0=1; i=mqs; //Área ciega while(i--) { } i=0; while(csbint) { i++; if(i>=2450) //valor límite superior csbint=0; } TR0 =0 ; TH1=0x9E; TL1=0x57; t=TH0; t=t*256+TL0 ; s=t*csbc/2;< /p> TR1=1; cl=0; } } void teclascan() // Función de procesamiento del teclado { xx=0; if(k1!=1) // Determina si el interruptor está presionado { delay(400); // Retraso en el rebote if(k1!=1) // Determina si el interruptor está presionado { < / p> while(!k1) { retraso(30); xx++; } p; > si(xx>2000) { jpjs++; si(jpjs>4) jpjs= 0 ; } xx=0; switch(jpjs) { caso 1: k1cl ();romper; caso 2: k2cl();romper; caso 3: k3cl();romper; caso 4: k4cl() ;romper; } } } } void k1cl() { sj1=sj1+5; si(sj1>100) sj1=30; s = sj1; } void k2cl() { sj2=sj2+5; si (sj2>500) sj2=40; s=sj2; } void k3cl() { sj3=sj3+10; si(sj3>500) sj3=100; s = sj3; } void k4cl() { sx1=sj1-1; sx1 =sx1/csbc; mqs=sx1/4.5; } void offmsd() { si (búfer[0] == 0x3f) búfer[0] = 0x00; }