El microcontrolador 51 utiliza dht11.
# 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 p>
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++);
}
} p>
Retraso nulo (sin firmar int num)//Función de retardo
{
while(-num);
}
Delay_10us no válido (no válido) p>
{
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; p>
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]]; p>
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) p>
{
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>