Código fuente de conversión de temperatura
//Después de abrir el archivo EXE en el directorio de instalación, el valor de temperatura actual se puede mostrar en la computadora.
# include & ltreg52.h & gt
#Definir carácter sin signo uchar
#Definir entero uint sin signo
sbit ds =p2 ^2; //Definir la interfaz de DS18B20
sbit dula=p2^6;
sbit wela=p2^7;
uint pre _ temp = 0; //Almacena el valor de temperatura actual y reduce la frecuencia de funcionamiento del puerto serie.
Tabla de códigos de caracteres sin firmar []={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d,
0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x 71};
Tabla de códigos de caracteres sin firmar 1[]={0xbf, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd,
0x87, 0xff, 0x ef } ;
Retraso no válido(recuento de unidades)//retraso
{
uint I;
mientras(recuento)
p>
{
i = 200
mientras(I & gt; 0)
I-;
count- ;
}
}
/////Función: inicialización del puerto serie, velocidad en baudios 9600, modo 1/////
void Init_Com(no válido)
{
TMOD = 0x 20
PCON = 0x 00; SCON = 0x 50;
th 1 = 0x FD;
TL 1 = 0x FD
tr 1 = 1; }
void ds reset(void)//Enviar comando de reinicio e inicialización 18B20 función de inicialización de reinicio.
{
uint I
DS = 0;
I = 103
mientras(I) & gt;0)I-;
DS = 1;
I = 4;
mientras(I & gt;0)I-; p>
p>
}
bit tmpreadbit(void)//Leer un bit leer función de datos de 1 bit.
{
uint I;
bit dat
DS = 0; i++; //i++ se utiliza para el retraso
DS = 1; i++; i++;
dat = DS
I = 8; mientras(I & gt; 0)I-;
return(dat);
}
uchartmpread(void)//Leer una fecha de byte y leer una función de 1 byte.
{
uchar i, j, dat
dat = 0
for(I = 1; i<=8 ;i++; )
{
j = tmpreadbit();
dat =(j & lt; & lt7)|(dat & gt; & gt1) ;/ /El bit más bajo de los datos leídos está al frente, por lo que solo hay un byte en DAT.
}
return(dat);
}
void tmpwritebyte(uchardat)//escribe un byte en ds18B20 escribe un Byte función de datos a 1820.
{
uint I;
uchar j;
bit testb
for(j = 1; j & lt=8;j++)
{
dat & amp0x 01;
dat = dat & gt& gt1;
si (testb)//Escribe 1
{
DS = 0
i++; p>
p>
I = 8; mientras(I & gt; 0)I-;
}
Otro
{
DS = 0; //Escribe 0
I = 8; mientras(I & gt; 0)I-;
DS = 1;
i++;i++;
}
}
}
cambio de tmp nulo(void)//ds 18 b 20 comenzar el cambio Recopilar datos y transformarlos.
{
dsreset();
Retraso (1);
tmpwritebyte(0x cc); //Direccionamiento del bus toda la unidad escribe al omitir el comando de lectura de ROM
tmpwritebyte(0x 44); //Inicia un comando de conversión de temperatura de escritura de conversión de temperatura única.
}
uint tmp()//Obtiene la temperatura y lee los datos de temperatura almacenados en el registro.
{
TT flotante;
uchar a, b;
Temperatura unitaria; //Variable de temperatura
>dsreset();
Retraso (1);
tmpwritebyte(0x cc);
tmpwritebyte(0x be);
a = tmpread(); //Lee los 8 bits inferiores
b = tmpread(); //Lee los 8 bits superiores
temp = b;
temp & lt& lt=8;//Dos bytes forman una variable int y dos bytes forman una palabra.
temp = temp | a;
TT = temp * 0.0625; //La temperatura es de 12 bits en el registro con una resolución de 0.0625.
temp = TT * 10.5; //Multiplicar por 10 significa tomar solo 1 dígito después del punto decimal, sumar 0.5 significa 40% de descuento y 50% de descuento.
Devuelve la temperatura;
}
//Lee la ROM de DS18B20. Esta función no se llama en este programa, se conserva para garantizar la integridad del programa.
//void readrom()//Leer serie
// {
// uchar sn1, sn2
/ /dsreset ();
//delay(1);
//tmpwritebyte(0x 33);
//sn 1 = tmpread(); p>
//sn2 = tmpread();
// }
void display(uintdemp)//Programa de visualización
{
uchar A1, A2, A2t, A3, ser
uchar serial_flag = 0; //Se actualiza a través del puerto serie cada vez que se genera una nueva temperatura. Esta es la parte de la bandera.
if (temp!=pretemperatura)
{
serial_flag = 1;
pre_temp = temp
}
a 1 = temperatura/100;
a2t = temperatura % 100;
a2 = A2t/10; A2t % 10;
Dura = 0;
P0 = Tabla [a 1]; //Mostrar dígitos de centenas
if (bandera de serie)
{
ser = temp/256; //Enviar el bit alto de datos seriales
SBUF = ser
}
dura = 1;
dura = 0;
wela = 0;
P0 = 0x7e
p>wela = 1; ;
wela = 0;
Retraso(1);
Dura = 0;
P0 = tabla 1[A2]; //Mostrar dígito de decenas
if (indicador de serie)
{
ser = temp % 256/ /Enviar los bits bajos de datos de serie
SBUF = ser
}
dura = 1;
dura = 0; >
P0 = 0x7d
wela = 1;
wela = 0;
Tiempo de retraso(1);
P0 =table[A3];//unidad de visualización
if (indicador de serie)
{
ser = 0xff//Envía la señal del indicador de sincronización de serie. Las señales de alto nivel posteriores no pueden alcanzar este valor, a menos que sea en Sun Wukong y Bagua Furnace.
SBUF = ser
}
dura = 1
dura = 0
P0 = 0x7b;
wela = 1;
wela = 0;
Retraso (1); main()
{
uchar a;
init _ Com();
Hacer
{
tmp change();
//Retraso (200);
for(a = 10; a & gt0; respuesta-)
{
Mostrar(tmp());
}
} mientras(1);
}