BÀI 23 : ĐO NHIỆT ĐỘ LM35 HIỂN THỊ LCD PIC16F877A XC8

7:22:00 PM

1. Giới thiệu.

Cảm Biến Nhiệt Độ LM35 được sản xuất bởi hãng national Semiconductor dải đo từ 0 Độ đến 100 độ C. LM35 là cảm biến tiêu hao điện năng thấp sử dụng điện áp 5V. Cảm biến gồm có 3 chân, 2 chân nguồn, 1 chân tín hiệu ra dạng Analog.

Chân dữ liệu của LM35 là chân ngõ ra điện áp dạng tuyến tính. Chân số 2 cảm biến xuất ra cứ 1mV = 0.1°C (10mV = 1°C). Để lấy dữ liệu ở dạng °C chỉ cần lấy điện áp trên chân OUT đem chia cho 10.

cam bien nhiet do lm35 
Chân 1 cấp điện áp 5V, chân 3 cấp GND, chân 2 là chân OUTPUT dữ liệu dạng điện áp. 

Như vậy, bằng cách đưa vào chân bên trái của cảm biến LM35 hiệu điện thế 5V, chân phải nối đất, đo hiệu điện thế ở chân giữa bằng các pin A, bạn sẽ có được nhiệt độ (0-100ºC) bằng công thức: 
voltage = 5000.0f / 1023 * ADCvalue;

Với LM35, bạn có thể tự tạo cho mình mạch cảm biến nhiệt độ sử dụng LM35 và tự động ngắt điện khi nhiệt độ vượt ngưỡng tối đa, đóng điện khi nhiệt độ thấp hơn ngưỡng tối thiểu thông qua module rơ le...
LM35 thay đổi nhiệt độ nhanh và chính xác.

- Đây là ảnh mô phỏng protues.

lm35 lcd pic16f877a xc8
- Đây là code chương trình.
#include <stdio.h>

#include <stdlib.h>

#define _XTAL_FREQ 8000000

#define RS RD2

#define EN RD3
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7
#include <xc.h>
#include "lcd.h"
// CONFIG
#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
void ADCinit (void);
unsigned int ReadADC (void);
unsigned int ADCvalue = 0;
float f;
unsigned int voltage;
void main(void)
{
  ADCinit();
  char s[20];
  int c = 33;
  TRISD = 0x00;
  RA0 = 1;
  TRISA0 = 1;
  Lcd_Init();
  while(1)
  {
    ADCvalue = ReadADC();
    voltage = 5000.0f / 1023 * ADCvalue;
    f = voltage / 10;
    sprintf(s, "NHIET DO = %g ", f);
    Lcd_Set_Cursor(1,1);
    Lcd_Write_String(s);
    Lcd_Write_Char(223);
    Lcd_Write_String("C");
    sprintf(s, "MSSV IS = %u ", c);
    Lcd_Set_Cursor(2,1);
    Lcd_Write_String(s);
  }
}
void ADCinit (void)// adc
{
    // chon tan so clock cho bo adc
    ADCON1bits.ADCS2 = 0, ADCON0bits.ADCS1 = 0,ADCON0bits.ADCS0 = 1;
    // chon kenh adc la kenh an0
    ADCON0bits.CHS2 = 0, ADCON0bits.CHS1 = 0, ADCON0bits.CHS0 = 0;
    // chon cach luu data
    ADCON1bits.ADFM = 1;
    // cau hinh cong vao
    ADCON1bits.PCFG3 = 1,  ADCON1bits.PCFG2 = 1,  ADCON1bits.PCFG1 = 1,  ADCON1bits.PCFG0 = 0;
    // cap nguon cho khoi adc
    ADCON0bits.ADON = 1;
}
unsigned int ReadADC (void)// doc len 7 doan
{
    unsigned int TempValue = 0;
    ADCON0bits.GO_nDONE = 1;
    while(ADCON0bits.GO_nDONE);
    TempValue = ADRESH*256 + ADRESL;
    return (TempValue);
}
- Link download project Click here

Share this

Related Posts

Previous
Next Post »

2 nhận xét

Write nhận xét
October 9, 2017 at 8:38 PM delete

ad cho mình xin file thư viện LCD với

Reply
avatar
July 27, 2023 at 11:56 AM delete

dạ ad ơi cho em xin file thư viện lcd với main.h với ạ

Reply
avatar