Red de conocimiento informático - Conocimiento del nombre de dominio - Necesitamos urgentemente un programa en lenguaje C para microcontrolador, con sensor de temperatura ds18b20, tubo digital para mostrar temperatura, usando microcontrolador 89c52, con diagrama de circuito adjunto, ¡gracias!

Necesitamos urgentemente un programa en lenguaje C para microcontrolador, con sensor de temperatura ds18b20, tubo digital para mostrar temperatura, usando microcontrolador 89c52, con diagrama de circuito adjunto, ¡gracias!

#includelt;reg52.hgt;?

#define?uchar?unsigned?char?

#define?uint?unsigned?int?

sbit?DQ=P1^4;?

#define?uint?

unsigned?char?code?str[]={0x3f, 0x06, 0x5b, 0x4f , 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x00, 0x40}?;?//***Tabla de códigos de palabras de tubería digital negativa

unsigned?char?code?str1[]={0x0bf , 0x86, 0x0db, 0x0cf, 0x0e6, 0x0ed, 0x0fd, 0x87, 0x0ff, 0x0ef};?// Tabla de codificación de caracteres decimales de un solo dígito

unsigned?char?code?wei[]={0x0fe, 0x0fd, 0x0fb, 0x0f7};?

uchar?data?disdata[5];?

uint?tvalue; //valor de temperatura?

uchar?tflag; //temperatura positiva o negativa ¿bandera?

/**********programa ds1820************/?

void?delay_18B20(unsigned?int ?i)?// ¿Retraso de 1 microsegundo? {? while(i--);? }

void?ds1820rst() /* ds1820 reset*/? ¿sin firmar? 0; //¿Desplegable DQ? delay_18B20(100);? DQ?=?1 //DQ pull-up? delay_18B20(40); } ??

uchar?ds1820rd() /*Leer datos*/? {?

unsigned?

unsigned char dat= 0 ;?

for(i=8;igt;0;i--)

{

DQ?//Da una señal de pulso

datgt;gt;=1;

DQ?=?1 ?

datgt;gt;=1;

DQ?

p>

if(DQ)?

delay_18B20(10); ?

}? return(dat}?

void? sin firmar para?(i=8;?igt;0;?i--)

{

DQ?

DQ?=?wdataamp;0x01 ?

delay_18B20(10); ?

DQ?=?1 ?

wdatagt;gt;=1;

} }?

read_temp() /* Leer el valor de temperatura y convertir */? { uchar?a, b;? ds1820rst();?

xcc);?//?Omitir lectura del número de serie ds1820wr(0x44);?//?¿Iniciar conversión de temperatura? ds1820rst();? ds1820wr(0xcc);? ds1820wr(0xcc);? ¿Omitir la lectura del número de serie? ds1820wr(0xbe);?//?Leer temperatura a=ds1820rd();? b=ds1820rd();? tvalue=b;? tvaluelt;=8;? tvalue=tvalue|a; > if(tvaluelt; 0x0fff)

tflag=0;

else

{

tvalue=~tvalue 2;?tflag = 1;?//¿Temperatura negativa?

} tvalue=tvalue*(0.625);?//El valor de temperatura se expande 10 veces, con una precisión de 1 decimal return(tvalue }

/**** * ******************************/

void?ds1820disp() // Visualización del valor de temperatura { uchar? i ; disdata[0]=tvalue/1000;?//Cientos de dígitos disdata[1]=tvalue1000/100;?//Decenas de dígitos? disdata[2]=tvalue100/10; // Número de decimales disdata[3]=tvalue10; // Número de decimales if(tflag==0)

{

if( disdata[0]==0x00)

?{

? disdata[0]=0; //¿No mostrar el dígito 0 de las decenas

? if( disdata[1]==0x00)?//No mostrar decenas de dígitos 0

?}

} else ?// ¿Temperatura negativa?

{

disdata[0]=0x0b;//Cientos de temperaturas negativas muestran un signo negativo: -

if(disdata[1]== 0x00 )?disdata[1]=0; //El dígito 0 de las decenas no se muestra

} for(i=0;ilt;150;i)

{

P2=wei[0];

P0=str[disdata[3]];

delay_18B20(20)

P2=wei [1 ];

P0=str1[disdata[2]];

retraso_18B20(20);

P2=wei[2]; >

P0=str[disdata[1]];

delay_18B20(20);

P2=wei[3];

P0=str [disdata [0]];

delay_18B20(20);

} }

/************ Programa principal ** ********

void?main() { ds1820rst() ?//inicializar visualización while(1)

{

read_temp (); //leer temperatura

ds1820disp(); //mostrar

} }?