La Red de Conocimientos Pedagógicos - Conocimientos matemáticos - El papel basado en el termómetro digital DS18B20 necesita que las luces LED estén encendidas y al menos 4 tubos digitales escritos en lenguaje C. Al menos el software puede mostrarlo. Gracias.

El papel basado en el termómetro digital DS18B20 necesita que las luces LED estén encendidas y al menos 4 tubos digitales escritos en lenguaje C. Al menos el software puede mostrarlo. Gracias.

#include ltpic 1687 //Establecer bits de configuración

//WDTDIS: deshabilitar el temporizador de vigilancia

//LVPDIS: programación de bajo voltaje deshabilitada

//HS: alto -speed crystal /Resonator

//PWRTDIS: Desactivar el temporizador de encendido

//BORDIS: Desactivar el reinicio de apagado

Bit volátil estático dat @( sin firmar )PORTC * 8 ​​​​2;

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

const uint8 disp[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x 90}; //* * *Tabla de códigos de segmento de tubo digital Yang

temperatura volátil uint8 _ data _ int//La parte entera de la temperatura

temperatura flotante volátil _ data _ fla//La parte decimal de la temperatura

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

void ShowTemper(void); //Mostrar temperatura

void Get _ temper(void); //Obtener datos de temperatura

void Reset _ ds 18b 20(void); //Restablecer DS18B20

uint 8 Read _ Temp _ Data(void);

void retraso us(uint 8 retraso);//Retraso sutil

void retraso ms(uint 16 retraso);//Retraso de milisegundos

void Write _ 18b 20 _ Comd( uint 8 Comd); //Escribir comando DS18B20

pantalla nula (uint8 chosebit, uint 8 datos); //Pantalla de tubo digital único de 8 bits

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

*Nombre de función: DelayUS(retraso uint8)

*Función: Retraso de microsegundos de 20MHZ.

*Parámetro de entrada: Retraso

*Retorno: Ninguno

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

Retraso no válido (retraso uint8)

{

while(-delay);

}

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

*Nombre de la función: delaymas (retardo uint16)

*Función: retardo de milisegundos de 20 MHZ.

*Parámetro de entrada: Retraso

*Retorno: Ninguno

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

Retraso no válido (retraso uint16)

{

uint 16 I;

for (;retraso gt0;retraso-)

for(I = 0;ilt453;i);

}

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

*Nombre de función: visualización (uint8chosebit, uint8data)

*Función : Pantalla de tubo de número único

* Parámetros de entrada: bit de selección de bit, fuente de datos.

*Devoluciones: Ninguna

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

Pantalla vacía (bit de selección uint8, datos uint8)

{

adcon 1 = 0x8E //Establece PORTA0 como entrada analógica y las demás; como puertos IO.

TRISA amp= 0xc 1;

TRISD=0x00 //Línea de datos configurada como salida.

PORTA = 0xFF

PORTA amp= ~(0x 02 lt; ltchose bit);

PORTD = datos; p>Drayus(200); //Retraso

PORTD = 0xFF //Apaga la pantalla

}

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

*Nombre de función: Reset_DS18B20(void)

*Función: Restablecer DS18B20.

*Parámetros de entrada: Ninguno

*Devolución: Ninguno

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

Reset_DS18B20 no válido (obsoleto)

{

uint8 flag = 0 //Restablecer indicador

while(1)

{

dat = 0; //La línea de datos se establece en 0

Drayus(250);

Drayus(250); //Retraso 500us

dat = 1; //La línea de datos se establece en 1.

Drayus(60); //Retraso 60us

tris C2 = 1;

While(dat == 0) //Si la línea de datos es 0

{

Drayus(240); //Retraso 240us

If(dat) //Si la línea de datos es 1

{

flag = 1; //Restablecer correctamente, establecer indicador de éxito.

Break; //Saltar de la declaración while(dat==0).

}

Otro

Romper

}

si (bandera)

{//Si el reinicio es exitoso,

Drayus(240);

Drayus(240);//Retraso 480us

Pausa //Saltar; de toda la declaración while(1).

}

tris C2 = 0

}

}

/******; ************************************************** * **********************

*Nombre de función: escribir _ 18b 20 _ comd(uint 8 comd)

*Función: comando de escritura DS18B20

*Parámetro de entrada: comando comd

*Retorno: Ninguno

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

void Write _ 18b 20 _ Comd(uint 8 Comd)

{

uint8 i, temp

tris C2 = 0;

for(I = 0;ilt8;I) //Recorre un byte 8 veces.

{

temp = comd amp0x 01; //Lee el bit inferior de la instrucción

comd gt gt= 1 //Desplaza los datos de la instrucción hacia la derecha; por un poco.

dat = 0; //línea de datos establecida en 0

drayos(4); //retraso 8us

if (temperatura == 0 )

{

dat = 0

}

Otro

{

dat = 1;

}

Drayus(60); //Retraso 40us

dat = 1; //La línea de datos está configurada en 1.

}

}

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

*Nombre de la función: Leer datos temporales (nulo)

*Función: Leer los datos de muestreo de temperatura de DS18B20.

*Parámetro de entrada: Ninguno

*Retorno: Datos leídos.

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

uint8 lee temporalmente datos ( void)

{

uint8 i, datos

tris C2 = 0

for(I = 0; i lt8; I ) //Leer un byte 8 veces.

{

Datos gt gt= 1; //Los datos se mueven un bit hacia la derecha.

dat = 0; // Línea de datos establecida en 0

Drayus(2); //Retraso 2us

dat = 1; se establece en 1.

Drayus(8); //Retraso 8us

tris C2 = 1;

Drayus(8); //Retraso 8us

If(dat) //Si los datos leídos son 1

data | = 0x80 //La posición más alta de los datos es 1

Drayus (40 );

tris C2 = 0;

}

Return (data); //Devuelve los datos leídos.

}

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

*Nombre de la función: Obtener _ temple(void)

*Función: Leer datos de temperatura.

*Parámetros de entrada: Ninguno

*Devolución: Ninguno

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

void Get_temper(void)

{

uint8 temp, temp 1;

write _ 18b 20 _ Comd(0x cc); //Escribe la instrucción de omisión de ROM

write _ 18b 20 _ Comd(0x 44); //Escribe la instrucción de conversión de temperatura

dat = 1; //La línea de datos se establece en 1.

Drayus(200);

Drayus(200);

reset _ ds 18b 20() //Llamar a la función de reinicio de inicialización

write _ 18b 20 _ Comd(0x cc);

write _ 18b 20 _ Comd(0x be); //Escribe y lee instrucciones

temp = Read_Temp_Data(). //Leer la temperatura de almacenamiento baja.

temp amp0x0f//Toma la parte decimal y guárdala en temp_data_Fla.

temp gt gt= 4; //Obtiene el mordisco alto del byte bajo

temp1 = Read_Temp_Data(). //Los bits altos leídos se almacenan en temp1.

temp 1 lt; lt= 4; //Obtener el mordisco bajo del byte alto

temp _ data _ int = temp 1 | el byte alto O temp_data_int

Tempering_data_fla = Tempering_data_Fla * 100/16 //Toma la parte decimal y guárdala en temp1.

}

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

*Nombre de la función: mostrar templo(vacío)

*Función: Muestra la temperatura detectada.

*Parámetros de entrada: Ninguno

*Devolución: Ninguno

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

Estado de visualización no válido (no válido)

{

Pantalla(0, disp[temple_data_int/ 10]) ;

disp[temple_data_int 10] amp;0x7F);

Disp[(uint 8)tempent_data_Fla/10]

Disp(2); 3, disp[(uint 8)tempent _ data _ Fla 10]

}

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

*Número de letras: main()

*Función: detección en tiempo real y visualización de la temperatura ambiente.

*Parámetros de entrada: Ninguno

*Devolución: Ninguno

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

void main()

{

tris C2 = 0;

mientras ( 1)

{

reset _ ds 18b 20(); //Restablecer DS18B20

get _ temple() //Obtener el valor de temperatura< /p >

mostrar templo(); //Mostrar temperatura

}

}