Red de conocimiento informático - Material del sitio web - Controlador de temperatura basado en 51 microcontroladores

Controlador de temperatura basado en 51 microcontroladores

La imagen muestra el diagrama del circuito de control de temperatura. Cuando la temperatura alcanza el límite superior, la luz LED se enciende y deja de calentar el RT. Cuando la temperatura alcanza el límite inferior, la luz LED se apaga y comienza a calentar el RT. A1 y A2 son amplificadores operacionales uA741. Los números de pin están marcados en el diagrama. Permítanme brindarles otro programa para recolectar la temperatura de DS18B20 usando un microcontrolador, que se muestra usando un tubo digital de cuatro dígitos. Puede probar la temperatura de RT conectando DS18B20 cerca de RT. Ajustar el reóstato deslizante en la imagen puede cambiar los límites superior e inferior de la temperatura. Esto permite el control de la temperatura.

//El archivo EXE en el directorio de instalación puede mostrar el valor de temperatura actual en la computadora después de abrirlo

#include?

#define?uchar?unsigned?char

#define?uint?unsigned?int

sbit?DS=P1^0;//define?interface

uint?temp ;?//?variable?de?temperatura

uchar?flag1;//?signo?del?resultado?positivo?o?negativo

//sbit ?dula= P2^6;

//sbit?wela=P2^7;

//unsigned?char?code?table2[]={0x3f,0x30,0x5b, 0x4f,0x66 ,0x6d,0x7d,

//0x07,0x7f,0x67/*,0x77,0x7c,0x39,0x5e,0x79,0x71*/};

//unsigned ?char? code?table1[]={0xbf,0xb0,0xdb,0xcf,0xe6,0xed,0xfd,

//0x87,0xff,0xe7};?

// unsigned?char ?code?table2[]={0x40,0x5e,0x24,0x21,0x13,0x09,0x08, //?0x63,0x00,0x03/*,0x77,0x7c,0x39,0x5e,0x79,0x71*/} ;

//unsigned?char?code?table1[]={0xc0,0xde,0xa4,0xa1,0x93,0x89,0x88, //0xe7,0x8f,0x87};

¿sin firmar? char?code?table5[]={0x77,0x22,0x6d,0x5d,0x1e,0x5b,0x7b,

0x15,0x7f,0x1f};?

¿sin firmar? char?code ?table6[]={0xf7,0xa2,0xed,0xdd,0x9e,0xdb,0xfb,

0x95,0xff,0x9f};?

void?delay(uint ?cuenta) ?//retraso

{ uint?i; mientras(cuenta) {

i=200;

mientras(i>0)

i--;

count--; }

}

///////Función: inicialización del puerto serie, baudios tasa 9600, Método 1///////

void?Init_Com(void)

{ TMOD?=?0x20; PCON?=?0x00; ; TH1? =?0xFd; TL1?=?0xFd; TR1?=?1;

}

void?dsreset(void)//enviar?reset?e?inicialización? comando?18B20 Restablecer, función de inicialización

{ uint?i; i=103; while(i>0)i--; )i- -;

}

bit?tmpreadbit(void)//read?a?bit?Leer función de datos de 1 bit

{

ui

nt?i;

bit?dat;

DS=0;i++;?//i++?for?delay

DS=1;i++;i++ ;

dat=DS;

i=8;mientras(i>0)i--;

regresar?(dat);

}

uchar?tmpread(void)//read?a?byte?date función de lectura de 1 byte

{ uchar?i,j,dat=0; for(i=1;i<=8;i++) {

j=tmpreadbit();

dat=(j<<7)|(dat>>1) ; //El bit más bajo de los datos leídos está al frente, de modo que exactamente un byte está en DAT} return(dat);

}

void?tmpwritebyte(uchar?dat ) //write?a?byte?to?ds18b20?Escribe una función de datos de bytes en 1820

{ uint?i; bit?testb; ;j++) {

testb=dat&0x01;

dat=dat>>1;

if(testb)?//write?1

{ DS=0; i++;i++; DS=1; i=8;mientras(i>0)i--;

}

else

{ DS=0;//escribir?0 i=8; while(i>0)i--; i++;i++;

} }

}

void?tmpchange(void)?//DS18B20?begin?change comienza a obtener datos y convertirlos

{ dsreset(); tmpwritebyte(0xcc); ?//?address?all?drivers?on?bus?Write omite el comando de lectura de ROM tmpwritebyte(0x44);?//?inicia?un?single?temperature?conversion?write comando de conversión de temperatura

<); p> }

uint?tmp()//get?the?temperature?Leer los datos de temperatura almacenados en el registro

{ float?tt; () ; delay(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); a=tmpread();//Leer los 8 bits inferiores b=tmpread();//Leer los 8 bits superiores temp<; <=8; ?//two?byte?compose?a?int?variable Se combinan dos bytes en 1 palabra temp=temp|a; tt=temp*0.0625;//La temperatura es de 12 bits en el registro y la la resolución es 0,0625 temp =tt*10.5;?//Multiplicar por 10 significa tomar solo 1 dígito después del punto decimal, sumar 0,5 es un 40% de descuento return?temp;

}

void?readrom()?//leer?el?serial

{ uchar?sn1,sn2; dsreset(); tmpwritebyte(0x33); =tmpread();

}

void?delay10ms()//retraso {

uchar?a,b;

for(a=10;a>0;a--) for(b=60;b >0;b--);

}

void?display(uint?temp) //Programa de visualización

{

uchar?A1,A2,A2t,A3,ser;

ser=temp/10;

SBUF=ser;

A1=temp/100;

A2t=temp%100;

A2=A2t/10;

A3=A2t%10;

//dula=0 ;

d4=0;

P0=table5[A1];

retraso(1);

d4=1; /Mostrar dígitos de centenas

//dula=1; //dula=0;

/*wela=0;

P0=0x7e;

P0=0x7e;

p>

wela=1;

wela=0; */

//dula=0 ;

d3=0;

P0=table6[A2];

retraso(1);

d3=1; /Mostrar dígito de las decenas

//dula=1 ;

//dula=0;

/*wela=0;

P0=0x7d;

wela=1;

wela=0; ?*/

d2=0;

P0=tabla5 [A3];

delay(1);

d2=1; //Mostrar los dígitos

//dula=1;

//dula=0;

/ *P0=0x7b;

wela=1;

wela=0;

}

void?main()

{ uchar?a(); hacer {

tmpchange();

//?delay(200);

for(a=1;a>0;a--) {display(tmp()} } while(1);

}