- Szükséges alkatrészek:
- Kördiagramm:
- Hőmérséklet mérése LM35-gyel 8051 alkalmazásával:
- 16x2 LCD:
- ADC0804 IC:
- LM35 hőmérséklet-érzékelő:
- Kód magyarázata:
Néha az emberek nehezen tudják leolvasni a hőmérsékletet az analóg hőmérőből az ingadozások miatt. Tehát itt egy egyszerű digitális hőmérőt fogunk építeni a 8051 mikrovezérlő segítségével, amelyben az LM35 érzékelőt használják a hőmérséklet mérésére. Az LM35 segítségével digitális hőmérőt is építettünk Arduino, NodeMCU, PIC, Raspberry Pi és más mikrovezérlők segítségével.
Ez a projekt az ADC0804 és a 8051, valamint a 16 * 2 LCD és a 8051 mikrovezérlő közötti megfelelő interfészként is szolgál.
Szükséges alkatrészek:
- 8051 fejlesztőtábla
- ADC0804 tábla
- 16 * 2 LCD kijelző
- LM35 érzékelő
- Potenciométer
- Jumper huzalok
Kördiagramm:
Az LM35- t használó digitális hőmérő áramkör kapcsolási rajza az alábbiakban látható:
Hőmérséklet mérése LM35-gyel 8051 alkalmazásával:
A 8051 mikrokontroller egy 8 bites mikrovezérlő, amely 128 bájt chip RAM-mal, 4K bájt chip ROM-on, két időzítővel, egy soros és négy 8 bites porttal rendelkezik. A 8052 mikrovezérlő a mikrovezérlő kiterjesztése. Az alábbi táblázat 8051 családtag összehasonlítását mutatja.
Funkció |
8051 |
8052 |
ROM (bájtban) |
4K |
8K |
RAM (bájt) |
128 |
256 |
Időzítők |
2 |
3 |
I / O csapok |
32 |
32 |
Soros port |
1 |
1 |
Megszakító források |
6. |
8. |
16x2 LCD:
A 16 * 2 LCD széles körben használt kijelző beágyazott alkalmazásokhoz. Ez a rövid magyarázat a csapokról és a 16 * 2 LCD kijelző működéséről. Az LCD-n belül két nagyon fontos regiszter található. Ezek adatregiszter és parancsregiszter. A parancsregiszter olyan parancsok küldésére szolgál, mint például a tiszta kijelzés, a kurzor otthon stb., Az adatregiszter segítségével adatokat küldhetünk, amelyeket a 16 * 2 LCD-n kell megjeleníteni. Az alábbi táblázat a 16 * 2 lbd tű leírását mutatja.
Pin |
Szimbólum |
I / O |
Leírás |
1 |
Vss |
- |
Talaj |
2 |
Vdd |
- |
+ 5V tápegység |
3 |
Vee |
- |
Tápegység a kontraszt szabályozásához |
4 |
RS |
én |
RS = 0 a parancsregiszterhez, RS = 1 az adatregiszterhez |
5. |
RW |
én |
R / W = 0 írás, R / W = 1 olvasás esetén |
6. |
E |
I / O |
Engedélyezze |
7 |
D0 |
I / O |
8 bites adat busz (LSB) |
8. |
D1 |
I / O |
8 bites adat busz |
9. |
D2 |
I / O |
8 bites adat busz |
10. |
D3 |
I / O |
8 bites adat busz |
11. |
D4 |
I / O |
8 bites adat busz |
12. |
D5 |
I / O |
8 bites adat busz |
13. |
D6 |
I / O |
8 bites adat busz |
14 |
D7 |
I / O |
8 bites adat busz (MSB) |
15 |
A |
- |
+ 5V a háttérvilágításhoz |
16. |
K |
- |
Talaj |
Az alábbi táblázat a gyakran használt LCD parancskódokat mutatja.
Kód (hatszög) |
Leírás |
01 |
Tiszta kijelző |
06 |
Növekedési kurzor (jobb eltolás) |
0A |
Kijelző ki, kurzor be van kapcsolva |
0C |
Kijelző be, kurzor ki |
0F |
Kijelző be van kapcsolva, a kurzor villog |
80 |
Kényszeríteni a kurzort kezdődő 1 -jén sor |
C0 |
Kényszeríteni a kurzort kezdődő 2 nd vonal |
38 |
2 sor és 5 * 7 mátrix |
ADC0804 IC:
Az ADC0804 IC egy 8 bites párhuzamos ADC a National Semiconductor ADC0800 sorozatának családjában. +5 voltos feszültséggel működik, felbontása 8bit. A lépésméret és a Vin tartomány a Vref / 2 különböző értékei szerint változik. Az alábbi táblázat a Vref / 2 és a Vin tartomány viszonyát mutatja.
Vref / 2 (V) |
Vin (V) |
Lépés mérete (mV) |
nyisd ki |
0-tól 5-ig |
19.53 |
2.0 |
0-tól 4-ig |
15.62 |
1.5 |
0-tól 3-ig |
11.71 |
1.28 |
0–2,56 |
10. |
Esetünkben a Vref / 2 1,28 voltra van csatlakoztatva, így a lépés mérete 10mV. Az ADC0804 esetében a lépés méretét a (2 * Vref / 2) / 256 értékkel számoljuk.
A következő képletet használjuk a kimeneti feszültség kiszámításához:
Dout = Vin / lépésméret
Ahol a Dout digitális adatkimenet tizedesjegyig, Vin = analóg bemeneti feszültség és lépésméret (felbontás) a legkisebb változás. Tudjon meg többet az ADC0804-ről itt, és ellenőrizze az ADC0808 és a 8051 összeköttetését is.
LM35 hőmérséklet-érzékelő:
Az LM35 olyan hőmérséklet-érzékelő, amelynek kimeneti feszültsége lineárisan arányos a Celsius-hőmérséklettel. Az LM35 már kalibrált, ezért nem igényel külső kalibrálást. 10mV-t ad ki minden Celsius-hőmérsékleti fokhoz.
Az LM35 érzékelő a hőmérsékletnek megfelelő feszültséget állít elő. Ezt a feszültséget az ADC0804 átalakítja digitálissá (0–256), és a 8051 mikrovezérlőbe táplálja. A 8051 mikrokontroller ezt a digitális értéket Celsius-fokban alakítja hőmérsékletgé. Ezután ezt a hőmérsékletet ascii formává alakítják, amely alkalmas megjelenítésre. Ezeket az ascii értékeket 16 * 2 lcd-re tápláljuk, amely a képernyőn megjeleníti a hőmérsékletet. Ezt a folyamatot meghatározott időközönként megismételjük.
Az alábbiakban bemutatjuk az LM35 digitális hőmérő beállításképét a 8051 használatával:
Az összes LM35 alapú digitális hőmérőt itt találja.
Kód magyarázata:
Az LM35- t használó digitális hőmérő teljes C programja a projekt végén található. A kódot apró, értelmes darabokra osztják, és az alábbiakban elmagyarázzák.
A 16 * 2 LCD interfészhez a 8051 mikrovezérlővel meg kell határoznunk azokat a csapokat, amelyeken 16 * 2 lcd van csatlakoztatva a 8051 mikrovezérlőhöz. A 16 * 2 lcd-s RS tű csatlakozik a P2.7-hez, az RW 16 * 2 lcd-s csatlakozó a P2.6-hoz és az E-16 * 2 lcd-s csatlakozó a P2.5-hez. Az adatcsapok a 8051 mikrokontroller 0. portjához vannak csatlakoztatva.
sbit rs = P2 ^ 7; // Register Select (RS) pin of 16 * 2 lcd sbit rw = P2 ^ 6; // 16 * 2 lcd sbit olvasási / írási (RW) tű en = P2 ^ 5; // 16 * 2 lcd (E) tű engedélyezése
Hasonlóképpen, az ADC0804 összekapcsolásához a 8051 mikrovezérlővel meg kell határoznunk azokat a csapokat, amelyekre az ADC0804 csatlakozik a 8051 mikrovezérlőhöz. Az ADC0804 RD csapja a P3.0, az ADC0804 WR csapja a P3.1, az ADC0804 INTR csapja pedig a P3.2. Az adatcsapok a 8051 mikrokontroller 1. portjához vannak csatlakoztatva.
sbit rd_adc = P3 ^ 0; // ADC0804 sbit olvasása (RD) pin sáv wr_adc = P3 ^ 1; // ADC0804 sbit intr_adc = P3 ^ 2 írása (WR); // ADC0804 megszakító (INTR) csapja
Ezután meg kell határoznunk néhány programban használt funkciót. A késleltetés funkcióval meghatározott idő késleltetés jön létre, a c mdwrt funkcióval parancsokat lehet küldeni 16 * 2 lcd kijelzőre, a datawrt funkcióval adatokat kell elküldeni 16 * 2 lcd kijelzőre, a convert_display funkcióval pedig az ADC adatokat hőmérsékletre konvertálni és 16 * 2 lcd kijelzőn jelenítse meg.
void delay (aláíratlan int); // függvény a késleltetés létrehozásához void cmdwrt (unsigned char); // függvény parancsok küldéséhez 16 * 2 lcd kijelzőre void datawrt (aláíratlan karakter); // adatküldés funkció a 16 * 2 lcd kijelzőre void convert_display (aláíratlan karakter); // funkció az ADC érték hőmérsékletre konvertálásához és megjelenítéséhez 16 * 2 lcd kijelzőn
A kód egy részében parancsokat küldünk 16 * 2 lcd-re. Az olyan parancsok, mint a tiszta kijelzés, a növekményes kurzor, a kurzor kényszerítése az 1. sor elejére, bizonyos meghatározott késleltetés után egyesével 16 * 2 lcd kijelzőre kerülnek.
mert (i = 0; i <5; i ++) // parancsok küldése 16 * 2 lcd-re, egy-egy parancs megjelenítése {cmdwrt (cmd); // függvényhívás parancsok küldésére 16 * 2 lcd kijelző késleltetéssel (1); }
A kód ezen részében 16 * 2 lcd-re küldünk adatokat. A 16 * 2 lcd kijelzőn megjelenítendő adatok egyes meghatározott késleltetés után egyenként kerülnek megjelenítésre.
mert (i = 0; i <12; i ++) // adatok küldése 16 * 2 lcd-re egy-egy karaktert jelenít meg {datawrt (data1); // függvényhívás adatküldéshez 16 * 2 lcd kijelző késleltetéssel (1); } A kód ezen részében az LM35 érzékelő által előállított analóg feszültséget digitális adatokká alakítjuk, majd hőmérsékletre konvertáljuk és 16 * 2 lcd kijelzőn jelenítjük meg. Ahhoz, hogy az ADC0804 elindítsa az átalakítást, alacsony vagy magas impulzust kell küldenünk az ADC0804 WR tűjére, majd várnunk kell az átalakítás végére. Az átalakítás végén az INTR alacsony lesz. Amint az INTR alacsony lesz, az RD alacsony lesz, hogy átmásolja a digitális adatokat a 8051 mikrokontroller 0. portjába. Egy meghatározott késleltetés után kezdődik a következő ciklus. Ez a folyamat örökké megismétlődik.
while (1) // örökké ismételje {wr_adc = 0; // LOW - HIGH impulzus küldése a WR pin késleltetésen (1); wr_adc = 1; míg (intr_adc == 1); // várja meg a konverzió végét rd_adc = 0; // hogy RD = 0 legyen az adatok ADC0804 = P1 értékeinek kiolvasásához; // ADC adatok másolása_megjelenítés (érték) másolása; // függvényhívás az ADC adatok hőmérsékletre konvertálására és 16 * 2 lcd kijelző késleltetésen történő megjelenítésére (1000); // intervallum minden ciklus között rd_adc = 1; // a következő ciklusra készítsen RD = 1 értéket}
A kód alatti részben parancsokat küldünk 16 * 2 lcd kijelzőre. A parancs átmásolódik a 8051 mikrokontroller 0. portjába. Az RS alacsony a parancsíráshoz. Az RW alacsony az írási műveletekhez. Magas vagy alacsony impulzus van érvényben az engedélyező (E) csapon a parancsírási művelet megkezdéséhez.
void cmdwrt (előjel nélküli karakter x) {P0 = x; // küldje el a parancsot a 0-as portra, amelyre 16 * 2 lcd csatlakozik rs = 0; // készítsen RS = 0 értéket az rw = 0 parancsra; // az RW = 0 értéket írási művelethez en = 1; // HIGH - LOW impulzus küldése az Enable (E) csapon a parancsírási művelet késleltetésének elindításához (1); en = 0; }
A kód ezen részében 16 * 2 lcd kijelzőre küldünk adatokat. Az adatokat a 8051 mikrokontroller 0. portjára másoljuk. Az RS magas szintű a parancsíráshoz. Az RW alacsony az írási műveletekhez. Az engedélyezési (E) csapon az alacsony vagy magas impulzus van érvényben az adatírás megkezdéséhez.
void datawrt (aláíratlan karakter y) {P0 = y; // küldje el az adatokat a 0-as portra, amelyre 16 * 2 lcd csatlakozik rs = 1; // készítsen RS = 1 értéket az rw = 0 parancsra; // az RW = 0 értéket írási művelethez en = 1; // HIGH - LOW impulzus küldése az Enable (E) csapon az adatírás művelet késleltetésének elindításához (1); en = 0; }
A kód ezen részében a digitális adatokat hőmérsékletekké alakítjuk, és 16 * 2 lcd kijelzőn jelenítjük meg.
void convert_display (unsigned char érték) {unsigned char x1, x2, x3; cmdwrt (0xc6); // parancs a kurzor 2. sor 6. pozíciójába állításához 16 * 2 lcd x1 = (érték / 10); // ossza el az értéket 10-gyel, és tárolja a hányadost az x1 változóban x1 = x1 + (0x30); // konvertálja az x1 változót ascii-ba 0x30 x2 =% 10 érték hozzáadásával; // osszuk el az értéket 10-tel, és a maradékot tároljuk az x2 változóban x2 = x2 + (0x30); // konvertálja az x2 változót ascii-ba 0x30 x3 = 0xDF hozzáadásával; // a fok ascii értéke (°) szimbólum datawrt (x1); // kijelző hőmérséklet 16 * 2 lcd kijelző datawrt (x2); datawrt (x3); datawrt („C”); }
Ezenkívül ellenőrizze a többi hőmérőt az LM35 segítségével, különböző mikrovezérlőkkel:
- Digitális hőmérő Arduino és LM35 segítségével
- Hőmérsékletmérés LM35 és AVR mikrokontrollerrel
- Szobahőmérséklet mérés Raspberry Pi-vel