Project đo và hiển thị nhiệt độ lên LCD 16x2, sử dụng cảm biến LM35 và vi điều khiển Pic 16f887.
- Ở đây ta sử dụng 1.5V làm Vref (ngõ ra cảm biến LM35 tăng 10mv/1 độ C, nhiệt độ max 150 độ = 1500mv=1.5V)
- ADCres = 1.5/1024 = 0.0014648 (do ADC 10bit nên 2^10=1024)
- Tempc = value_adc*ADCres/0.01 = value_adc*0.14648
![]() |
LM35 with pic 16f887 and LCD 16x2 |
/*Project covert adc from sensor LM35, processing and display value on lcd.
Author: Minh Trung
Site: http://dientudieukhien.net
*/
//CONFIG LCD
sbit LCD_RS at RD4_bit;
sbit LCD_EN at RD5_bit;
sbit LCD_D7 at RD0_bit;
sbit LCD_D6 at RD1_bit;
sbit LCD_D5 at RD2_bit;
sbit LCD_D4 at RD3_bit;
sbit LCD_RS_Direction at TRISD4_bit;
sbit LCD_EN_Direction at TRISD5_bit;
sbit LCD_D7_Direction at TRISD0_bit;
sbit LCD_D6_Direction at TRISD1_bit;
sbit LCD_D5_Direction at TRISD2_bit;
sbit LCD_D4_Direction at TRISD3_bit;
//END CONFIG LCD
unsigned int value_adc=0;
unsigned float tempc;
char tex1[]="TEMPERATURE:";
char *tex2[15];
void main() {
Adc_Init();
Lcd_Init();
ANSEL=0b00001001; //Config porta.b0, porta.b3 as analog
ANSELH=0x00;
ADCON1=0x30; //Config porta.B3 as Vref+
TRISA.b0=1; //porta.b0, porta.b3 as input
TRISA.b3=1;
C1ON_bit=0; //disable compare
C2ON_bit=0;
TRISD=0x00; //Portd as output
Lcd_out(1,1,tex1);
delay_ms(100);
while(1){
value_adc=Adc_read(0); //Get Adc value
delay_ms(100);
tempc=(float)(value_adc*0.14648); //Vref is 1.5V
floattostr(tempc,tex2);
Lcd_cmd(_LCD_CURSOR_OFF);
Lcd_chr(2,9,223); // Display symbol "o" C
Lcd_out(2,10,"C");
Lcd_out(2,1,tex2);
delay_ms(100);
}
}
|| Download project in Miklroc and Proteus
0 nhận xét: