Chat
Danh mục
Mạch đo Nhiệt độ - Đo áp suất hiển thị LCD 16x2 - IC PIC

Mạch đo Nhiệt độ - Đo áp suất hiển thị LCD 16x2 - IC PIC

Số lượng:
Thêm vào giỏ
Mạch đo Nhiệt độ - Đo áp suất hiển thị LCD 16x2 - IC PIC đã được thêm vào giỏ hàng



Chia sẻ với các bạn File Đồ án lập trình hiển thị cảm biến Nhiệt độ - Áp suất lên màn hình LCD 16x 2  do bạn Dao Nguyen viết.

File gồm:
- Mô phỏng Protues 8.6
- Code C
- Nguyên lý - Layout Altium

File Code C:
#include <main.h>
#define LCD_RS_PIN PIN_B6    // RS noi voi B6
#define LCD_RW_PIN PIN_B5
#define LCD_ENABLE_PIN PIN_B4 // chan E noi voi B4
#define LCD_DATA4 PIN_B3    //D4 noi voi B3
#define LCD_DATA5 PIN_B2
#define LCD_DATA6 PIN_B1
#define LCD_DATA7 PIN_B0
#include <lcd.c>

float AC1,AC2,AC3,AC4,AC5,AC6,B1,B2,MB,MC,MD; //cac tham so phuc vu tinh toan
float B5;
void ghi(unsigned char add, unsigned char data)
{
   
   i2c_start();       // bao hieu bat dau giao tiep i2c
   i2c_write(0xEE);   // dia chi thiet bi nhan  // 0xEE la dia chi i2c cua cam bien ap suat
   i2c_write(add);    // gui den dia chi cua thiet bi nhan
   i2c_write(data);   // ghi data vao dia chi tren cua thiet bi nhan
   i2c_stop();        // bao hieu ngung ghi
}
signed char doc(unsigned char add)
{
   unsigned char dat;
   i2c_start();      // bao hieu bat dau giao tiep i2c
   i2c_write(0xEE);  // dia chi thiet bi doc  // 0xEE la dia chi i2c cua cam bien ap suat
   i2c_write(add);   // gui ma lenh doc du lieu tu dia chi(add)
   i2c_start();
   i2c_write(0xEF);    // chuyen 0xEE thanh 0xEF de bao hieu la doc data
   dat = i2c_read(0);     // doc data
   i2c_stop();       // ket thuc qua trinh doc du lieu             
   return (dat);  // tra ve gia tri da doc duoc
}


void BMP180_init()
{
     AC1 = 408;
     AC2 = -72;
     AC3 = -14383;
     AC4 = 32741;
     AC5 = 32757;
     AC6 = 23153;
     B1 = 6190;
     B2 = 4;
     MB = -32768;
     MC = -8711; // -
     MD = 2868;
}

void  doccambiennhiet()
{
  int16 UT;
  float X1,X2;
  float nhietdo; //cac bien phuc vu tinh nhiet do,

   ghi(0xF4,0x2E);delay_ms(10);
   UT=doc(0xF6)*256 + doc(0xF7);
 
   X1 = ((UT - AC6) * AC5) / 32768;
   X2 = (MC * 2048) / (X1 + MD); // -
   B5 = X1 + X2;
 
  nhietdo =  (( B5 + 8 ) / 160.0 );
  lcd_gotoxy(10,1);
  printf(lcd_putc,"%.1f%cC ",nhietdo,0xDF);
}
void docapsuat()
{
  int16 UP;
  float X1,X2;
  float B6,X3,B3,B4,B7;
  float  p; //cac bien tinh ap xuat
  //---------
  ghi(0xF4,0x34);delay_ms(10);
  UP=(doc(0xF6)*65536 + doc(0xF7)*256 + doc(0xF8)) / 256;
  B6=B5-4000;
  X1=(B2*(B6*B6/4096))/2048;
  X2=AC2*B6/2048;
  X3=X1+X2;
  B3=((AC1*4+X3) + 2)/4;
  X1 = AC3 * B6 / 8192;
  X2 = (B1 * (B6*B6 / 4096)) / 65536;
  X3 =((X1+X2)+2)/4;
  B4 = AC4 * (X3+32768)/ 32768;
  B7 = (UP- B3) * 50000;
  if(B7 < 0x80000000){p=(B7*2)/B4;}
  else {p=(B7/B4)*2;}
  X1 = (p/256) * (p/256);
  X1 = (X1 * 3038)/65536;
  x2 = (-7357 * p) / 65536;
  p  = p+ (X1 + X2 + 3791) / 16;

  lcd_gotoxy(5,2);
  printf(lcd_putc,"%.1f hPA  ",p/100);
}
void main()
{
   lcd_init();
   lcd_gotoxy(1,1);
   printf(lcd_putc,"Nhiet do:");
   lcd_gotoxy(1,2);
   printf(lcd_putc,"A/S:");
   BMP180_init();
   while(TRUE)
   {
    doccambiennhiet();
    docapsuat();
   }
}


File Nguyên lý - PCB:



( Nguyên lý + Code chuẩn) Link Mediafire
Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút  hiện ra ở góc phải phía trên, nhấn vào để đến trang download
------------------------------------------------------------------------------------
DV1 - Nhận vẽ mạch thuê ONLINE Altium Designer/ Orcad 9.2/ Protues nhanh trong ngày



-----------------------------------------------------------------------------------

DV2 - Mua linh kiện về làm mạch nhanh - Miễn phí Ship





DV3 - Kênh youtube chia sẻ kiến thức điện tử thực hành ngay


DV4 - Kênh cộng đồng Facebook Điện Tử ChipKool




eChipKool - Chia sẻ kiến thức Kết Nối đam mê điện tử