- Nepieciešamās sastāvdaļas:
- Ķēdes shēma:
- Temperatūras mērīšana ar LM35, izmantojot 8051:
- 16x2 LCD:
- ADC0804 IC:
- LM35 temperatūras sensors:
- Koda skaidrojums:
Dažreiz cilvēkiem svārstību dēļ ir grūti nolasīt temperatūru no analogā termometra. Tātad šeit mēs izveidosim vienkāršu digitālo termometru, izmantojot 8051 mikrokontrolleru, kurā temperatūras mērīšanai tiek izmantots LM35 sensors. Mēs esam izmantojuši arī LM35, lai izveidotu digitālo termometru, izmantojot Arduino, NodeMCU, PIC, Raspberry Pi un citus mikrokontrollerus.
Šis projekts kalpos arī kā ADC0804 pareiza saskarne ar 8051 un 16 * 2 LCD ar 8051 mikrokontrolleru.
Nepieciešamās sastāvdaļas:
- 8051 izstrādes dēlis
- ADC0804 dēlis
- 16 * 2 LCD displejs
- LM35 sensors
- Potenciometrs
- Džemperu vadi
Ķēdes shēma:
Circuit diagramma Digitālais termometrs Circuit izmantojot LM35 ir norādīts zemāk:
Temperatūras mērīšana ar LM35, izmantojot 8051:
8051 mikrokontrolleris ir 8 bitu mikrokontrolleris, kuram ir 128 baiti mikroshēmas RAM, 4K baiti mikroshēmas ROM, divi taimeri, viens sērijas ports un četri 8 bitu porti. 8052 mikrokontrolleris ir mikrokontrollera paplašinājums. Zemāk esošajā tabulā parādīts 8051 ģimenes locekļa salīdzinājums.
Funkcija |
8051 |
8052 |
ROM (baitos) |
4K |
8 TŪKSTOŠI |
Operatīvā atmiņa (baiti) |
128. |
256. lpp |
Taimeri |
2 |
3 |
I / O tapas |
32 |
32 |
Seriālā osta |
1 |
1 |
Pārtraukt avotus |
6 |
8 |
16x2 LCD:
16 * 2 LCD ir plaši izmantots displejs iegultām lietojumprogrammām. Šeit ir īss paskaidrojums par 16 * 2 LCD displeja tapām un darbību. LCD iekšpusē ir divi ļoti svarīgi reģistri. Tie ir datu reģistrs un komandu reģistrs. Komandu reģistrs tiek izmantots, lai nosūtītu komandas, piemēram, dzidrs displejs, kursors mājās utt., Datu reģistrs tiek izmantots, lai nosūtītu datus, kas jāparāda uz 16 * 2 LCD. Zemāk esošajā tabulā parādīts tapas apraksts 16 * 2 LCD.
Piespraust |
Simbols |
I / O |
Apraksts |
1 |
Vss |
- |
Zeme |
2 |
Vdd |
- |
+ 5V barošanas avots |
3 |
Vee |
- |
Barošanas avots kontrasta kontrolei |
4 |
RS |
Es |
RS = 0 komandu reģistram, RS = 1 datu reģistram |
5 |
RW |
Es |
R / W = 0 rakstīšanai, R / W = 1 lasīšanai |
6 |
E |
I / O |
Iespējot |
7 |
D0 |
I / O |
8 bitu datu kopne (LSB) |
8 |
D1 |
I / O |
8 bitu datu kopne |
9 |
D2 |
I / O |
8 bitu datu kopne |
10 |
D3 |
I / O |
8 bitu datu kopne |
11 |
D4 |
I / O |
8 bitu datu kopne |
12 |
D5 |
I / O |
8 bitu datu kopne |
13 |
D6 |
I / O |
8 bitu datu kopne |
14 |
D7 |
I / O |
8 bitu datu kopne (MSB) |
15 |
A |
- |
+ 5V apgaismojumam |
16 |
K |
- |
Zeme |
Zemāk esošajā tabulā parādīti bieži izmantotie LCD komandu kodi.
Kods (sešstūris) |
Apraksts |
01 |
Notīrīt displeja ekrānu |
06 |
Palielināšanas kursors (labajā maiņā) |
0A |
Displejs izslēgts, kursors ieslēgts |
0C |
Displejs ieslēgts, kursors izslēgts |
0F |
Displejs ieslēgts, mirgo kursors |
80 |
Force kursoru sākums 1. st līnijas |
C0 |
Force kursoru sākums 2 nd līniju |
38 |
2 līnijas un 5 * 7 matrica |
ADC0804 IC:
ADC0804 IC ir 8-bitu paralēlu ADC ģimenē no ADC0800 sērijas no National Semiconductor. Tas darbojas ar +5 voltiem, un tā izšķirtspēja ir 8 biti. Pakāpiena lielums un Vin diapazons mainās dažādām Vref / 2 vērtībām. Zemāk esošajā tabulā parādīta attiecība starp Vref / 2 un Vin diapazonu.
Vref / 2 (V) |
Vins (V) |
Pakāpiena lielums (mV) |
atvērts |
0 līdz 5 |
19.53 |
2.0 |
0 līdz 4 |
15.62 |
1.5 |
0 līdz 3 |
11.71 |
1.28 |
0 līdz 2,56 |
10 |
Mūsu gadījumā Vref / 2 ir savienots ar 1,28 voltiem, tāpēc pakāpiena izmērs ir 10mV. ADC0804 pakāpienu lielumu aprēķina kā (2 * Vref / 2) / 256.
Lai aprēķinātu izejas spriegumu, tiek izmantota šāda formula:
Dout = Vin / soļa lielums
Ja Dout ir ciparu datu izvade decimāldaļās, Vin = analogā ieejas spriegums un pakāpiena lielums (izšķirtspēja) ir mazākā izmaiņa. Uzziniet vairāk par ADC0804 šeit, pārbaudiet arī ADC0808 saskarni ar 8051.
LM35 temperatūras sensors:
LM35 ir temperatūras sensors, kura izejas spriegums ir lineāri proporcionāls temperatūrai pēc Celsija. LM35 ir jau kalibrēts, tāpēc nav nepieciešama ārēja kalibrēšana. Tas dod 10mV katrai temperatūras pakāpei pēc Celsija.
LM35 sensors rada temperatūrai atbilstošu spriegumu. Šis spriegums tiek pārveidots ciparu formātā (no 0 līdz 256) ar ADC0804 un tiek ievadīts 8051 mikrokontrollerī. 8051 mikrokontrolleris pārveido šo digitālo vērtību temperatūrā pēc Celsija grādiem. Tad šī temperatūra tiek pārvērsta ascii formā, kas ir piemērota attēlošanai. Šīs ascii vērtības tiek ievadītas 16 * 2 lcd, kas ekrānā parāda temperatūru. Šis process tiek atkārtots pēc noteikta intervāla.
Zemāk ir LM35 digitālā termometra iestatīšanas attēls, izmantojot 8051:
Visus uz LM35 balstītos digitālos termometrus varat atrast šeit.
Koda skaidrojums:
Pilna C programma šim digitālajam termometram, izmantojot LM35, ir sniegta šī projekta beigās. Kods ir sadalīts mazos nozīmīgos gabalos un paskaidrots tālāk.
16 * 2 LCD saskarnei ar 8051 mikrokontrolleru mums ir jādefinē tapas, uz kurām 16 * 2 lcd ir savienots ar 8051 mikrokontrolleru. RS tapa 16 * 2 lcd ir savienota ar P2.7, RW tapa 16 * 2 lcd ir savienota ar P2.6 un E tapa 16 * 2 lcd ir savienota ar P2.5. Datu tapas ir savienotas ar 8051 mikrokontrollera 0. pieslēgvietu.
sbit rs = P2 ^ 7; // Register Select (RS) tapa 16 * 2 lcd sbit rw = P2 ^ 6; // Lasīšanas / rakstīšanas (RW) tapa no 16 * 2 lcd sbit lv = P2 ^ 5; // Iespējot (E) tapu ar 16 * 2 lcd
Līdzīgi, lai ADC0804 mijiedarbotos ar 8051 mikrokontrolleru, mums ir jādefinē tapas, uz kurām ADC0804 ir savienots ar 8051 mikrokontrolleru. ADC0804 RD tapa ir savienota ar P3.0, ADC0804 WR tapa ir savienota ar P3.1, un ADC0804 INTR tapa ir savienota ar P3.2. Datu tapas ir savienotas ar 8051 mikrokontrollera 1. pieslēgvietu.
sbit rd_adc = P3 ^ 0; // ADC0804 sbit wr_adc = P3 ^ 1 (RD) tapa; // ADC0804 sbit intr_adc = P3 ^ 2 rakstīšanas (WR) tapa; // ADC0804 pārtraukuma (INTR) tapa
Tālāk mums jānosaka dažas funkcijas, kuras tiek izmantotas programmā. Kavēšanās funkcija tiek izmantota, lai izveidotu noteiktu laika aizkavi, c mdwrt funkcija tiek izmantota, lai nosūtītu komandas uz 16 * 2 LCD displejs, datawrt funkcija tiek izmantota, lai nosūtītu datus uz 16 * 2 LCD displejs un convert_display funkcija tiek izmantota, lai pārvērstu ADC datus temperatūru un lai to parādītu 16 * 2 LCD displejā.
void delay (neparakstīts int); // funkcija, lai izveidotu aizkavēšanos void cmdwrt (neparakstīta char); // funkcija komandu sūtīšanai uz 16 * 2 lcd display void datawrt (neparakstīta char); // funkcija datu sūtīšanai uz 16 * 2 LCD displeja void convert_display (neparakstīta char); // funkcija, lai pārveidotu ADC vērtību temperatūrā un parādītu to 16 * 2 lcd displejā
Zem koda daļas mēs nosūtām komandas uz 16 * 2 lcd. Komandas, piemēram, skaidru displeju, pieauguma kursoru, piespiest kursoru sākums 1. st līnijas tiek nosūtīti 16 * 2 LCD displejs pa vienam, pēc kāda noteikta laika kavēšanās.
for (i = 0; i <5; i ++) // nosūtīt komandas uz 16 * 2 LCD displejiem vienu komandu vienlaikus {cmdwrt (cmd); // funkciju izsaukums, lai nosūtītu komandas uz 16 * 2 LCD displeja aizkavi (1); }
Šajā koda daļā mēs sūtām datus uz 16 * 2 lcd. Dati, kas jāparāda 16 * 2 LCD displejā, tiek nosūtīti pa vienam pēc noteikta laika kavējuma.
for (i = 0; i <12; i ++) // datu sūtīšana uz 16 * 2 lcd displejiem parāda vienu rakstzīmi vienlaikus {datawrt (data1); // funkcijas izsaukums, lai nosūtītu datus uz 16 * 2 LCD displeja aizkavi (1); } Šajā koda daļā mēs pārveidojam LM35 sensora radīto analogo spriegumu uz ciparu datiem, un pēc tam tas tiek pārveidots par temperatūru un parādīts 16 * 2 LCD displejā. Lai ADC0804 sāktu pārveidošanu, mums ir jāsūta zems vai augsts impulss uz ADC0804 WR tapu, tad mums jāgaida konversijas beigas. Reklāmguvuma beigās INTR kļūst mazs. Kad INTR kļūst mazs, RD tiek samazināts, lai kopētu digitālos datus 8051 mikrokontrollera 0. portā. Pēc noteiktā laika aizkaves sākas nākamais cikls. Šis process tiek atkārtots uz visiem laikiem.
while (1) // uz visiem laikiem atkārtot {wr_adc = 0; // nosūtīt LOW to HIGH impulsu uz WR tapas aizturi (1); wr_adc = 1; kamēr (intr_adc == 1); // gaidiet reklāmguvuma beigas rd_adc = 0; // padarīt RD = 0, lai nolasītu datus no ADC0804 vērtības = P1; // kopēt ADC datus convert_display (vērtība); // funkciju izsaukums, lai pārveidotu ADC datus temperatūrā un parādītu tos uz 16 * 2 LCD displeja aizkaves (1000); // intervāls starp katru ciklu rd_adc = 1; // nākamajam ciklam izveidojiet RD = 1}
Zem koda daļas mēs nosūtām komandas uz 16 * 2 LCD displeju. Komanda tiek kopēta 8051 mikrokontrollera 0. portā. RS ir zems komandu rakstīšanai. RW ir zema rakstīšanas operācijai. Iespējas (E) tapā tiek izmantots augsts vai zems impulss, lai sāktu komandas rakstīšanas darbību.
void cmdwrt (neparakstīta char x) {P0 = x; // nosūtiet komandu portam 0, kurā ir pievienots 16 * 2 lcd, rs = 0; // komandai rw = 0 izveidojiet RS = 0; // padarīt RW = 0 rakstīšanas operācijai en = 1; // nosūtīt HIGH to LOW impulsu Enable (E) tapā, lai sāktu komandraksta darbības aizkavi (1); lv = 0; }
Šajā koda daļā mēs sūtām datus uz 16 * 2 LCD displeju. Dati tiek kopēti 8051 mikrokontrollera 0. portā. RS ir paaugstināts komandu rakstīšanai. RW ir zema rakstīšanas operācijai. Iespējas (E) tapā tiek izmantots augsts vai zems impulss, lai sāktu datu rakstīšanas darbību.
void datawrt (neparakstīta char y) {P0 = y; // nosūtiet datus uz 0 portu, kurā ir pievienots 16 * 2 lcd, rs = 1; // komandai rw = 0 izveidojiet RS = 1; // padarīt RW = 0 rakstīšanas operācijai en = 1; // nosūtīt HIGH to LOW impulsu Enable (E) tapā, lai sāktu datu rakstīšanas darbības aizkavi (1); lv = 0; }
Šajā koda daļā mēs pārveidojam digitālos datus temperatūrā un parādām tos uz 16 * 2 lcd displeja.
void convert_display (neparakstīta char vērtība) {neparakstīta char x1, x2, x3; cmdwrt (0xc6); // komanda, lai iestatītu kursoru 2. rindas 6. pozīcijā uz 16 * 2 lcd x1 = (vērtība / 10); // daliet vērtību ar 10 un saglabājiet koeficientu mainīgajā x1 x1 = x1 + (0x30); // konvertēt mainīgo x1 par ascii, pievienojot 0x30 x2 = vērtība% 10; // sadaliet vērtību ar 10 un saglabājiet atlikumu mainīgajā x2 x2 = x2 + (0x30); // pārveidot mainīgo x2 par ascii, pievienojot 0x30 x3 = 0xDF; // pakāpes (°) simbola ascii vērtība datawrt (x1); // displeja temperatūra uz 16 * 2 LCD displeja datawrt (x2); datawrt (x3); datawrt ('C'); }
Pārbaudiet arī citus termometrus, izmantojot LM35 ar dažādiem mikrokontrolleriem:
- Digitālais termometrs, izmantojot Arduino un LM35
- Temperatūras mērīšana, izmantojot LM35 un AVR mikrokontrolleru
- Telpas temperatūras mērīšana ar Aveņu Pi