- Komponen yang Diperlukan:
- Rajah Litar:
- Mengukur Suhu dengan LM35 menggunakan 8051:
- LCD 16x2:
- IC ADC0804:
- Sensor Suhu LM35:
- Penjelasan kod:
Kadang kala orang sukar membaca suhu dari termometer analog kerana turun naik. Jadi di sini kita akan membina termometer Digital sederhana menggunakan mikrokontroler 8051 di mana sensor LM35 digunakan untuk mengukur suhu. Kami juga telah menggunakan LM35 untuk membina termometer digital menggunakan Arduino, NodeMCU, PIC, Raspberry Pi dan mikrokontroler lain.
Projek ini juga akan berfungsi sebagai penghubung ADC0804 dengan 8051 dan 16 * 2 LCD dengan 8051 mikrokontroler.
Komponen yang Diperlukan:
- Papan pengembangan 8051
- Papan ADC0804
- Paparan LCD 16 * 2
- Sensor LM35
- Potensiometer
- Wayar pelompat
Rajah Litar:
Gambarajah litar untuk Litar Termometer Digital menggunakan LM35 diberikan di bawah:
Mengukur Suhu dengan LM35 menggunakan 8051:
8051 mikrokontroler adalah mikrokontroler 8 bit yang mempunyai 128 bita pada cip RAM, bait 4K pada cip ROM, dua pemasa, satu port bersiri dan empat port 8bit. 8052 mikrokontroler adalah lanjutan dari mikrokontroler. Jadual di bawah menunjukkan perbandingan 8051 ahli keluarga.
Ciri |
8051 |
8052 |
ROM (dalam bait) |
4K |
8 RIBU |
RAM (bait) |
128 |
256 |
Pemasa |
2 |
3 |
Pin I / O |
32 |
32 |
Pelabuhan bersiri |
1 |
1 |
Mengganggu sumber |
6 |
8 |
LCD 16x2:
LCD 16 * 2 adalah paparan yang banyak digunakan untuk aplikasi terbenam. Berikut adalah penjelasan ringkas mengenai pin dan cara kerja paparan LCD 16 * 2. Terdapat dua daftar yang sangat penting di dalam LCD. Mereka adalah daftar data dan daftar perintah. Daftar perintah digunakan untuk mengirim perintah seperti tampilan yang jelas, kursor di rumah dll., Daftar data digunakan untuk mengirim data yang akan ditampilkan pada LCD 16 * 2. Jadual di bawah menunjukkan penerangan pin 16 * 2 lcd.
Sematkan |
Simbol |
Saya / O |
Penerangan |
1 |
Vss |
- |
Tanah |
2 |
Vdd |
- |
+ 5V bekalan kuasa |
3 |
Vee |
- |
Bekalan kuasa untuk mengawal kontras |
4 |
RS |
Saya |
RS = 0 untuk daftar arahan, RS = 1 untuk daftar data |
5 |
RW |
Saya |
R / W = 0 untuk menulis, R / W = 1 untuk membaca |
6 |
E |
Saya / O |
Aktifkan |
7 |
D0 |
Saya / O |
Bas data 8-bit (LSB) |
8 |
D1 |
Saya / O |
Bas data 8-bit |
9 |
D2 |
Saya / O |
Bas data 8-bit |
10 |
D3 |
Saya / O |
Bas data 8-bit |
11 |
D4 |
Saya / O |
Bas data 8-bit |
12 |
D5 |
Saya / O |
Bas data 8-bit |
13 |
D6 |
Saya / O |
Bas data 8-bit |
14 |
D7 |
Saya / O |
Bas data 8-bit (MSB) |
15 |
A |
- |
+ 5V untuk lampu latar |
16 |
K |
- |
Tanah |
Jadual di bawah menunjukkan kod arahan LCD yang sering digunakan.
Kod (hex) |
Penerangan |
01 |
Skrin paparan yang jelas |
06 |
Kursor kenaikan (pergeseran kanan) |
0A |
Paparkan, kursor dihidupkan |
0C |
Paparan hidup, kursor mati |
0F |
Paparan dihidupkan, kursor berkelip |
80 |
Memaksa kursor ke permulaan 1 st talian |
C0 |
Memaksa kursor ke permulaan 2 nd talian |
38 |
2 baris dan matriks 5 * 7 |
IC ADC0804:
The ADC0804 IC adalah selari ADC 8-bit dalam keluarga siri ADC0800 dari National Semiconductor. Ia berfungsi dengan +5 volt dan mempunyai resolusi 8 bit. Ukuran langkah dan julat Vin berbeza untuk nilai Vref / 2 yang berbeza. Jadual di bawah menunjukkan hubungan antara julat Vref / 2 dan Vin.
Vref / 2 (V) |
Vin (V) |
Ukuran langkah (mV) |
buka |
0 hingga 5 |
19.53 |
2.0 |
0 hingga 4 |
15.62 |
1.5 |
0 hingga 3 |
11.71 |
1.28 |
0 hingga 2.56 |
10 |
Dalam kes kami Vref / 2 disambungkan ke 1,28 volt, jadi ukuran langkah adalah 10mV. Untuk ukuran langkah ADC0804 dikira sebagai (2 * Vref / 2) / 256.
Rumus berikut digunakan untuk mengira voltan keluaran:
Dout = Ukuran Vin / langkah
Di mana Dout adalah output data digital dalam perpuluhan, Vin = voltan input analog dan ukuran langkah (resolusi) adalah perubahan terkecil. Ketahui lebih lanjut mengenai ADC0804 di sini, periksa juga antara muka ADC0808 dengan 8051.
Sensor Suhu LM35:
LM35 adalah sensor suhu yang voltan keluarannya berkadar linear dengan suhu Celsius. LM35 sudah dikalibrasi dan tidak memerlukan penentukuran luaran. Ia menghasilkan 10mV untuk setiap darjah suhu Celsius.
Sensor LM35 menghasilkan voltan yang sepadan dengan suhu. Voltan ini ditukar menjadi digital (0 hingga 256) oleh ADC0804 dan ia diumpankan ke 8051 mikrokontroler. 8051 mikrokontroler menukar nilai digital ini menjadi suhu dalam darjah Celsius. Kemudian suhu ini diubah menjadi bentuk ascii yang sesuai untuk dipaparkan. Nilai ascii ini diberi 16 * 2 lcd yang memaparkan suhu pada skrinnya. Proses ini diulang setelah selang waktu yang ditentukan.
Di bawah ini adalah gambar persediaan untuk LM35 Digital Thermometer menggunakan 8051:
Anda boleh mendapatkan semua termometer digital berasaskan LM35 di sini.
Penjelasan kod:
Program C yang lengkap untuk Termometer Digital ini menggunakan LM35 diberikan pada akhir projek ini. Kod ini dibahagikan kepada potongan kecil yang bermakna dan dijelaskan di bawah.
Untuk antara muka LCD 16 * 2 dengan 8051 mikrokontroler, kita harus menentukan pin yang mana 16 * 2 lcd disambungkan ke 8051 mikrokontroler. Pin RS 16 * 2 lcd disambungkan ke P2.7, pin RW 16 * 2 lcd disambungkan ke P2.6 dan pin E 16 * 2 lcd disambungkan ke P2.5. Pin data disambungkan ke port 0 dari 8051 mikrokontroler.
sbit rs = P2 ^ 7; // Daftar Pilih (RS) pin 16 * 2 lcd sbit rw = P2 ^ 6; // Baca / Tulis (RW) pin 16 * 2 lcd sbit en = P2 ^ 5; // Aktifkan (E) pin 16 * 2 lcd
Begitu juga, untuk ADC0804 yang berinteraksi dengan 8051 mikrokontroler, kita harus menentukan pin di mana ADC0804 disambungkan ke 8051 mikrokontroler. Pin RD ADC0804 disambungkan ke P3.0, pin WR ADC0804 disambungkan ke P3.1 dan pin INTR ADC0804 disambungkan ke P3.2. Pin data disambungkan ke port 1 dari 8051 mikrokontroler.
sbit rd_adc = P3 ^ 0; // Baca (RD) pin ADC0804 sbit wr_adc = P3 ^ 1; // Tulis (WR) pin ADC0804 sbit intr_adc = P3 ^ 2; // Pin Interrupt (INTR) ADC0804
Seterusnya kita harus menentukan beberapa fungsi yang digunakan dalam program ini. Fungsi kelewatan digunakan untuk membuat penundaan waktu yang ditentukan, fungsi c mdwrt digunakan untuk mengirim perintah ke paparan 16 * 2 lcd, fungsi datawrt digunakan untuk mengirim data ke paparan 16 * 2 lcd dan fungsi convert_display digunakan untuk mengubah data ADC menjadi suhu dan untuk memaparkannya pada paparan 16 * 2 lcd.
kelewatan tidak sah (int tidak ditandatangani); // fungsi untuk membuat delay void cmdwrt (char yang tidak ditandatangani); // fungsi untuk menghantar arahan ke paparan 16 * 2 lcd batal datawrt (char unsigned) // fungsi untuk menghantar data ke paparan 16 * 2 lcd void convert_display (char unsigned); // fungsi untuk menukar nilai ADC ke suhu dan memaparkannya pada paparan 16 * 2 lcd
Di bahagian bawah kod, kami mengirimkan perintah ke 16 * 2 lcd. Arahan seperti paparan yang jelas, kursor kenaikan, memaksa kursor ke permulaan 1 st garis dihantar ke 16 * 2 lcd paparan satu demi satu selepas beberapa kelewatan masa yang ditetapkan.
untuk (i = 0; i <5; i ++) // hantar arahan ke 16 * 2 lcd memaparkan satu arahan pada satu masa {cmdwrt (cmd); // fungsi panggilan untuk menghantar perintah ke paparan paparan 16 * 2 lcd (1); }
Di bahagian kod ini, kami mengirimkan data ke 16 * 2 lcd. Data yang akan dipaparkan pada paparan lcd 16 * 2 dikirim untuk dipaparkan satu persatu setelah beberapa waktu yang ditentukan.
untuk (i = 0; i <12; i ++) // menghantar data ke 16 * 2 lcd memaparkan satu watak pada satu masa {datawrt (data1); // fungsi panggilan untuk menghantar data kepada kelewatan paparan 16 * 2 lcd (1); } Di bahagian kod ini, kita menukar voltan analog yang dihasilkan oleh sensor LM35 ke data digital dan kemudian ditukar menjadi suhu dan dipaparkan pada paparan 16 * 2 lcd. Untuk ADC0804 untuk memulakan penukaran, kita harus menghantar pulsa rendah ke tinggi pada pin WR ADC0804, maka kita harus menunggu akhir penukaran. INTR menjadi rendah pada akhir penukaran. Setelah INTR menjadi rendah, RD dibuat rendah untuk menyalin data digital ke port 0 dari 8051 mikrokontroler. Selepas kelewatan masa yang ditentukan, kitaran seterusnya bermula. Proses ini berulang selama-lamanya.
sementara (1) // ulangi selama-lamanya {wr_adc = 0; // hantar denyut RENDAH ke TINGGI pada penundaan pin WR (1); wr_adc = 1; sementara (intr_adc == 1); // tunggu Tamat Penukaran rd_adc = 0; // buat RD = 0 untuk membaca data dari nilai ADC0804 = P1; // salin data ADC convert_display (nilai); // fungsi panggilan untuk menukar data ADC menjadi suhu dan memaparkannya pada kelewatan paparan 16 * 2 lcd (1000); // selang antara setiap kitaran rd_adc = 1; // buat RD = 1 untuk kitaran seterusnya}
Di bahagian bawah kod, kami mengirimkan perintah ke paparan 16 * 2 lcd. Perintah disalin ke port 0 dari 8051 mikrokontroler. RS dibuat rendah untuk menulis perintah. RW dibuat rendah untuk operasi tulis. Denyut tinggi hingga rendah digunakan pada pin membolehkan (E) untuk memulakan operasi menulis perintah.
batal cmdwrt (tanda tidak ditandatangani x) {P0 = x; // hantar arahan ke Port 0 di mana 16 * 2 lcd disambungkan rs = 0; // buat RS = 0 untuk perintah rw = 0; // buat RW = 0 untuk operasi tulis en = 1; // hantar denyut HIGH to LOW pada pin Enable (E) untuk memulakan kelewatan operasi perintah perintah (1); en = 0; }
Di bahagian kod ini, kami mengirimkan data ke paparan 16 * 2 lcd. Data disalin ke port 0 dari 8051 mikrokontroler. RS dibuat tinggi untuk menulis perintah. RW dibuat rendah untuk operasi tulis. Denyut tinggi hingga rendah digunakan pada pin membolehkan (E) untuk memulakan operasi menulis data.
batal datawrt (char tidak bertanda tangan) {P0 = y; // hantar data ke Port 0 di mana 16 * 2 lcd disambungkan rs = 1; // buat RS = 1 untuk perintah rw = 0; // buat RW = 0 untuk operasi tulis en = 1; // hantar nadi HIGH to LOW pada pin Enable (E) untuk memulakan kelewatan operasi penulisan data (1); en = 0; }
Di bahagian kod ini, kami mengubah data digital menjadi suhu dan memaparkannya pada paparan 16 * 2 lcd.
void convert_display (nilai char yang tidak ditandatangani) {char x1, x2, x3 yang tidak ditandatangani; cmdwrt (0xc6); // perintah untuk menetapkan kursor ke kedudukan ke-6 dari baris ke-2 pada 16 * 2 lcd x1 = (nilai / 10); // bahagikan nilainya dengan 10 dan simpan hasil dalam pemboleh ubah x1 x1 = x1 + (0x30); // ubah pemboleh ubah x1 ke ascii dengan menambahkan 0x30 x2 = nilai% 10; // bahagikan nilainya dengan 10 dan simpan baki dalam pemboleh ubah x2 x2 = x2 + (0x30); // ubah pemboleh ubah x2 ke ascii dengan menambahkan 0x30 x3 = 0xDF; // nilai ascii darjah (°) simbol datawrt (x1); // suhu paparan pada paparan data paparan 16 * 2 lcd (x2); datawrt (x3); datawrt ('C'); }
Juga, periksa termometer lain menggunakan LM35 dengan pengawal mikro yang berbeza:
- Termometer Digital menggunakan Arduino dan LM35
- Pengukuran Suhu menggunakan LM35 dan AVR Microcontroller
- Pengukuran Suhu Bilik dengan Raspberry Pi