Sisällysluettelo:

Lämpötilan ja valon tason valvonta LCD -näytöllä NOKIA 5110: 4 vaihetta
Lämpötilan ja valon tason valvonta LCD -näytöllä NOKIA 5110: 4 vaihetta

Video: Lämpötilan ja valon tason valvonta LCD -näytöllä NOKIA 5110: 4 vaihetta

Video: Lämpötilan ja valon tason valvonta LCD -näytöllä NOKIA 5110: 4 vaihetta
Video: High Density 2022 2024, Marraskuu
Anonim
Image
Image

Hei kaikki!

Tässä osassa valmistamme yksinkertaisen elektronisen laitteen lämpötilan ja valon tason seuraamiseen. Näiden parametrien mitat näkyvät LCD -näytössä NOKIA 5110. Laite perustuu mikro -ohjaimeen AVR ATMEGA328P. Valvontalaite on varustettu digitaalisella DS18B20 -lämpömittarilla ja valovastuksella valon tason mittaamiseen.

Vaihe 1: Kuvaus Komponentit

Kuvaus Komponentit
Kuvaus Komponentit
Kuvaus Komponentit
Kuvaus Komponentit

Valvontalaitteen peruskomponentit:

  • Mikro -ohjain AVR «ATMEGA328P»
  • Mustavalkoinen graafinen LCD -näyttö «NOKIA 5110»
  • Ohjelmoitava tarkkuus 1-johtiminen digitaalinen lämpömittari «DS18B20»
  • Valosta riippuvainen vastus
  • Johdot

Mikro -ohjain AVR «ATMEGA328P»

Valvontalaite käyttää seuraavia mikro -ohjaimen oheisominaisuuksia:

  1. 16-bittinen ajastin/laskuri keskeyttää
  2. 8-kanavainen 10-bittinen ADC
  3. Master/slave SPI -sarjaliitäntä

Mustavalkoinen graafinen LCD -näyttö «NOKIA 5110»

Tekniset tiedot:

  1. 48 x 84 pisteen LCD -näyttö
  2. Sarjaväyläliitäntä, jonka suurin nopeus on 4 Mbit/s
  3. Sisäinen ohjain/ohjain «PCD8544»
  4. LED-taustavalo
  5. Käy jännitteellä 2,7-5 volttia
  6. Alhainen virrankulutus; se soveltuu akkusovelluksiin
  7. Lämpötila -25 ° C - +70 ° C
  8. Tukee signaalin CMOS -tuloa

LCD -osoitteen käsittely (osoite):

Nestekidenäytössä (DDRAM) näkyvä muistin osoitejärjestely on matriisi, joka koostuu 6 rivistä (Y-osoite) Y-osoitteesta 0 Y-osoitteeseen 5 ja 84 sarakkeesta (X-osoite) X-osoitteesta 0 X- Osoite 83. Jos käyttäjä haluaa päästä tulosten näyttöpaikkaan LCD-näytössä, hänen on viitattava X-osoitteen ja Y-osoitteen väliseen suhteeseen.

Näytölle lähetettävät tiedot ovat 8 -bittisiä (1 tavu) ja ne järjestetään pystyviivaksi; tässä tapauksessa bitti MSB on pienempi ja bitti LSB ylempi kuten kuvassa.

Ohjelmoitava tarkkuus 1-johtiminen digitaalinen lämpömittari DALLAS «DS18B20»

Ominaisuudet:

  1. Ainutlaatuinen 1-Wire®-liitäntä vaatii vain yhden porttitiedonsiirron
  2. Vähennä komponenttien määrää integroidulla lämpötila -anturilla ja EEPROMilla
  3. Mittaa lämpötilat -55 ° C - +125 ° C (-67 ° F - +257 ° F)
  4. ± 0,5 ° C Tarkkuus -10 ° C - +85 ° C
  5. Ohjelmoitava tarkkuus 9 bitistä 12 bittiin
  6. Ulkoisia komponentteja ei tarvita
  7. Parasiittinen virransäästötila vaatii vain 2 nastaa (DQ ja GND)
  8. Yksinkertaistaa hajautettuja lämpötilan tunnistavia sovelluksia Multidrop-toiminnolla
  9. Jokaisella laitteella on ainutlaatuinen 64-bittinen sarjakoodi, joka on tallennettu sisäiseen ROM-levyyn
  10. Joustavat käyttäjän määrittämät haihtumattomat (NV) hälytysasetukset hälytyshakukomennolla Tunnistaa laitteet, joiden lämpötila on ohjelmoitujen rajojen ulkopuolella

Sovellukset:

  1. Termostaattiset säätimet
  2. Teolliset järjestelmät
  3. Kuluttajatuotteet
  4. Lämpömittarit
  5. Lämpöherkät järjestelmät

Valosta riippuvainen vastus

Valosta riippuvainen vastus (LDR) on anturi, joka muuttaa vastustaan, kun sen pinnalle muuttuu valoa.

Tyypillisesti LDR: llä on yhdestä megaohmista kahteen megaohmia täydellä pimeydellä, kymmenestä kahteenkymmeneen kilohomiin kymmenessä LUX: ssa, kahdesta viiteen kiloohmiin 100 LUX: ssa. Anturin kahden koskettimen välinen vastus pienenee valon voimakkuudella tai anturin kahden koskettimen välinen johtavuus kasvaa.

Käytä jännitteenjakajapiiriä muuntamaan vastuksen muutos jännitteen muutokseksi.

Vaihe 2: Mikro -ohjaimen laiteohjelmistokoodi

#ifndef F_CPU #define F_CPU 16000000UL // kertoo ohjaimen kristallitaajuuden (16 MHz AVR ATMega328P) #endif

// SPI -LIITÄNNÄT MÄÄRITTELEE #define MOSI 3 // MOSI se PORT B, PIN 3 #define MISO 4 // MISO se PORT B, PIN 4 #define SCK 5 // SCK se PORT B, PIN 5 #define SS 2 // SS se on PORT B, PIN 2

// NOLLAA NÄYTTÖ #define RST 0 // NOLLA PORTTI B, PIN 0

// NÄYTTÖTILAN VALINTA - Syöttö, jolla voit valita joko komennon/osoitteen tai datatulon. #define DC 1 // DC se on PORT B, PIN 1

// negatiivisten signastaattisten konstien koodimatriisi uns unsign char neg [4] = {0x30, 0x30, 0x30, 0x30};

// koodaa numerojärjestystä [0..9] staattinen const unsigned char font6x8 [10] [16] = {{0xFC, 0xFE, 0xFE, 0x06, 0x06, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 0 {0x00, 0x00, 0x18, 0x1C, 0xFE, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00}, // 1 { 0x0C, 0x8E, 0xCE, 0xE6, 0xE6, 0xBE, 0x9E, 0x0C, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 2 {0x00, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x8C, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 3 {0x3C, 0x3E, 0x7C, 0x60, 0x60, 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x01, 0x03, 0x01}, // 4 {0x1C, 0x3E, 0x3E, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01x, // 5 0xFE, 0xFE, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 6 {0x04, 0x06, 0x06, 0x86, 0xE6, 0x86, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00}, // 7 {0xCC, 0xFE, 0xFE, 0x36, 0x36, 0xFE, 0xFE, 0xCC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 0x0 3, 0x01}, // 8 {0x3C, 0x7E, 0x7E, 0x66, 0x66, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01} // 9};

// koodaa sanaryhmän "TEMP:" staattinen const unsigned char TEMP_1 [165] = {0x02, 0x06, 0x06, 0xFE, 0xFE, 0xFE, 0x06, 0x06, 0x02, 0x00, 0xFC, 0xFE, 0xFE, 0x26, 0x26, 0x24, 0x00, 0xFC, 0xFE, 0xFE, 0x1C, 0x38, 0x70, 0x38, 0x1C, 0xFE, 0xFE, 0xFC, 0x00, 0xFC, 0xFE, 0xFE, 0x66, 0x66, 0x7E, 0x7E, 0x3 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0C, 0x1E, 0x33, 0x33, 0x1E, 0x0C, 0x0, 0x8 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01,};

// koodaa sanaryhmän "LUX": const unsigned char TEMP_2 [60] = {0xFC, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0xFC, 0xFE, 0xFC, 0x00, 0x04, 0x8E, 0xDE, 0xFC, 0xF8, 0xFC, 0xDE, 0x8E, 0x04, 0x00, 0x8C, 0x8C, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01};

#sisältää

#Sisällytä #Sisällytä

// Portin alustaminen ei sisällä Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); // Aseta MOSI, SCK, SS, RST, DC ulostulona, kaikki muut tulot PORTB | = (1 << RST); // Aseta RST -nasta korkealle PORTB | = (1 << SS); // Aseta SS -nasta korkealle - Näyttö on Poista DDRC = 0xFFu käytöstä; // Aseta kaikki PORTC -nastat lähtöksi. DDRC & = ~ (1 << 0); // Tekee PORTC: n ensimmäisen nastan tuloksi PORTC = 0x00u; // Aseta kaikki PORTC -nastat alhaisiksi, mikä sammuttaa sen. }

// ADC -alustus void ADC_init () {// Ota ADC käyttöön, näytteenottotaajuus = osc_freq/128 aseta esiasetin maksimiarvoon, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // Valitse jänniteohje ADC: lle // Valitse kanava nolla oletuksena käyttämällä ADC Multiplexer Select -rekisteriä (ADC0). }

// Toiminto analogisen digitaalimuunnoksen tuloksen lukemiseksi uint16_t get_LightLevel () {_delay_ms (10); // Odota hetki, kunnes kanava saa valitun ADCSRA | = (1 << ADSC); // Aloita ADC -muunnos asettamalla ADSC -bitti. kirjoita 1 ADSC: lle, kun (ADCSRA & (1 << ADSC)); // odota muunnoksen valmistumista // ADSC muuttuu jälleen 0: ksi siihen asti, suorita silmukka jatkuvasti _delay_ms (10); paluu (ADC); // Palauta 10-bittinen tulos}

// SPI -alustus void SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // Ota SPI käyttöön, aseta päälliköksi, aseta esiasetin Fosc/16: ksi SPI -ohjauksessa rekisteröidy}

// alustetaan 16 -bittinen ajastin1, keskeytys ja muuttuva void TIMER1_init () {// ajastimen asettaminen esiasetuksella = 256 ja CTC -tila TCCR1B | = (1 << WGM12) | (1 << CS12); // alustetaan laskuri TCNT1 = 0; // alustavat vertailuarvot - 1 sek OCR1A = 62500; // salli vertailukeskeytys TIMSK1 | = (1 << OCIE1A); // ota käyttöön maailmanlaajuiset keskeytykset sei (); }

// Näyttö Ota käyttöön void SPI_SS_Enable () {PORTB & = ~ (1 << SS); // Ota SS -pin käyttöön logiikassa 0}

// Näyttö pois käytöstä void SPI_SS_Disable () {PORTB | = (1 << SS); // Poista SS -nasta käytöstä logiikasta 1}

// Toiminto tietojen lähettämiseksi näyttöpuskuriin void SPI_Tranceiver (unsigned char data) {SPDR = data; // Lataa tiedot puskuriin while (! (SPSR & (1 << SPIF))); // Odota, kunnes lähetys on valmis}

// Nollaa näyttö alustuksen alussa void Display_Reset () {PORTB & = ~ (1 << RST); _viive_ms (100); PORTB | = (1 << RST); }

// Komento kirjoitustoiminto void Display_Cmnd (unsigned char data) {PORTB & = ~ (1 << DC); // tee DC -nasta logiikkaan 0 komentooperaatiota varten SPI_Tranceiver (data); // lähettää tietoja rekisteristä PORTB | = (1 << DC); // tee DC -nasta logiikasta korkeaksi datatoiminnalle}

// Näytön alustus tyhjä Display_init () {Display_Reset (); // nollaa näyttö Display_Cmnd (0x21); // komento asetettu lisätilassa Display_Cmnd (0xC0); // aseta jännite lähettämällä C0 tarkoittaa VOP = 5V Display_Cmnd (0x07); // aseta lämpötila kerroin 3 Display_Cmnd (0x13); // aseta jännitebiasijärjestelmän arvo Display_Cmnd (0x20); // komento asetettu perustilassa Display_Cmnd (0x0C); // näytä tulos normaalitilassa}

// Tyhjennä näytön tyhjä Display_Clear () {PORTB | = (1 << DC); // tee DC -nasta logiikasta korkeaksi datatoiminnalle (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); // tee DC -nasta logiikkaan nolla komennolle}

// aseta sarake ja rivi LCD -näytön tuloksen näyttämiseen. tyhjä Display_SetXY (unsigned char x, unsigned char y) {Display_Cmnd (0x80 | x); // sarake (0-83) Display_Cmnd (0x40 | y); // rivi (0-5)}

// Funktio negatiivisen merkin näyttämiseksi tyhjä Display_Neg (unsigned char neg) {Display_SetXY (41, 0); // Aseta näytön osoitteen osoite (int index = 0; index0) {SPDR = 0x30;} // Lataa tiedot näytön puskuriin (näytön negatiivinen merkki) else {SPDR = 0x00;} // Lataa tiedot näytön puskuri (selkeä negatiivinen merkki), kun (! (SPSR & (1 << SPIF))); // Odota, kunnes lähetys on valmis _delay_ms (100); }}

// Toiminto digitaalisen merkin tyhjentämiseksi tyhjä Off_Dig (unsigned char x, unsigned char y) {Display_SetXY (x, y); // Aseta näytön osoitteen osoite (ylärivi) (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Lataa tiedot näytön puskuriin (selkeä yläosa digitaalisesta merkistä) y ++; Display_SetXY (x, y); // Aseta näytön osoitteen osoite (alarivi) (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Lataa tiedot näytön puskuriin (selkeä digitaalisen kyltin alaosa)}

// Digitaalisen merkin tyhjä näyttötoiminto Display_Dig (int dig, unsigned char x, unsigned char y) {Display_SetXY (x, y); // Aseta näytön osoitteen osoite (ylärivi) kohteelle (int index = 0; index) <16; indeksi ++) {if (index == 8) {y ++; Display_SetXY (x, y);} // Aseta näytön osoitteen osoite (alarivi) SPI_Tranceiver (font6x8 [dig] [index]); // Lataa koodijärjestelmä numerotietoja näytön puskuriin _delay_ms (10); }}

// DS18B20 -allekirjoittamattoman merkin alustaminen DS18B20_init () {DDRD | = (1 << 2); // Aseta PORTD: n PD2 -nasta lähtöksi PORTD & = ~ (1 << 2); // Aseta PD2 -nasta pieneksi _delay_us (490); // Alustuksen ajoitus DDRD & = ~ (1 << 2); // Aseta PORTD: n PD2 -nasta tuloksi _delay_us (68); // Ajoitus OK_Flag = (PIND & (1 << 2)); // hanki anturin pulssi _delay_us (422); palauta OK_Flag; // palauta 0-ok-anturi on pistoke, 1-virheanturi irrotetaan}

// Funktio tavun lukemiseen DS18B20: lta unsigned char read_18b20 () {unsigned char i, data = 0; for (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Aseta PORTD: n PD2 -nasta lähtöksi _delay_us (2); // Ajoitus DDRD & = ~ (1 1; // Seuraava bitti jos (PIND & (1 << 2)) data | = 0x80; // laita bitti tavuun _delay_us (62);} palauta data;}

// Toiminto kirjoittaa tavu DS18B20: lle void write_18b20 (unsigned char data) {unsigned char i; for (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Aseta PORTD: n PD2 -nasta lähtöksi _delay_us (2); // Ajoitus if (data & 0x01) DDRD & = ~ (1 << 2); // jos haluamme kirjoittaa 1, vapauta rivi else DDRD | = (1 1; // Seuraava bitti _delay_us (62); // Ajoitus DDRD & = ~ (1 << 2); // Aseta PD2 -nasta PORTD tulona _delay_us (2);}}

// Toiminto näyttää valotaso tyhjä Read_Lux () {uint16_t puskuri; unsigned int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // yksinumeroiset, kaksinumeroiset, kolminkertaiset numerot, neljänneksen numeropuskuri = get_LightLevel (); // lukea analogisen digitaalituloksen muuntamisen valon taso temp_int_0 = puskuri % 10000/1000; // neljänneksen numero temp_int_1 = puskuri % 1000/100; // kolminumeroinen temp_int_2 = puskuri % 100/10; // kaksinumeroinen temp_int_3 = puskuri % 10; // yksinumeroinen if (temp_int_0> 0) // jos tulos on neljänneksen numero {Display_Dig (temp_int_0, 32, 2); // näyttää 1 numeron valotasosta Display_Dig (temp_int_1, 41, 2); // näyttää 2 numeroa valotasoa Display_Dig (temp_int_2, 50, 2); // näyttää 3 numeroa valotasoa Display_Dig (temp_int_3, 59, 2); // näyttää 4-merkkinen valotaso} else {if (temp_int_1> 0) // jos tulos on kolminumeroinen luku {Off_Dig (32, 2); // poista numeron 1 merkki Display_Dig (temp_int_1, 41, 2); // näyttää 1 numeron valotasosta Display_Dig (temp_int_2, 50, 2); // näyttää 2 numeroa valotasoa Display_Dig (temp_int_3, 59, 2); // näytä valon tason 3-numeroinen} else {if (temp_int_2> 0) // jos tulos on kaksinumeroinen luku {Off_Dig (32, 2); // poista 1 merkki numerosta Off_Dig (41, 2); // poista numeron 2 merkki Display_Dig (temp_int_2, 50, 2); // näyttää 1 numeron valotasosta Display_Dig (temp_int_3, 59, 2); // näyttää 2-merkkinen valotaso} else // jos tulos on yksinumeroinen luku {Off_Dig (32, 2); // poista 1 merkki numerosta Off_Dig (41, 2); // poista numeron 2 merkki Off_Dig (50, 2); // poista numeron 3 merkki Display_Dig (temp_int_3, 59, 2); // näytä 1 numero valotasoa}}}}

// Toiminto lämpötilan näyttämiseksi tyhjä Read_Temp () {unsigned int puskuri; unsigned int temp_int_1, temp_int_2, temp_int_3; // yksinumeroiset, kaksinumeroiset, kolminkertaiset numerot, neljänneksen numerot allekirjoittamattomat merkit Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // DS18B20: n alustaminen write_18b20 (0xCC); // Anturikoodin tarkistus write_18b20 (0x44); // Käynnistä lämpötilan muuntaminen _delay_ms (1000); // Anturin pollausviive DS18B20_init (); // DS18B20: n alustaminen write_18b20 (0xCC); // Anturikoodin tarkistus write_18b20 (0xBE); // Komento lukea anturin RAM -muistin sisältö Temp_L = read_18b20 (); // Lue kaksi ensimmäistä tavua Temp_H = read_18b20 (); temp_lippu = 1; // 1-positiivinen lämpötila, 0-negatiivinen lämpötila // Hae negatiivinen lämpötila, jos (Temp_H & (1 << 3)) // Sign Bit Check (jos bitti on asetettu-negatiivinen lämpötila) {sign int temp; temp_lippu = 0; // lippu on asetettu 0 - negatiivinen lämpötila temp = (Temp_H << 8) | Temp_L; lämpötila = -lämpötila; // Muunna lisäkoodi suoraan Temp_L = temp; Lämpötila_H = lämpötila >> 8; } puskuri = ((Temp_H 4); temp_int_1 = puskuri % 1000/100; // kolminumeroinen temp_int_2 = puskuri % 100/10; // kaksinumeroinen temp_int_3 = puskuri % 10; // yksinumeroinen

// Jos lämpötila on negatiivinen, se on tyhjä

if (temp_flag == 0) {Display_Neg (1);} else {Display_Neg (0);} if (temp_int_1> 0) // jos tulos on kolminumeroinen luku {Display_Dig (temp_int_1, 45, 0); // näyttää 1 numeron lämpötilasta Display_Dig (temp_int_2, 54, 0); // näyttää 2 numeroa lämpötilasta Display_Dig (temp_int_3, 63, 0); // näyttää lämpötilan 3 numeroa} else {if (temp_int_2> 0) // jos tulos on kaksinumeroinen luku {Off_Dig (45, 0); // poista numeron 1 merkki Display_Dig (temp_int_2, 54, 0); // näyttää 1 numeron lämpötilasta Display_Dig (temp_int_3, 63, 0); // näyttää 2 numeron lämpötilaa} else // jos tulos on yksinumeroinen luku {Off_Dig (45, 0); // poista 1 merkki numerosta Off_Dig (54, 0); // poista numeron 2 merkki Display_Dig (temp_int_3, 63, 0); // näytä 1 numero lämpötilasta}}}

// Tämä ISR laukaistaan aina, kun aikalaskuri vastaa vertailua (joka sekunti). ISR (TIMER1_COMPA_vect) {// Lukeminen, lämpötilan ja valon tason näyttö Read_Temp (); Read_Lux (); }

// Toiminto sanojen "TEMP" ja "LUX" näyttämiseksi void Display_label () {// Sana "TEMP" Display_SetXY (0, 0); // Aseta näytön osoitteen osoite (ylärivi) kohteelle (int index = 0; index <105; index ++) {if (index == 40) {Display_SetXY (0, 1);} // Aseta sijainnin osoite näytöllä (alimmalla rivillä), jos (indeksi == 80) {Display_SetXY (72, 0);} // Aseta näytössä olevan sijainnin osoite (ylärivi), jos (indeksi == 92) {Display_SetXY (72, 1); } // Aseta näytön osoitteen osoite (alarivi) SPDR = TEMP_1 [hakemisto]; // Lataa koodimatriisin tiedot näytön puskuriin, kun (! (SPSR & (1 << SPIF))); // Odota, kunnes lähetys on valmis _delay_ms (10); } // Sana "LUX" Display_SetXY (0, 2); // Aseta näytössä olevan paikan osoite (ylärivi) kohteelle (int index = 0; index <60; index ++) {if (index == 30) {Display_SetXY (0, 3);} // Aseta sijainnin osoite näytöllä (alarivi) SPDR = TEMP_2 [hakemisto]; // Lataa koodimatriisin tiedot näytön puskuriin, kun (! (SPSR & (1 << SPIF))); // Odota, kunnes lähetys on valmis _delay_ms (10); }}

int main (mitätön)

{Port_Init (); // Portin alustus ADC_init (); // ADC -alustus SPI_Init (); // SPI -alustus SPI_SS_Enable (); // Näyttö käyttöön DS18B20_init (); // DS18B20: n alustus Display_init (); // Näytön alustus Display_Clear (); // Näytä tyhjä Display_label (); // Näytä sanat "TEMP" ja "LUX" TIMER1_init (); // Ajastin1 Alustus. Aloita seuranta. Parametrien hakeminen sekunnin välein. // Ääretön silmukka (1) {}}

Vaihe 3: Laiteohjelmiston vilkkuminen mikro -ohjaimeen

HEX -tiedoston lataaminen mikro -ohjaimen flash -muistiin. Katso video, jossa on yksityiskohtainen kuvaus mikro -ohjaimen flash -muistin polttamisesta: Mikro -ohjaimen flash -muistin polttaminen…

Vaihe 4: Valvontalaitteen piirikokoonpano

Valvontalaitteen piirikokoonpano
Valvontalaitteen piirikokoonpano
Valvontalaitteen piirikokoonpano
Valvontalaitteen piirikokoonpano

Liitä komponentit kaavion mukaisesti.

Kytke virta ja se toimii!

Suositeltava: