Phần đo nhiệt độ thì chỉ dùng ADC có sẵn trong PIC chỉ tốn 1 chân RA/AN thôi. Còn xuất ra thì có LCD rồi.
Cái này làm hồi mới tập tành ADC:
Code:
#include <16F877.h>
#device 16F877*=16 ADC=10
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=1000000)
#define use_portd_lcd TRUE
#include<lcd.c>
long adc,nhietdo;
long adc1,adc2,adc3,adc4,adc5,adc6,adc7,adc8,adc9,adc10,value;
int8 a,b,c,d;
void tachhang(int&a,int&b,int&c,int&d);
char so[11] ="0123456789";
void main()
{
setup_adc(adc_clock_internal);
setup_adc_ports(AN0);
set_adc_channel(0);
delay_ms(100);
while(true)
{
value = read_adc();
/*adc1=read_adc();// doc 10 gia tri adc trong 1s
delay_ms(100);
adc2=read_adc();
delay_ms(100);
adc3=read_adc();
delay_ms(100);
adc4=read_adc();
delay_ms(100);
adc5=read_adc();
delay_ms(100);
adc6=read_adc();
delay_ms(100);
adc7=read_adc();
delay_ms(100);
adc8=read_adc();
delay_ms(100);
adc9=read_adc();
delay_ms(100);
adc10=read_adc();
delay_ms(100);
value =adc1+adc2+adc3+adc4+adc5+adc6+adc7+adc8+adc9+adc10;// lay gia tri trung binh adc*/
nhietdo = (value-559)/0.2024;
tachhang(a,b,c,d);
lcd_init();
delay_ms(100);
lcd_putc(so[a]);
lcd_putc(so[b]);
lcd_putc(so[c]);
lcd_putc('.');
lcd_putc(so[d]);
}
}
void tachhang(int&a,int&b,int&c,int&d)
{
a=nhietdo/1000;
b=(nhietdo%1000)/100;
c=(nhietdo%100)/10;
d=nhietdo%10;
}
/* 5V = 1024 muc => 10mV tuong ung voi 2.048 muc ADC
0oC = 273oK => 0oC ung voi muc dien the 2.73V ung voi 559 muc ADC
Nhiet do = dien the Analog/10 - 273
Tuong ung
Nhiet do = (adc -559)/2.024
Xuat gia tri nhiet do ra LED 7 doan hay LCD*/
13% và 17% ROM hơi nhiều
