Você está na página 1de 3

TERMÔMETRO DIGITAL COM LM35

MIKROC PRO FOR PIC



Nesse circuito estou utilizando o PIC 18F258 e um cristal de 8 MHz, Este circuito é apenas
para fins didáticos, pode ser feitas alterações e utilizar outro Pic assim como outro cristal.

Esse projeto tem a função de monitorar a temperatura de algum equipamento e acionar uma

saída do pic para indicar que a temperatura do mesmo ultrapassou a temperatura que foi

configurada como referência. Podemos usar essa saída para ligar um ventilador e resfriar o

equipamento, controlando assim a temperatura máxima de trabalho.





Código no MIKROC PRO FOR PIC

#define led portb.f1
#define botao portb.f0

// inicializando LCD, configuração dos pinos para 4 vias (fora EN, RS ).( RW fica 0v).

sbit LCD_RS at LATB2_bit; // for writing to output pin always use latch (PIC18 family)
sbit LCD_EN at LATB3_bit; // for writing to output pin always use latch (PIC18 family)
sbit LCD_D4 at LATB4_bit; // for writing to output pin always use latch (PIC18 family)
sbit LCD_D5 at LATB5_bit; // for writing to output pin always use latch (PIC18 family)
sbit LCD_D6 at LATB6_bit; // for writing to output pin always use latch (PIC18 family)
sbit LCD_D7 at LATB7_bit; // for writing to output pin always use latch (PIC18 family)

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// fim da inicialização do modo display 4-vias. OBS.: para família pic 18fxxx


// Inicio das configurações das variaveis.
int temp=0, x, variavel, t_alarme=100; // declaração de variaveis
char txt[7], txtx[7]; // variavel texto.

//INICIO DA ROTINA CONFIGURAÇÂO
void configuracao(){
lcd_cmd(_lcd_clear);
t_alarme =0;

do{
lcd_out(1,1,"VALOR DE ALARME"); // imprime na primeira linha
lcd_out(2,1,"TEMP.:");
delay_ms(100); // delay de 100 ms
wordtostr(t_alarme,txtx); // converte a variavel t_alarme para char
lcd_out(2,9,txtx); // imprime na segunda linha o valor do char


if (!botao){
while(!botao){
lcd_out(1,1,"VALOR DE ALARME");
lcd_out(2,1,"TEMP.:");
delay_ms(100);
wordtostr(t_alarme,txtx);
lcd_out(2,9,txtx);
t_alarme++;
delay_ms(10);
}
}

variavel++;
delay_ms(100);
}

while(variavel < 50);
x = 100;
}
//FIM

void main() { //ROTINA PRINCIPAL
adcon1 = 0b1110; // configura o pino a0 como analógica.
trisb = 0b00000001; // Configura o portb, entradas e saídas.
portb = 0; // Inicializa os pinos do portb.

lcd_init(); //Inicializa o lcd
lcd_cmd(_lcd_cursor_off); //Desliga o cursor da tela do display.


lcd_out(1,1,"CONFIGURAR");
lcd_out(2,1,"VALOR DE ALARME?");







lcd_cmd(_lcd_clear);
while(1){ // laço infinito
temp = adc_read(0); // ler a variavel analógica.
temp = (temp/2)-2; // operação matemática para a temperatura.

if (temp<=0) temp=0;

wordtostr(temp,txt); // converte temp para texto.


lcd_out(1,9,txt);
lcd_out(1,16,"C");
lcd_out(1,1,"AMBIENTE:"); //escreve texto na linha e coluna descrita.
lcd_out(2,1,"ALARME:");
lcd_out(2,9,txtx);

delay_ms(10);


if(temp >= t_alarme){
led=1;
delay_ms(10);
}

if (temp < t_alarme){
led = 0;
delay_ms(10);
}


}

}

// FIM DO PROGRAMA