Muito obrigado senhores, esta biblioteca salvou minha nota na disciplina de Automação na Faculdade.
Foi o único lugar na Internet onde achei essa biblioteca. vou postar o código q eu usei com essa biblioteca, conta com um display LCD, e um outro sensor de temperatura, um LM35, usei isso para fazer uma camara de refrigeração usando uma célula Peltier, num PIC 16f877A.
#include <16f877A.h>
#device adc=10
#use delay(clock=20000000, RESTART_WDT)
#use rs232 (baud=9600, xmit=pin_c6, rcv=pin_c7, parity=N, stop=1, bits=8)
#org 0x1F00, 0x1FFF void loader16F877(void) {}
#include <mod_lcd.c>
#include <dht11.c>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
#byte porta = 0x05
#byte portb = 0x06
#byte portc = 0x07
#byte portd = 0x08
#byte porte = 0x09
#bit Incrementa = porta.5
#bit Decrementa = porta.4
#bit PeltierEsq = portc.2
#bit PeltierEsf = portc.1
#bit rele1 = portb.1
#bit rele2 = portb.2
int x = 0;
char received = 0x00, dados[7];
long int SetTemp=30, TempSensor=0, TempVentoinha=0, limpatela=0;
long int RSetTemp=0, RTempVentoinha=0, msgUmidade=0, msgTemperatura = 0;
static boolean aux1 = true, aux2 = true, auxBotao1 = true, auxBotao2 = true;
static boolean manutencao = false, manutencao1 = false;
void Transmissao()
{
dados[0] = 'f';
dados[1] = RSetTemp;
dados[2] = RTempVentoinha;
dados[3] = dht_dat[2];
dados[4] = dht_dat[0];
dados[5] = msgUmidade;
dados[6] = msgTemperatura;
for(x=0 ; x < 7;x++)
{
putchar(dados
delay_ms(3);
}
}
#int_rda
void serial_interrupt()
{
// Recebe informações do software (received)
disable_interrupts(int_rda);
received = getc();
aux1 = true;
aux2 = true;
}
void main()
{
set_tris_a(0b11111111);
porta=0x00;
set_tris_b(0b11111001);
portb=0x00;
/* set_tris_c(0b00000000);
set_tris_d(0b11110011);
set_tris_e(0b00000111);
portc=0x00;
portd=0x00;
porte=0x00;
*/
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
setup_adc_ports (RA0_RA1_RA3_analog);//Configura Vdd e Vss como Vref
setup_vref(FALSE);
setup_adc (adc_clock_div_32);
output_low(pin_c4);
output_low(pin_c5);
enable_interrupts(GLOBAL);
lcd_ini();
lcd_escreve('\f');
while(true)
{
enable_interrupts(int_rda);
if(limpatela != TempSensor)
{
lcd_escreve('\f');
limpatela = TempSensor;
}
if (( manutencao == false) &&(manutencao1 == false))
{
lcd_pos_xy( 2, 1);
lcd_escreve("TD");
lcd_pos_xy( 2, 2);
printf (lcd_escreve,"%ld",RSetTemp );
lcd_pos_xy( 6, 1);
lcd_escreve("TF");
lcd_pos_xy( 6, 2);
printf (lcd_escreve,"%d", dht_dat[2] );
lcd_pos_xy( 10, 1);
lcd_escreve("TV");
lcd_pos_xy( 10, 2);
printf (lcd_escreve,"%ld",RTempVentoinha );
lcd_pos_xy( 14, 1);
lcd_escreve("UM");
lcd_pos_xy( 14, 2);
printf (lcd_escreve,"%d", dht_dat[0] );
lcd_pos_xy( 16, 2);
lcd_escreve(" ");
delay_ms(100);
}
Transmissao();
if(!Incrementa)
{
auxBotao1=true;
}
if(!Decrementa)
{
auxBotao2=true;
}
// Botão incrementa
if((!Incrementa)||(received == 0x02))
{
if (aux1 || auxBotao1)
{
// se incrementa pelo software nao usa delay
if (SetTemp<=1020 && aux1)
{
SetTemp = SetTemp + 2;
lcd_escreve('\f');
}
else if (SetTemp<=1020 && auxBotao1)
{
SetTemp = SetTemp + 2;
delay_ms(130);
lcd_escreve('\f');
}
aux1 = false;
auxBotao1 = false;
}
}
// Botão decrementa
if((!Decrementa)||(received == 0x01))
{
if (aux2 || auxBotao2)
{
// se decrementa pelo software nao usa delay
if (SetTemp>=2 && aux2)
{
SetTemp = SetTemp - 2;
lcd_escreve('\f');
}
else if (SetTemp>=2 && auxBotao2)
{
SetTemp = SetTemp - 2;
delay_ms(130);
lcd_escreve('\f');
}
aux2 = false;
auxBotao2 = false;
}
}
delay_ms(10);
iniciar();
leer_dht();
TempSensor =((1024* dht_dat[2])/500);
set_adc_channel(1);
delay_ms(10);
TempVentoinha = read_adc();
// RTempSensor =(500*TempSensor)/1024;
RTempVentoinha =(500*TempVentoinha)/1024;
RSetTemp =(500*SetTemp)/1024;
if(TempVentoinha > 80)
{
rele1 = 1;
}
if(TempVentoinha < 40)
{
rele1=0;
}
if((TempSensor) > SetTemp)
{
PeltierEsf=1;
PeltierEsq=0;
rele2 = 1;
}
if((TempSensor) < SetTemp)
{
PeltierEsq=1;
PeltierEsf=0;
rele2=0;
}
if ((dht_dat[0]) > 92)
{
manutencao = true;
rele1=0;
rele2=0;
lcd_escreve('\f');
lcd_pos_xy( 1, 1);
lcd_escreve(" Umidade alta");
lcd_pos_xy( 1, 2);
lcd_escreve("parar p/ limpeza");
msgUmidade = 1; // msg = 1 vai para o software para mostrar a msg
delay_ms(500);
}
else
{
manutencao = false;
msgUmidade = 0;
}
if (TempVentoinha >= 110)
{
manutencao1 = true;
rele1=1;
rele2=0;
lcd_escreve('\f');
lcd_pos_xy( 1, 1);
lcd_escreve("Temp. muito alta");
lcd_pos_xy( 1, 2);
lcd_escreve("PeltierDesligado");
msgTemperatura = 1; // msg = 2 vai para o software para mostrar a msg
delay_ms(500);
}
else
{
manutencao1 = false;
msgTemperatura = 0;
}
}
}