- Nødvendige komponenter:
- Kretsdiagram:
- Måling av temperatur med LM35 ved bruk av 8051:
- 16x2 LCD:
- ADC0804 IC:
- LM35 Temperatursensor:
- Kode forklaring:
Noen ganger synes folk det er vanskelig å lese temperaturen fra det analoge termometeret på grunn av svingninger. Så her skal vi bygge et enkelt digitalt termometer med 8051 mikrokontroller der LM35-sensoren brukes til å måle temperaturen. Vi har også brukt LM35 til å bygge digitalt termometer ved hjelp av Arduino, NodeMCU, PIC, Raspberry Pi og andre mikrokontrollere.
Dette prosjektet vil også fungere som et riktig grensesnitt mellom ADC0804 og 8051 og 16 * 2 LCD med 8051 mikrokontroller.
Nødvendige komponenter:
- 8051 utviklingstavle
- ADC0804 brett
- 16 * 2 LCD-skjerm
- LM35 sensor
- Potensiometer
- Jumper ledninger
Kretsdiagram:
Kretsskjema for Digital Termometer Circuit ved bruk av LM35 er gitt nedenfor:
Måling av temperatur med LM35 ved bruk av 8051:
8051 mikrokontroller er en 8-biters mikrokontroller som har 128 byte på RAM-brikke, 4K byte på ROM-brikke, to tidtakere, en seriell port og fire 8-biters porter. 8052 mikrokontroller er en utvidelse av mikrokontroller. Tabellen nedenfor viser sammenligningen av 8051 familiemedlemmer.
Trekk |
8051 |
8052 |
ROM (i byte) |
4K |
8K |
RAM (byte) |
128 |
256 |
Tidtakere |
2 |
3 |
I / O-pinner |
32 |
32 |
Seriell port |
1 |
1 |
Avbryt kilder |
6 |
8 |
16x2 LCD:
16 * 2 LCD er en mye brukt skjerm for innebygde applikasjoner. Her er den korte forklaringen om pinner og bruk av 16 * 2 LCD-skjerm. Det er to veldig viktige registre inne i LCD-skjermen. De er dataregister og kommandoregister. Kommandoregister brukes til å sende kommandoer som klar visning, markør hjemme etc., dataregister brukes til å sende data som skal vises på 16 * 2 LCD. Tabellen nedenfor viser pinbeskrivelsen på 16 * 2 lcd.
Pin |
Symbol |
I / O |
Beskrivelse |
1 |
Vss |
- |
Bakke |
2 |
Vdd |
- |
+ 5V strømforsyning |
3 |
Vee |
- |
Strømforsyning for å kontrollere kontrasten |
4 |
RS |
Jeg |
RS = 0 for kommandoregister, RS = 1 for dataregister |
5 |
RW |
Jeg |
R / W = 0 for skriving, R / W = 1 for lese |
6 |
E |
I / O |
Muliggjøre |
7 |
D0 |
I / O |
8-bits databuss (LSB) |
8 |
D1 |
I / O |
8-bits databuss |
9 |
D2 |
I / O |
8-bits databuss |
10 |
D3 |
I / O |
8-bits databuss |
11 |
D4 |
I / O |
8-bits databuss |
12 |
D5 |
I / O |
8-bits databuss |
1. 3 |
D6 |
I / O |
8-bits databuss |
14 |
D7 |
I / O |
8-bit databuss (MSB) |
15 |
EN |
- |
+ 5V for bakgrunnsbelysning |
16 |
K |
- |
Bakke |
Tabellen nedenfor viser LCD-kommandokoder som ofte brukes.
Kode (sekskant) |
Beskrivelse |
01 |
Tøm skjermbildet |
06 |
Inkrement markør (høyre skift) |
0A |
Display av, markør på |
0C |
Skjerm på, markør av |
0F |
Displayet er på, markøren blinker |
80 |
Tving markøren til begynnelsen av en st linjen |
C0 |
Tving markøren til begynnelsen av 2 nd linjen |
38 |
2 linjer og 5 * 7 matrise |
ADC0804 IC:
Den ADC0804 IC er en 8-bits parallell ADC i familien til den ADC0800 serien fra National Semiconductor. Den fungerer med +5 volt og har en oppløsning på 8bits. Trinnstørrelsen og Vin-området varierer for forskjellige verdier av Vref / 2. Tabellen nedenfor viser forholdet mellom Vref / 2 og Vin-området.
Vref / 2 (V) |
Vin (V) |
Trinnstørrelse (mV) |
åpen |
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 vårt tilfelle er Vref / 2 koblet til 1,28 volt, så trinnstørrelsen er 10mV. For ADC0804 beregnes trinnstørrelsen som (2 * Vref / 2) / 256.
Følgende formel brukes til å beregne utgangsspenningen:
Dout = Vin / trinnstørrelse
Der Dout er digital datautgang i desimal, er Vin = analog inngangsspenning og trinnstørrelse (oppløsning) den minste endringen. Lær mer om ADC0804 her, sjekk også grensesnittet mellom ADC0808 og 8051.
LM35 Temperatursensor:
LM35 er en temperatursensor hvis utgangsspenning er lineær proporsjonal med Celsius temperatur. LM35 er allerede kalibrert og krever ingen ekstern kalibrering. Den gir 10 mV for hver grad av Celsius temperatur.
LM35-sensoren produserer spenning som tilsvarer temperaturen. Denne spenningen blir konvertert til digital (0 til 256) av ADC0804 og den mates til 8051 mikrokontroller. 8051 mikrokontroller konverterer denne digitale verdien til temperatur i grad Celsius. Deretter blir denne temperaturen omgjort til ascii-form som er egnet for visning. Disse ascii-verdiene mates til 16 * 2 lcd som viser temperaturen på skjermen. Denne prosessen gjentas etter angitt intervall.
Nedenfor er oppsettbildet for LM35 Digital Thermometer ved bruk av 8051:
Du finner alle de LM35-baserte digitale termometrene her.
Kode forklaring:
Det komplette C-programmet for dette digitale termometeret ved hjelp av LM35 er gitt på slutten av dette prosjektet. Koden er delt inn i små meningsfulle biter og forklart nedenfor.
For 16 * 2 LCD-grensesnitt med 8051 mikrokontroller, må vi definere pinner som 16 * 2 LCD er koblet til 8051 mikrokontroller. RS-pinne på 16 * 2 lcd er koblet til P2.7, RW-pinne på 16 * 2 lcd er koblet til P2.6 og E-pinne på 16 * 2 lcd er koblet til P2.5. Datapinner er koblet til port 0 på 8051 mikrokontroller.
sbit rs = P2 ^ 7; // Register Velg (RS) pin på 16 * 2 lcd sbit rw = P2 ^ 6; // Les / skriv (RW) pin på 16 * 2 lcd sbit en = P2 ^ 5; // Aktiver (E) -pinne på 16 * 2 lcd
På samme måte, for ADC0804-grensesnitt med 8051 mikrokontroller, må vi definere pinner som ADC0804 er koblet til 8051 mikrokontroller. RD-pinne på ADC0804 er koblet til P3.0, WR-pinne på ADC0804 er koblet til P3.1 og INTR-pinne på ADC0804 er koblet til P3.2. Datapinner er koblet til port 1 på 8051 mikrokontroller.
sbit rd_adc = P3 ^ 0; // Les (RD) pin av ADC0804 sbit wr_adc = P3 ^ 1; // Skriv (WR) -pinne av ADC0804 sbit intr_adc = P3 ^ 2; // Interrupt (INTR) pin av ADC0804
Deretter må vi definere noen funksjoner som brukes i programmet. Forsinkelsesfunksjon brukes til å lage spesifisert tidsforsinkelse, c mdwrt- funksjon brukes til å sende kommandoer til 16 * 2 lcd-skjerm, datawrt- funksjon brukes til å sende data til 16 * 2 lcd-skjerm og convert_display- funksjonen brukes til å konvertere ADC-data til temperatur og å vise den på 16 * 2 LCD-skjerm.
ugyldig forsinkelse (usignert int); // funksjon for å lage forsinkelse ugyldig cmdwrt (usignert røye); // funksjon for sending av kommandoer til 16 * 2 lcd display void datawrt (usignert char); // funksjon for sending av data til 16 * 2 LCD-skjerm ugyldig convert_display (usignert tegn); // funksjon for å konvertere ADC-verdi til temperatur og vise den på 16 * 2 LCD-skjerm
Under en del av koden sender vi kommandoer til 16 * 2 lcd. Kommandoer slik som klart display, inkrement markør, få markøren til begynnelsen av en st linje blir sendt til 16 * 2 LCD-display ett for ett etter en spesifisert tidsforsinkelse.
for (i = 0; i <5; i ++) // send kommandoer til 16 * 2 lcd viser en kommando om gangen {cmdwrt (cmd); // funksjonsanrop for å sende kommandoer til 16 * 2 LCD skjermforsinkelse (1); }
I denne delen av koden sender vi data til 16 * 2 lcd. Data som skal vises på 16 * 2 LCD-skjerm blir sendt til visning en etter en etter en spesifisert tidsforsinkelse.
for (i = 0; i <12; i ++) // send data til 16 * 2 lcd viser ett tegn om gangen {datawrt (data1); // funksjonsanrop for å sende data til 16 * 2 LCD skjermforsinkelse (1); } I denne delen av koden konverterer vi den analoge spenningen produsert av LM35-sensoren til digitale data, og deretter konverteres den til temperatur og vises på 16 * 2 LCD-skjerm. For at ADC0804 skal starte konverteringen, må vi sende en lav til høy puls på WR-pinnen til ADC0804, så må vi vente på slutten av konverteringen. INTR blir lav på slutten av konverteringen. Når INTR blir lav, blir RD gjort lav for å kopiere de digitale dataene til port 0 på 8051 mikrokontroller. Etter en spesifisert tidsforsinkelse starter neste syklus. Denne prosessen gjentas for alltid.
mens (1) // gjenta for alltid {wr_adc = 0; // send LAV til HØY puls på WR-pin forsinkelse (1); wr_adc = 1; mens (intr_adc == 1); // vent på slutten av konvertering rd_adc = 0; // lage RD = 0 for å lese dataene fra ADC0804-verdien = P1; // kopiere ADC-data convert_display (verdi); // funksjonsanrop for å konvertere ADC-data til temperatur og vise dem på 16 * 2 LCD skjermforsinkelse (1000); // intervall mellom hver syklus rd_adc = 1; // lag RD = 1 for neste syklus}
Under en del av koden sender vi kommandoer til 16 * 2 LCD-skjerm. Kommandoen kopieres til port 0 på 8051 mikrokontroller. RS er lavt for kommandoskriving. RW er lavt for skrivedrift. Høy til lav puls brukes på aktiveringstasten (E) for å starte kommandoskrivoperasjonen.
ugyldig cmdwrt (usignert tegn x) {P0 = x; // send kommandoen til Port 0 som 16 * 2 lcd er koblet til rs = 0; // lage RS = 0 for kommando rw = 0; // lage RW = 0 for skriveoperasjon en = 1; // send en HØY til LAV puls på Aktiver (E) -pinne for å starte forsinkelse av kommandoskriveroperasjon (1); en = 0; }
I denne delen av koden sender vi data til 16 * 2 LCD-skjerm. Dataene kopieres til port 0 på 8051 mikrokontroller. RS er gjort høyt for kommandoskriving. RW er lavt for skrivedrift. Høy til lav puls påføres på aktiveringsstift (E) for å starte dataskriving.
ugyldig datawrt (usignert char y) {P0 = y; // send dataene til Port 0 som 16 * 2 lcd er koblet til rs = 1; // lage RS = 1 for kommando rw = 0; // lage RW = 0 for skriveoperasjon en = 1; // send en HØY til LAV puls på Aktiver (E) -pinne for å starte forsinkelse for dataskriving (1); en = 0; }
I denne delen av koden konverterer vi digitale data til temperatur og viser dem på 16 * 2 LCD-skjerm.
ugyldig convert_display (usignert char verdi) {usignert char x1, x2, x3; cmdwrt (0xc6); // kommando for å sette markøren til 6. posisjon på 2. linje på 16 * 2 lcd x1 = (verdi / 10); // del verdien med 10 og lagre kvotienten i variabelen x1 x1 = x1 + (0x30); // konvertere variabel x1 til ascii ved å legge til 0x30 x2 = verdi% 10; // del verdien med 10 og lagre resten i variabelen x2 x2 = x2 + (0x30); // konverter variabel x2 til ascii ved å legge til 0x30 x3 = 0xDF; // ascii verdi av grad (°) symbol datawrt (x1); // skjermtemperatur på 16 * 2 lcd-skjermdatawrt (x2); datawrt (x3); datawrt ('C'); }
Sjekk også andre termometre ved bruk av LM35 med forskjellige mikrokontroller:
- Digitalt termometer ved bruk av Arduino og LM35
- Temperaturmåling ved bruk av LM35 og AVR Microcontroller
- Måling av romtemperatur med Raspberry Pi