- Nødvendige komponenter:
- Kredsløbsdiagram:
- Måling af temperatur med LM35 ved hjælp af 8051:
- 16x2 LCD:
- ADC0804 IC:
- LM35 temperaturføler:
- Kode forklaring:
Nogle gange har folk svært ved at læse temperaturen fra det analoge termometer på grund af udsving. Så her skal vi bygge et simpelt digitalt termometer ved hjælp af 8051 mikrokontroller, hvor LM35-sensoren bruges til måling af temperaturen. Vi har også brugt LM35 til at opbygge digitalt termometer ved hjælp af Arduino, NodeMCU, PIC, Raspberry Pi og andre mikrocontrollere.
Dette projekt fungerer også som en korrekt grænseflade mellem ADC0804 og 8051 og 16 * 2 LCD med 8051 mikrokontroller.
Nødvendige komponenter:
- 8051 udviklingskort
- ADC0804-kort
- 16 * 2 LCD-skærm
- LM35 sensor
- Potentiometer
- Jumper ledninger
Kredsløbsdiagram:
Kredsløbsdiagram for Digital Thermometer Circuit ved hjælp af LM35 er angivet nedenfor:
Måling af temperatur med LM35 ved hjælp af 8051:
8051 mikrocontroller er en 8 bit mikrocontroller, der har 128 byte på chip RAM, 4K byte på chip ROM, to timere, en seriel port og fire 8bit porte. 8052 microcontroller er en udvidelse af microcontroller. Tabellen nedenfor viser sammenligningen af 8051 familiemedlemmer.
Funktion |
8051 |
8052 |
ROM (i byte) |
4K |
8 TUSINDE |
RAM (byte) |
128 |
256 |
Timere |
2 |
3 |
I / O-ben |
32 |
32 |
Serie Port |
1 |
1 |
Afbryd kilder |
6 |
8 |
16x2 LCD:
16 * 2 LCD er et meget brugt display til indlejrede applikationer. Her er den korte forklaring om stifter og brug af 16 * 2 LCD-display. Der er to meget vigtige registre inde i LCD'et. De er dataregister og kommandoregister. Kommandoregister bruges til at sende kommandoer såsom klar visning, markør derhjemme osv., Dataregister bruges til at sende data, der skal vises på 16 * 2 LCD. Nedenstående tabel viser pinbeskrivelsen på 16 * 2 lcd.
Pin |
Symbol |
I / O |
Beskrivelse |
1 |
Vss |
- |
Jord |
2 |
Vdd |
- |
+ 5V strømforsyning |
3 |
Vee |
- |
Strømforsyning til kontrol af kontrast |
4 |
RS |
jeg |
RS = 0 for kommandoregister, RS = 1 for dataregister |
5 |
RW |
jeg |
R / W = 0 for skrivning, R / W = 1 for læsning |
6 |
E |
I / O |
Aktiver |
7 |
D0 |
I / O |
8-bit databus (LSB) |
8 |
D1 |
I / O |
8-bit databus |
9 |
D2 |
I / O |
8-bit databus |
10 |
D3 |
I / O |
8-bit databus |
11 |
D4 |
I / O |
8-bit databus |
12 |
D5 |
I / O |
8-bit databus |
13 |
D6 |
I / O |
8-bit databus |
14 |
D7 |
I / O |
8-bit databus (MSB) |
15 |
EN |
- |
+ 5V til baggrundsbelysning |
16 |
K |
- |
Jord |
Nedenstående tabel viser hyppigt anvendte LCD-kommandokoder.
Kode (hex) |
Beskrivelse |
01 |
Ryd skærmbilledet |
06 |
Forøgelsesmarkør (højre skift) |
0A |
Display slukket, markør til |
0C |
Skærm til, markør slukket |
0F |
Displayet vises, markøren blinker |
80 |
Tving markøren til begyndelsen af en st linje |
C0 |
Tving markøren til begyndelsen af 2. linje |
38 |
2 linjer og 5 * 7 matrix |
ADC0804 IC:
Den ADC0804 IC er en 8-bit parallel ADC i familien af ADC0800 serie fra National Semiconductor. Det fungerer med +5 volt og har en opløsning på 8bits. Trinstørrelsen og Vin-området varierer for forskellige værdier af Vref / 2. Nedenstående tabel viser forholdet mellem Vref / 2 og Vin-området.
Vref / 2 (V) |
Vin (V) |
Trin størrelse (mV) |
åben |
0 til 5 |
19.53 |
2.0 |
0 til 4 |
15,62 |
1.5 |
0 til 3 |
11,71 |
1.28 |
0 til 2,56 |
10 |
I vores tilfælde er Vref / 2 forbundet til 1,28 volt, så trinstørrelsen er 10mV. For ADC0804 beregnes trinstørrelsen som (2 * Vref / 2) / 256.
Følgende formel bruges til at beregne udgangsspænding:
Dout = Vin / trinstørrelse
Hvor Dout er digital dataoutput i decimal, er Vin = analog indgangsspænding og trinstørrelse (opløsning) den mindste ændring. Lær mere om ADC0804 her, se også grænsefladen mellem ADC0808 og 8051.
LM35 temperaturføler:
LM35 er en temperatursensor, hvis udgangsspænding er lineært proportional med Celsius temperatur. LM35 er allerede kalibreret og kræver derfor ingen ekstern kalibrering. Den afgiver 10 mV for hver grad af Celsius temperatur.
LM35-sensor producerer spænding svarende til temperatur. Denne spænding konverteres til digital (0 til 256) af ADC0804, og den tilføres til 8051 mikrokontroller. 8051 mikrokontroller konverterer denne digitale værdi til temperatur i grad Celsius. Derefter omdannes denne temperatur til ascii-form, som er egnet til visning. Disse ascii-værdier tilføres 16 * 2 lcd, som viser temperaturen på skærmen. Denne proces gentages efter det angivne interval.
Nedenfor er installationsbillede til LM35 Digital Thermometer ved hjælp af 8051:
Du kan finde alle de LM35-baserede digitale termometre her.
Kode forklaring:
Det komplette C-program til dette digitale termometer ved hjælp af LM35 findes i slutningen af dette projekt. Koden er opdelt i små meningsfulde bidder og forklaret nedenfor.
Til 16 * 2 LCD-grænseflader med 8051 mikrokontroller skal vi definere ben, hvorpå 16 * 2 LCD er forbundet til 8051 mikrokontroller. RS-stift på 16 * 2 lcd er forbundet til P2.7, RW-stift på 16 * 2 lcd er forbundet til P2.6 og E-stift på 16 * 2 lcd er forbundet til P2.5. Datapinde er forbundet til port 0 på 8051 mikrokontroller.
sbit rs = P2 ^ 7; // Register Vælg (RS) pin på 16 * 2 lcd sbit rw = P2 ^ 6; // Læs / skriv (RW) pin på 16 * 2 lcd sbit en = P2 ^ 5; // Aktivér (E) pin på 16 * 2 lcd
Til ADC0804-grænseflade med 8051- mikrocontroller er vi ligeledes nødt til at definere ben, hvorpå ADC0804 er forbundet til 8051-mikrocontroller. RD-stift på ADC0804 er forbundet til P3.0, WR-stift på ADC0804 er forbundet til P3.1 og INTR-stift på ADC0804 er forbundet til P3.2. Datapinde er forbundet til port 1 på 8051 mikrokontroller.
sbit rd_adc = P3 ^ 0; // Læs (RD) pin af ADC0804 sbit wr_adc = P3 ^ 1; // Skriv (WR) pin af ADC0804 sbit intr_adc = P3 ^ 2; // Interrupt (INTR) pin på ADC0804
Dernæst skal vi definere nogle funktioner, der bruges i programmet. Forsinkelsesfunktion bruges til at oprette specificeret tidsforsinkelse, c mdwrt- funktion bruges til at sende kommandoer til 16 * 2 lcd-skærm, datawrt- funktion bruges til at sende data til 16 * 2 lcd-skærm og convert_display- funktion bruges til at konvertere ADC-data til temperatur og at vise det på 16 * 2 LCD-skærm.
ugyldig forsinkelse (usigneret int); // funktion til oprettelse af forsinkelse ugyldig cmdwrt (usigneret char); // funktion til at sende kommandoer til 16 * 2 LCD display ugyldige datawrt (usigneret char); // funktion til at sende data til 16 * 2 LCD-skærm ugyldigt convert_display (usigneret char); // funktion til konvertering af ADC-værdi til temperatur og visning på 16 * 2 LCD-skærm
I nedenstående del af koden sender vi kommandoer til 16 * 2 lcd. Kommandoer såsom tydeligt display, tilvækst markør, tvinge markøren til begyndelsen af en st linje sendes til 16 * 2 lcd skærmen én efter én efter nogen specificerede tidsforsinkelse.
for (i = 0; i <5; i ++) // send kommandoer til 16 * 2 LCD viser en kommando ad gangen {cmdwrt (cmd); // funktionsopkald for at sende kommandoer til 16 * 2 LCD-displayforsinkelse (1); }
I denne del af koden sender vi data til 16 * 2 lcd. Data, der skal vises på 16 * 2 LCD-display, sendes til visning en efter en efter en bestemt tidsforsinkelse.
for (i = 0; i <12; i ++) // send data til 16 * 2 LCD display et tegn ad gangen {datawrt (data1); // funktionsopkald til at sende data til 16 * 2 LCD-displayforsinkelse (1); } I denne del af koden konverterer vi den analoge spænding produceret af LM35-sensoren til digitale data, og derefter konverteres den til temperatur og vises på 16 * 2 LCD-display. For at ADC0804 skal starte konverteringen, skal vi sende en lav til høj puls på WR-stiften på ADC0804, så vi må vente på slutningen af konverteringen. INTR bliver lav i slutningen af konverteringen. Når INTR bliver lav, laves RD lavt for at kopiere de digitale data til port 0 på 8051 mikrokontroller. Efter en bestemt tidsforsinkelse starter næste cyklus. Denne proces gentages for evigt.
mens (1) // gentages for evigt {wr_adc = 0; // send LAV til HØJ puls på WR-pin forsinkelse (1); wr_adc = 1; mens (intr_adc == 1); // vent på afslutning af konvertering rd_adc = 0; // lav RD = 0 for at læse dataene fra ADC0804-værdi = P1; // kopiere ADC-data convert_display (værdi); // funktionsopkald for at konvertere ADC-data til temperatur og vise dem på 16 * 2 LCD-displayforsinkelse (1000); // interval mellem hver cyklus rd_adc = 1; // lav RD = 1 til næste cyklus}
I nedenstående del af koden sender vi kommandoer til 16 * 2 LCD-skærm. Kommandoen kopieres til port 0 på 8051 mikrokontroller. RS laves lavt til kommandoskrivning. RW er lavt til skrivedrift. Høj til lav puls anvendes på aktiveringstasten (E) for at starte kommandoskrivning.
ugyldigt cmdwrt (usigneret char x) {P0 = x; // send kommandoen til Port 0, hvor 16 * 2 lcd er forbundet rs = 0; // lav RS = 0 for kommando rw = 0; // lav RW = 0 til skriveoperation en = 1; // send en HIGH til LOW-puls på Aktivér (E) -pind for at starte forsinkelse af kommandoskrivning (1); en = 0; }
I denne del af koden sender vi data til 16 * 2 LCD-skærm. Dataene kopieres til port 0 på 8051 mikrokontroller. RS gøres højt til kommandoskrivning. RW er lavt til skrivedrift. Høj til lav puls anvendes på aktiveringstasten (E) for at starte dataskrivning.
ugyldige datawrt (usigneret char y) {P0 = y; // send dataene til Port 0, hvor 16 * 2 lcd er forbundet rs = 1; // lav RS = 1 for kommandoen rw = 0; // lav RW = 0 til skriveoperation en = 1; // send en HØJ til LAV puls på Aktivér (E) -pind for at starte forsinkelse med dataskrivning (1); en = 0; }
I denne del af koden konverterer vi digitale data til temperatur og viser dem på 16 * 2 LCD-skærm.
ugyldigt convert_display (usigneret char værdi) {usigneret char x1, x2, x3; cmdwrt (0xc6); // kommando for at indstille markøren til 6. position på 2. linje på 16 * 2 lcd x1 = (værdi / 10); // divider værdien med 10 og gem kvotienten i variablen x1 x1 = x1 + (0x30); // konvertere variabel x1 til ascii ved at tilføje 0x30 x2 = værdi% 10; // divider værdien med 10 og gem resten i variablen x2 x2 = x2 + (0x30); // konvertere variabel x2 til ascii ved at tilføje 0x30 x3 = 0xDF; // ascii værdi af grad (°) symbol datawrt (x1); // displaytemperatur på 16 * 2 lcd-displaydatawrt (x2); datawrt (x3); datawrt ('C'); }
Kontroller også andre termometre ved hjælp af LM35 med forskellige mikrocontrollere:
- Digitalt termometer ved hjælp af Arduino og LM35
- Temperaturmåling ved hjælp af LM35 og AVR Microcontroller
- Rumtemperaturmåling med Raspberry Pi