Red de conocimiento informático - Conocimiento sistemático - Encuentre el programa c para medición de distancias ultrasónicas

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

#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();

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;

csbout=1;

cl=0;

ōpto=0xff;

jpjs=0;

sj1 =45;

sj2=200;

sj3=400;

k4cl();

TR1=1

mientras(1)

{

teclascan();

if(jpjs<1)

{

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++;

}

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;

}