Red de conocimiento informático - Computadora portátil - El microcontrolador 51 utiliza dht11.

El microcontrolador 51 utiliza dht11.

//Conexión de hardware: P2.0 es el puerto de comunicación conectado a DHT1.

# incluir & ltreg 51. h & gt;

# incluir & ltintrins.h & gt

typedef carácter sin firmar U8 /* no está firmado Sin firmar 8; Variable entera de bits definida por una variable entera de 8 bits */

carácter con signo typedef S8 /*Variable entera de 8 bits con signo definida para una variable entera de 8 bits con signo*/

typedef unsigned int u 16; /*Definir variable entera de 16 bits sin signo para variable entera de 16 bits sin signo*/

#Definir carácter uchar sin signo

#Definir uint Entero sin signo

bit p2 _ 0 = p2^0;

bit p2 _ 1 = p2^1

// - //

/ / -

// - //

U8 U8FLAG

U8 U8count, U8temp

U8 U8T_data_H, U8T_data_L , U8RH_data_H, U8RH_data_L, U8checkdata

U8 U8T_data_H_temp, U8T_data_L_temp, U8RH_data_H_temp, U8RH_data_L_temp, U8checkdata_temp

U8 U8comdata

u8 en datos[5];

p>

U8 cuenta, cuenta_r = 0;

U16 U16temp1, u 16 temp 2;

sbit d1=p2^4;

sbit d2=p2^5;

sbit d3=p2^6;

sbit d4=p2^7;

código uchar LEDData[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,

0x80, 0x90, 0x ff};

visualización de datos uchar [5] = {0x00, 0x00, 0x00, 0x00, 0x 00};

Retraso no válido (U16 j)

{

u8i;

for(; j & gt0 ;j -)

{

for(I = 0;i<27;i++);

}

}

Retraso nulo (sin firmar int num)//Función de retardo

{

while(-num);

}

Delay_10us no válido (no válido)

{

u8i;

Yo-;

Yo-;

Yo-;

I-;

I-;

I-;

}

//Bus Serie

COM vacío(vacío)

{

u8i;

for(I = 0;i& lt8;i++)

{

u8 bandera = 2;

// -

P2 _ 1 = 0 //T

P2 _ 1 = 1; //T

// -

Y ((! P2_0)&&u8 flag++);

retraso _ 10us();

retraso _ 10us()

//Retraso _ 10us ();

temperatura u8 = 0;

si(P2_0)temperaturau8 = 1;

u8 f

retraso = 2;

mientras((P2 _ 0)& & ampu8 bandera++);

// -

P2 _ 1 = 0;/ /T

P2 _ 1 = 1; //T

// -

//El tiempo de espera saltará del bucle for.

if(u8 flag == 1)break;

//Determine si el bit de datos es 0 o 1.

//Si el nivel alto es mayor que el valor de nivel alto predeterminado 0, el bit de datos es 1

U8comdata & lt& lt=1;

u 8 datos com | = u 8 temp;//0

}//rof

}

// -

// -Subrutina de lectura de humedad

// -

//-Las siguientes variables son variables globales.

//-8 bits de alta temperatura = = u8t_data_h -

//-8 bits de baja temperatura = = u8t_data_l -

/ /-8 bits para humedad alta = = u8rh _ data _ h -

//-8 bits para humedad baja = = u8rh _ data _ l -

//-8 bits para verificación = = Verificar datos-

//-Llame a las subrutinas relevantes, como se muestra a continuación-

//-Delay();, Delay_10us();, COM( );

// -

Vacío RH (vacío)

{

//Host desplegable 18ms.

P2 _ 0 = 0;

Retraso (180);

P2 _ 0 = 1

//El autobús está La resistencia pull-up aumenta el retraso del host en 20 us.

retraso _ 10us();

retraso _ 10us();

retraso _ 10us();

retraso _ 10us( );

//El host está configurado para ingresar la señal de respuesta del esclavo.

P2 _ 0 = 1;

//Determina si el esclavo tiene una señal de respuesta de bajo nivel. Si no responde, aparecerá una ventana emergente y la respuesta se agotará.

Si (!P2_0) //T!

{

u8 bandera = 2 ////////////////////////////// / ///////////////////////

//Determine si el esclavo envía una señal de respuesta de bajo nivel de 80us.

Y ((!P2 _ 0)&& ampu8 flag++);

u8 flag = 2;

//Determinar si el esclavo envía 80us El nivel alto , si es así, ingresa al estado de recepción de datos.

while((P2 _ 0)& & ampu8 flag++);

//Estado de recepción de datos

COM();

U8RH_data_H_temp = U8comdata

COM();

U8RH_data_L_temp = U8comdata

COM();

U8T_data_H_temp = U8comdata

COM();

U8T_data_L_temp = U8comdata

COM ();

u8 verificar datos _ temp = u8 com datos

P2 _ 0 = 1;

//Verificación de datos

u8 temp =(U8T _ datos _ H _ temp+U8T _ datos _ L _ temp+U8RH _ datos _ H _ temp+U8RH _ datos _ L _ temp

if(U8temp== U8checkdata_temp)

{

U8RH _ datos _ H = U8RH _ datos _ H _ temp

U8RH _ datos _ L = U8RH _ datos _ L _ temp

U8T _ datos _ H = U8T _ datos _ H _ temp

U8T_datos_L = U8T_datos_L_temp

u8 comprobar datos = u8 comprobar datos_temp;

}//fi

} //fi

}

Disp_Temperature()//mostrar temperatura

{

Carácter sin firmar n = 0;

//Display[4]=temp_data[0]&0x0f

//display[0]= ditab[display[4]] //El valor de los decimales en la búsqueda de tabla

//display[4]=((temp_data[0]& amp;0xf0)>& gt4)|((temp_data[1]&0x0f)<<4);

display[4]= U8RH_data_H;

Display[4]=display[4]% 100;

display[3]= display[4]/10;

pantalla[2]= pantalla[1 ]% 10;

Pantalla[4]= U8T_data_H;

Pantalla[4]=Pantalla[4]% 100;

display[ 1]= display[4]/10;

Display[0]=display[4]% 10;

Si (! Display[3]) //El bit alto es 0, por lo que no se muestra.

{

display[3]= 0;

If (!Display[1]) //El segundo bit más alto es 0, no se muestra.

pantalla[1]= 0;

}

d 1 = 1

P0 = datos del led[pantalla[0] ];

Retraso (5); d 1 = 0;

D2 = 1;

P0 = datos del LED[pantalla[1]];

p>

p>

Retraso(5);D2 = 0;

D3 = 1;

P0 = datos del led[display[2]];

Retraso(5);D3 = 0;

D4 = 1;

P0 = datos del led[display[3]];

Retraso(5); D4 = 0;

}

Administrador no válido (no válido)

{

mientras(1)

{

RH();

disp _ Temperature();

//El ciclo de datos del módulo de lectura no es inferior a 2S.

Retraso(20000);

}

}

Si apruebas el examen, obtendrás puntos extra

p>