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ử