- Potrebne komponente:
- Kružni dijagram:
- Mjerenje temperature pomoću LM35 pomoću 8051:
- LCD od 16x2:
- ADC0804 IC:
- LM35 senzor temperature:
- Objašnjenje koda:
Ponekad je ljudima teško čitati temperaturu s analognog termometra zbog fluktuacija. Dakle, ovdje ćemo izgraditi jednostavni digitalni termometar pomoću mikrokontrolera 8051 u kojem se LM35 senzor koristi za mjerenje temperature. Također smo koristili LM35 za izradu digitalnog termometra koristeći Arduino, NodeMCU, PIC, Raspberry Pi i druge mikrokontrolere.
Ovaj će projekt također poslužiti kao pravilno povezivanje ADC0804 s 8051 i LCD 16 * 2 s 8051 mikrokontrolerom.
Potrebne komponente:
- 8051 razvojna ploča
- Ploča ADC0804
- LCD zaslon od 16 * 2
- LM35 senzor
- Potenciometar
- Žice kratkospojnika
Kružni dijagram:
Dijagram kruga za krug digitalnog termometra koji koristi LM35 dat je u nastavku:

Mjerenje temperature pomoću LM35 pomoću 8051:
8051 mikrokontroler je 8-bitni mikrokontroler koji ima 128 bajta čip RAM-a, 4K bajta čip ROM-a, dva tajmera, jedan serijski port i četiri 8-bitna porta. 8052 mikrokontroler je produžetak mikrokontrolera. Tablica u nastavku prikazuje usporedbu 8051 člana obitelji.
|
Značajka |
8051 |
8052 |
|
ROM (u bajtovima) |
4K |
8K |
|
RAM (bajtovi) |
128 |
256 |
|
Tajmeri |
2 |
3 |
|
I / O igle |
32 |
32 |
|
Serijski priključak |
1 |
1 |
|
Izvori prekida |
6 |
8 |

LCD od 16x2:
LCD 16 * 2 široko je korišten zaslon za ugrađene aplikacije. Evo kratkog objašnjenja o pinovima i radu LCD zaslona 16 * 2. Unutar LCD-a nalaze se dva vrlo važna registra. Oni su registar podataka i registar naredbi. Registar naredbi koristi se za slanje naredbi poput jasnog prikaza, pokazivača kod kuće itd., Registar podataka koristi se za slanje podataka koji će se prikazati na LCD-u 16 * 2. Ispod tablice prikazan je pin opis 16 * 2 lcd.
|
Prikvači |
Simbol |
I / O |
Opis |
|
1 |
Vss |
- |
Prizemlje |
|
2 |
Vdd |
- |
+ 5V napajanje |
|
3 |
Vee |
- |
Napajanje za kontrolu kontrasta |
|
4 |
RS |
Ja |
RS = 0 za registar naredbi, RS = 1 za registar podataka |
|
5 |
RW |
Ja |
R / W = 0 za pisanje, R / W = 1 za čitanje |
|
6 |
E |
I / O |
Omogućiti |
|
7 |
D0 |
I / O |
8-bitna sabirnica podataka (LSB) |
|
8 |
D1 |
I / O |
8-bitna sabirnica podataka |
|
9 |
D2 |
I / O |
8-bitna sabirnica podataka |
|
10 |
D3 |
I / O |
8-bitna sabirnica podataka |
|
11 |
D4 |
I / O |
8-bitna sabirnica podataka |
|
12 |
D5 |
I / O |
8-bitna sabirnica podataka |
|
13 |
D6 |
I / O |
8-bitna sabirnica podataka |
|
14 |
D7 |
I / O |
8-bitna sabirnica podataka (MSB) |
|
15 |
A |
- |
+ 5V za pozadinsko osvjetljenje |
|
16 |
K |
- |
Prizemlje |
Tablica u nastavku prikazuje često korištene kodove LCD naredbi.
|
Šifra (hex) |
Opis |
|
01 |
Jasan zaslon |
|
06 |
Kursor za povećanje (pomak udesno) |
|
0A |
Zaslon isključen, pokazivač uključen |
|
0C |
Zaslon uključen, pokazivač isključen |
|
0F |
Zaslon uključen, pokazivač treperi |
|
80 |
Prisiliti kursor na početak 1. st linije |
|
C0 |
Postavite kursor na početak 2. retka |
|
38 |
2 retka i matrica 5 * 7 |
ADC0804 IC:
ADC0804 IC je 8-bitni paralelni ADC u obitelji ADC0800 serija iz National Semiconductor. Radi s +5 volti i ima razlučivost od 8 bita. Veličina koraka i raspon Vin variraju za različite vrijednosti Vref / 2. Tablica u nastavku prikazuje vezu između Vref / 2 i Vin raspona.
|
Vref / 2 (V) |
Vin (V) |
Veličina koraka (mV) |
|
otvoren |
0 do 5 |
19.53 |
|
2.0 |
0 do 4 |
15,62 |
|
1.5 |
0 do 3 |
11,71 |
|
1.28 |
0 do 2,56 |
10 |
U našem slučaju Vref / 2 je spojen na 1,28 volta, pa je veličina koraka 10mV. Za ADC0804 veličina koraka izračunava se kao (2 * Vref / 2) / 256.
Za izračunavanje izlaznog napona koristi se sljedeća formula:
Dout = Vin / veličina koraka
Gdje je Dout digitalni izlaz podataka u decimalu, Vin = analogni ulazni napon i veličina koraka (razlučivost) najmanja su promjena. Ovdje saznajte više o ADC0804, provjerite i međusobno povezivanje ADC0808 s 8051.
LM35 senzor temperature:
LM35 je temperaturni senzor čiji je izlazni napon linearno proporcionalan Celzijevoj temperaturi. LM35 dolazi već kalibriran, stoga ne zahtijeva vanjsku kalibraciju. Izlazi 10mV za svaki stupanj Celzijeve temperature.
LM35 senzor proizvodi napon koji odgovara temperaturi. Ovaj napon ADC0804 pretvara u digitalni (0 do 256) i napaja se na 8051 mikrokontroler. 8051 mikrokontroler pretvara ovu digitalnu vrijednost u temperaturu u Celzijevim stupnjevima. Tada se ta temperatura pretvara u oblik ascii koji je prikladan za prikaz. Te se ascii vrijednosti dodaju na 16 * 2 lcd koji prikazuje temperaturu na svom zaslonu. Taj se postupak ponavlja nakon određenog intervala.
Ispod je slika za postavljanje digitalnog termometra LM35 koji koristi 8051:

Sve digitalne termometre na bazi LM35 možete pronaći ovdje.
Objašnjenje koda:
Kompletni C program za ovaj digitalni termometar koji koristi LM35 dat je na kraju ovog projekta. Kôd je podijeljen na male značajne dijelove i objašnjen u nastavku.
Za 16 * 2 LCD povezivanje s 8051 mikrokontrolerom, moramo definirati igle na kojima je 16 * 2 lcd povezan s 8051 mikrokontrolerom. RS pin od 16 * 2 lcd spojen je na P2.7, RW pin od 16 * 2 lcd spojen je na P2.6, a E pin od 16 * 2 lcd je spojen na P2.5. Priključci za podatke povezani su na priključak 0 mikrokontrolera 8051.
sbit rs = P2 ^ 7; // Registriraj odabir (RS) pin od 16 * 2 lcd sbit rw = P2 ^ 6; // Čitanje / pisanje (RW) pin od 16 * 2 lcd sbit en = P2 ^ 5; // Omogući (E) pin od 16 * 2 lcd
Slično tome, za ADC0804 povezivanje s 8051 mikrokontrolerom, moramo definirati pinove na kojima je ADC0804 povezan s 8051 mikrokontrolerom. RD pin ADC0804 spojen je na P3.0, WR pin ADC0804 spojen je na P3.1, a INTR pin ADC0804 spojen je na P3.2. Priključci za podatke povezani su na priključak 1 mikrokontrolera 8051.
sbit rd_adc = P3 ^ 0; // Očitavanje (RD) pina ADC0804 sbit wr_adc = P3 ^ 1; // Zapiši (WR) pin ADC0804 sbit intr_adc = P3 ^ 2; // Prekidni (INTR) pin ADC0804
Dalje moramo definirati neke funkcije koje se koriste u programu. Funkcija odgode koristi se za stvaranje određenog vremenskog kašnjenja, c mdwrt funkcija koristi se za slanje naredbi na 16 * 2 lcd zaslon, funkcija datawrt koristi se za slanje podataka na 16 * 2 lcd zaslon, a convert_display funkcija koristi za pretvaranje ADC podataka u temperaturu i prikazati ga na 16 * 2 lcd displeju.
odgoda praznine (nepotpisan int); // funkcija za stvaranje kašnjenja void cmdwrt (nepotpisani znak); // funkcija za slanje naredbi na 16 * 2 lcd display void datawrt (nepotpisani znak); // funkcija za slanje podataka na 16 * 2 lcd display void convert_display (nepotpisani znak); // funkcija za pretvaranje vrijednosti ADC u temperaturu i prikaz na zaslonu od 16 * 2 lcd
U donjem dijelu koda šaljemo naredbe na 16 * 2 lcd. Naredbe kao što su jasan prikaz, prirasta pokazivača, prisiliti kursor na početak 1. st linije su poslane na 16 * 2 LCD zaslon jednog po jednog nakon nekog određenog vremena kašnjenja.
for (i = 0; i <5; i ++) // slanje naredbi na 16 * 2 lcd prikazuje po jednu naredbu {cmdwrt (cmd); // funkcijski poziv za slanje naredbi na 16 * 2 lcd display delay (1); }
U ovom dijelu koda podatke šaljemo na 16 * 2 lcd. Podaci koji se prikazuju na LCD zaslonu 16 * 2 šalju se jedan po jedan nakon određenog vremenskog kašnjenja.
for (i = 0; i <12; i ++) // slanje podataka na 16 * 2 lcd prikazuje po jedan znak {datawrt (data1); // funkcijski poziv za slanje podataka na kašnjenje zaslona od 16 * 2 lcd (1); } U ovom dijelu koda pretvaramo analogni napon proizveden od senzora LM35 u digitalne podatke, a zatim se pretvara u temperaturu i prikazuje na 16 * 2 lcd displeju. Da bi ADC0804 započeo pretvorbu, moramo poslati nizak do visoki impuls na WR pin ADC0804, a zatim moramo pričekati kraj pretvorbe. INTR postaje nizak na kraju pretvorbe. Jednom kad INTR postane nizak, RD postaje nizak za kopiranje digitalnih podataka na port 0 mikrokontrolera 8051. Nakon određenog vremenskog kašnjenja započinje sljedeći ciklus. Taj se postupak ponavlja zauvijek.
while (1) // ponavljamo zauvijek {wr_adc = 0; // slanje NIZKOG do VISOKOG impulsa na kašnjenju WR pina (1); wr_adc = 1; dok (intr_adc == 1); // čekamo Kraj pretvorbe rd_adc = 0; // napravimo RD = 0 za čitanje podataka iz ADC0804 value = P1; // kopiranje ADC podataka convert_display (vrijednost); // funkcijski poziv za pretvaranje ADC podataka u temperaturu i prikaz na 16 * 2 lcd display delay (1000); // interval između svakog ciklusa rd_adc = 1; // napravimo RD = 1 za sljedeći ciklus}
U donjem dijelu koda šaljemo naredbe na LCD zaslon 16 * 2. Naredba se kopira na port 0 mikrokontrolera 8051. RS je smanjen za pisanje naredbi. RW je smanjen za operaciju pisanja. Puls visokog do niskog stupnja primjenjuje se na osovinici za omogućivanje (E) za pokretanje operacije pisanja naredbe.
praznina cmdwrt (nepotpisani char x) {P0 = x; // pošalje naredbu na Port 0 na koji je spojen 16 * 2 lcd rs = 0; // napravimo RS = 0 za naredbu rw = 0; // napravimo RW = 0 za operaciju pisanja en = 1; // pošaljite HIGH to LOW impuls na Enable (E) pin da biste pokrenuli kašnjenje rada naredbe pisanja (1); en = 0; }
U ovom dijelu koda šaljemo podatke na LCD zaslon 16 * 2. Podaci se kopiraju na port 0 mikrokontrolera 8051. RS je visok za pisanje naredbi. RW je smanjen za operaciju pisanja. Puls visokog do niskog stupnja primjenjuje se na osovinici za omogućivanje (E) za pokretanje postupka upisivanja podataka.
void datawrt (nepotpisani znak y) {P0 = y; // poslati podatke na port 0 na koji je spojen 16 * 2 lcd rs = 1; // napravimo RS = 1 za naredbu rw = 0; // napravimo RW = 0 za operaciju pisanja en = 1; // pošalji impuls HIGH to LOW na Omogući (E) pin da započne kašnjenje rada pisanja podataka (1); en = 0; }
U ovom dijelu koda pretvaramo digitalne podatke u temperaturu i prikazujemo ih na 16 * 2 lcd zaslonu.
void convert_display (nepotpisana vrijednost znaka) {nepotpisani znak x1, x2, x3; cmdwrt (0xc6); // naredba za postavljanje kursora na 6. mjesto 2. retka na 16 * 2 lcd x1 = (vrijednost / 10); // vrijednost podijelimo s 10 i pohranimo količnik u varijablu x1 x1 = x1 + (0x30); // pretvorimo varijablu x1 u ascii dodavanjem 0x30 x2 = vrijednost% 10; // vrijednost podijelimo s 10 i ostatak pohranimo u varijablu x2 x2 = x2 + (0x30); // pretvorimo varijablu x2 u ascii dodavanjem 0x30 x3 = 0xDF; // ascii vrijednost stupnja (°) simbola datawrt (x1); // prikaz temperature na 16 * 2 lcd display datawrt (x2); datawrt (x3); datawrt ('C'); }
Također, provjerite ostale termometre koji koriste LM35 s različitim mikrokontrolerima:
- Digitalni termometar koji koristi Arduino i LM35
- Mjerenje temperature pomoću LM35 i AVR mikrokontrolera
- Mjerenje sobne temperature s Raspberry Pi
