- Vaaditut komponentit:
- Piirikaavio:
- Lämpötilan mittaaminen LM35: llä 8051: llä:
- 16x2 LCD:
- ADC0804 IC:
- LM35-lämpötila-anturi:
- Koodin selitys:
Joskus ihmisten on vaikea lukea lämpötilaa analogisesta lämpömittarista vaihtelujen vuoksi. Joten aiomme rakentaa yksinkertaisen digitaalisen lämpömittarin 8051-mikrokontrollerilla, jossa LM35-anturia käytetään lämpötilan mittaamiseen. Olemme käyttäneet LM35: tä myös digitaalisen lämpömittarin rakentamiseen käyttämällä Arduino-, NodeMCU-, PIC-, Raspberry Pi- ja muita mikrokontrollereita.
Tämä projekti toimii myös ADC0804: n ja 8051: n ja 16 * 2 LCD: n ja 8051-mikrokontrollerin oikeana liitäntänä.
Vaaditut komponentit:
- 8051 kehityskortti
- ADC0804-kortti
- 16 * 2 LCD-näyttö
- LM35-anturi
- Potentiometri
- Hyppääjän johdot
Piirikaavio:
LM35: tä käyttävän digitaalisen lämpömittaripiirin kytkentäkaavio on annettu alla:
Lämpötilan mittaaminen LM35: llä 8051: llä:
8051-mikrokontrolleri on 8-bittinen mikrokontrolleri, jolla on 128 tavua sirumuistia, 4K tavua siru-ROM: lla, kaksi ajastinta, yksi sarjaportti ja neljä 8-bittiä porttia. 8052-mikrokontrolleri on mikrokontrollerin jatke. Alla olevassa taulukossa esitetään 8051 perheenjäsenen vertailu.
Ominaisuus |
8051 |
8052 |
ROM (tavuina) |
4K |
8K |
RAM (tavua) |
128 |
256 |
Ajastimet |
2 |
3 |
I / O-nastat |
32 |
32 |
Sarjaportti |
1 |
1 |
Keskeytä lähteet |
6 |
8 |
16x2 LCD:
16 * 2 LCD on laajasti käytetty näyttö sulautettuihin sovelluksiin. Tässä on lyhyt selitys nastoista ja 16 * 2 LCD-näytön toiminnasta. Nestekidenäytössä on kaksi erittäin tärkeää rekisteriä. Ne ovat tietorekisteri ja komentorekisteri. Komentorekisteriä käytetään komentojen, kuten tyhjennä näyttö, kohdistin kotona jne., Lähettämiseen, rekisteriä käytetään tietojen lähettämiseen, jotka on tarkoitus näyttää 16 * 2 LCD-näytöllä. Alla olevassa taulukossa on 16 * 2 lcd: n tapin kuvaus.
Tappi |
Symboli |
I / O |
Kuvaus |
1 |
Vss |
- |
Maa |
2 |
Vdd |
- |
+ 5 V virtalähde |
3 |
Vee |
- |
Virtalähde kontrastin hallitsemiseksi |
4 |
RS |
Minä |
RS = 0 komentorekisterille, RS = 1 tietorekisterille |
5 |
RW |
Minä |
R / W = 0 kirjoitettaessa, R / W = 1 luettuna |
6 |
E |
I / O |
ota käyttöön |
7 |
D0 |
I / O |
8-bittinen tietoväylä (LSB) |
8 |
D1 |
I / O |
8-bittinen tietoväylä |
9 |
D2 |
I / O |
8-bittinen tietoväylä |
10 |
D3 |
I / O |
8-bittinen tietoväylä |
11 |
D4 |
I / O |
8-bittinen tietoväylä |
12 |
D5 |
I / O |
8-bittinen tietoväylä |
13 |
D6 |
I / O |
8-bittinen tietoväylä |
14 |
D7 |
I / O |
8-bittinen tietoväylä (MSB) |
15 |
A |
- |
+ 5 V taustavalolle |
16 |
K |
- |
Maa |
Alla olevassa taulukossa näkyvät usein käytetyt LCD-komentokoodit.
Koodi (hex) |
Kuvaus |
01 |
Tyhjennä näyttö |
06 |
Lisäkohdistin (oikea siirtymä) |
0A |
Näyttö pois päältä, kohdistin päällä |
0C |
Näyttö päällä, kohdistin pois päältä |
0F |
Näyttö päällä, kohdistin vilkkuu |
80 |
Pakottaa kohdistimen alussa 1 st rivin |
C0 |
Pakottaa kohdistimen alussa 2 toinen linja |
38 |
2 riviä ja 5 * 7 matriisi |
ADC0804 IC:
ADC0804 IC on 8-bittinen rinnakkainen ADC perheeseen ADC0800 sarjan National Semiconductor. Se toimii +5 voltilla ja resoluutio on 8 bittiä. Vaiheen koko ja Vin-alue vaihtelevat Vref / 2: n eri arvojen mukaan. Alla olevassa taulukossa esitetään suhde Vref / 2: n ja Vin-alueen välillä.
Vref / 2 (V) |
Vin (V) |
Askelman koko (mV) |
avata |
0 - 5 |
19.53 |
2.0 |
0 - 4 |
15.62 |
1.5 |
0 - 3 |
11.71 |
1.28 |
0 - 2,56 |
10 |
Meidän tapauksessamme Vref / 2 on kytketty 1,28 volttiin, joten askelkoko on 10mV. ADC0804: lle askelkoko lasketaan (2 * Vref / 2) / 256.
Seuraavaa kaavaa käytetään lähtöjännitteen laskemiseen:
Dout = Vin / askelkoko
Kun Dout on digitaalinen datan ulostulo desimaaleina, Vin = analoginen tulojännite ja askelkoko (resoluutio) on pienin muutos. Lisätietoja ADC0804: sta on täällä, tarkista myös ADC0808: n ja 8051: n liitännät.
LM35-lämpötila-anturi:
LM35 on lämpötila-anturi, jonka lähtöjännite on lineaarisesti verrannollinen Celsius-lämpötilaan. LM35 on jo kalibroitu, joten se ei vaadi ulkoista kalibrointia. Se tuottaa 10 mV kutakin celsiusasteen lämpötilaa kohti.
LM35-anturi tuottaa lämpötilaa vastaavan jännitteen. ADC0804 muuntaa tämän jännitteen digitaaliseksi (0-256) ja syötetään 8051 mikro-ohjaimeen. 8051-mikrokontrolleri muuntaa tämän digitaalisen arvon lämpötilaksi celsiusasteina. Sitten tämä lämpötila muunnetaan näyttöön soveltuvaksi ascii-muodoksi. Nämä ascii-arvot syötetään 16 * 2 lcd: hen, joka näyttää lämpötilan näytöllä. Tämä prosessi toistetaan tietyn aikavälin jälkeen.
Alla on LM35-digitaalilämpömittarin asetuskuva 8051: llä:
Täältä löydät kaikki LM35-pohjaiset digitaaliset lämpömittarit.
Koodin selitys:
Tämän LM35: tä käyttävän digitaalisen lämpömittarin täydellinen C-ohjelma on tämän projektin lopussa. Koodi on jaettu pieniksi merkityksellisiksi paloiksi ja selitetty alla.
16 * 2 LCD-liitäntää varten 8051-mikrokontrollerin kanssa on määriteltävä nastat, joihin 16 * 2 lcd on kytketty 8051-mikrokontrolleriin. RS-nasta 16 * 2 lcd on kytketty P2.7, RW nasta 16 * 2 lcd on kytketty P2.6 ja E nasta 16 * 2 lcd on kytketty P2.5. Datanastat on kytketty 8051-mikrokontrollerin porttiin 0.
sbit rs = P2 ^ 7; // Rekisteröi Valitse (RS) -tappi 16 * 2 lcd sbit rw = P2 ^ 6; // Luku- / kirjoitusnasta (RW) 16 * 2 lcd sbit en = P2 ^ 5; // Ota käyttöön 16 * 2 lcd: n (E) tappi
Vastaavasti ADC0804-liitäntää varten 8051- mikrokontrollerin kanssa meidän on määriteltävä nastat, joihin ADC0804 on kytketty 8051-mikrokontrolleriin. ADC0804: n RD-nasta on liitetty P3.0: een, ADC0804: n WR-nasta on kytketty P3.1: een ja ADC0804: n INTR-nasta on kytketty P3.2: een. Datanastat on kytketty 8051-mikrokontrollerin porttiin 1.
sbit rd_adc = P3 ^ 0; // Lue ADC0804-bitin (RD) tappi wr_adc = P3 ^ 1; // Kirjoita (WR) tappi ADC0804-bitistä intr_adc = P3 ^ 2; // ADC0804: n keskeytys (INTR) -tappi
Seuraavaksi meidän on määriteltävä joitakin toimintoja, joita ohjelmassa käytetään. Viive- toimintoa käytetään määritetyn aikaviiveen luomiseen, c mdwrt -toimintoa käytetään komentojen lähettämiseen 16 * 2 lcd -näyttöön, datawrt- toimintoa käytetään tietojen lähettämiseen 16 * 2 lcd-näyttöön ja convert_display- toimintoa käytetään muuntamaan ADC-tiedot lämpötilaksi ja näyttää sen 16 * 2 lcd-näytöllä.
void delay (allekirjoittamaton int); // toiminto viiveen luomiseen void cmdwrt (unsigned char); // toiminto komentojen lähettämiseksi 16 * 2 lcd-näytölle void datawrt (allekirjoittamaton merkki); // toiminto tietojen lähettämiseen 16 * 2 lcd-näyttöön void convert_display (allekirjoittamaton merkki); // toiminto muuntaa ADC-arvo lämpötilaksi ja näyttää sen 16 * 2 lcd-näytöllä
Koodin alapuolella lähetämme komentoja 16 * 2 lcd: lle. Komentoja kuten selkeä näyttö, lisäys kohdistin, pakottaa kohdistimen alussa 1 s rivi lähetetään 16 * 2 LCD-näyttöön yksitellen jonkin tietyn aikaviiveen.
for (i = 0; i <5; i ++) // lähetä komennot 16 * 2 lcd-näyttöön yksi komento kerrallaan {cmdwrt (cmd); // toimintokutsu komentojen lähettämiseksi 16 * 2 lcd-näytön viiveelle (1); }
Tässä koodin osassa lähetämme tietoja 16 * 2 lcd: lle. 16 * 2 lcd -näytöllä näytettävät tiedot lähetetään näyttöön yksitellen tietyn viiveen jälkeen.
for (i = 0; i <12; i ++) // tietojen lähettäminen 16 * 2 lcd: lle näyttää yhden merkin kerrallaan {datawrt (data1); // toimintokutsu datan lähettämiseksi 16 * 2 lcd-näytön viiveeseen (1); } Tässä koodin osassa muunnetaan LM35-anturin tuottama analoginen jännite digitaaliseksi dataksi ja sitten se muunnetaan lämpötilaksi ja näytetään 16 * 2 lcd-näytöllä. Jotta ADC0804 aloittaisi muunnoksen, meidän on lähetettävä matalan tai korkean pulssin ADC0804: n WR-nastalle, sitten meidän on odotettava muunnoksen loppua. INTR muuttuu alhaiseksi muunnoksen lopussa. Kun INTR on matala, RD tehdään matalaksi kopioimaan digitaalinen data 8051-mikrokontrollerin porttiin 0. Määritetyn aikaviiveen jälkeen seuraava jakso alkaa. Tämä prosessi toistuu ikuisesti.
while (1) // toista ikuisesti {wr_adc = 0; // lähetä LOW - HIGH-pulssi WR-nastaviiveellä (1); wr_adc = 1; kun (intr_adc == 1); // odota muunnoksen loppua rd_adc = 0; // tee RD = 0 lukemaan tiedot ADC0804-arvosta = P1; // kopioi ADC-tiedot muuntaa_näyttö (arvo); // toimintokutsu muuntaa ADC-tiedot lämpötilaksi ja näyttää ne 16 * 2 lcd-näytön viiveellä (1000); // väli jokaisen jakson välillä rd_adc = 1; // tee RD = 1 seuraavaa jaksoa varten}
Koodin alapuolella lähetämme komentoja 16 * 2 lcd -näyttöön. Komento kopioidaan 8051-mikrokontrollerin porttiin 0. RS on alhainen komentojen kirjoittamista varten. RW on alhainen kirjoitusoperaatiota varten. Korkeasta matalaan pulssia käytetään aktivointitapissa komentojen kirjoitusoperaation aloittamiseksi.
void cmdwrt (allekirjoittamaton merkki x) {P0 = x; // lähetä komento portille 0, johon on kytketty 16 * 2 lcd rs = 0; // tee RS = 0 komennolle rw = 0; // tee RW = 0 kirjoitusoperaatiolle en = 1; // lähetä HIGH - LOW-pulssi Enable (E) -nastalle komentokirjoituksen viiveen (1) aloittamiseksi; en = 0; }
Tässä koodin osassa lähetämme tietoja 16 * 2 lcd-näyttöön. Tiedot kopioidaan 8051-mikrokontrollerin porttiin 0. RS on asetettu korkealle komentojen kirjoittamista varten. RW on alhainen kirjoitusoperaatiota varten. Korkeasta matalaan pulssia käytetään aktivointitapissa tietojen kirjoittamisen aloittamiseksi.
void datawrt (allekirjoittamaton merkki y) {P0 = y; // lähetä tiedot porttiin 0, johon 16 * 2 lcd on kytketty rs = 1; // tee RS = 1 komennolle rw = 0; // tee RW = 0 kirjoitusoperaatiolle en = 1; // lähetä HIGH - LOW-pulssi Enable (E) -nastalle datakirjoituksen viiveen (1) aloittamiseksi; en = 0; }
Tässä koodin osassa muunnamme digitaalisen datan lämpötilaksi ja näytämme sen 16 * 2 lcd -näytöllä.
void convert_display (unsigned char value) {allekirjoittamaton merkki x1, x2, x3; cmdwrt (0xc6); // komento asettaa kohdistin 2. rivin 6. sijalle 16 * 2 lcd x1 = (arvo / 10); // jaa arvo 10: llä ja tallenna osamäärä muuttujaan x1 x1 = x1 + (0x30); // muuntaa muuttuja x1 ascii: ksi lisäämällä 0x30 x2 = arvo% 10; // jaa arvo 10: llä ja tallenna loppu muuttujaan x2 x2 = x2 + (0x30); // muuntaa muuttuja x2 ascii: ksi lisäämällä 0x30 x3 = 0xDF; // asteen (°) symbolin ascii arvo datawrt (x1); // näytön lämpötila 16 * 2 lcd-näytön datawrt (x2); datawrt (x3); datawrt ('C'); }
Tarkista myös muut LM35-lämpömittarit eri mikrokontrollereilla:
- Digitaalinen lämpömittari, jossa käytetään Arduinoa ja LM35: tä
- Lämpötilan mittaus LM35- ja AVR-mikrokontrollerilla
- Huonelämpötilan mittaus Vadelma Pi: llä