Sadržaj:

Monitor temperature i razine svjetlosti s prikazom na LCD -u NOKIA 5110: 4 koraka
Monitor temperature i razine svjetlosti s prikazom na LCD -u NOKIA 5110: 4 koraka

Video: Monitor temperature i razine svjetlosti s prikazom na LCD -u NOKIA 5110: 4 koraka

Video: Monitor temperature i razine svjetlosti s prikazom na LCD -u NOKIA 5110: 4 koraka
Video: 🚀 AMAZON 2.0 - ИНТЕРНЕТ МАГАЗИН с нуля за 6 часов [Next / React / Nest / PostgreSQL / Prisma / TS] 2024, Studeni
Anonim
Image
Image

Pozdrav svima!

U ovom odjeljku izrađujemo jednostavne elektroničke uređaje za praćenje temperature i razine svjetlosti. Mjerenja ovih parametara prikazana su na LCD -u NOKIA 5110. Uređaj se temelji na mikrokontroleru AVR ATMEGA328P. Uređaj za nadzor opremljen je digitalnim termometrom DS18B20 i fotootpornikom za mjerenje razine svjetlosti.

Korak 1: Opis komponenti

Opis Komponente
Opis Komponente
Opis Komponente
Opis Komponente

Osnovne komponente nadzornog uređaja:

  • Mikrokontroler AVR «ATMEGA328P»
  • Jednobojni grafički LCD «NOKIA 5110»
  • Programabilni rezolucija 1-žični digitalni termometar «DS18B20»
  • Otpornik ovisan o svjetlu
  • Žice

Mikrokontroler AVR «ATMEGA328P»

Uređaj za nadzor koristi sljedeće periferne značajke mikrokontrolera:

  1. 16-bitni mjerač vremena/brojač
  2. 8-kanalni 10-bitni ADC
  3. Master/slave SPI serijsko sučelje

Jednobojni grafički LCD «NOKIA 5110»

Tehnički podaci:

  1. 48 x 84 točkasti LCD zaslon
  2. Sučelje serijske sabirnice s maksimalnom velikom brzinom od 4 Mbita/S
  3. Unutarnji kontroler/upravljački program «PCD8544»
  4. LED pozadinsko svjetlo
  5. Radi pri naponu 2,7-5 volti
  6. Mala potrošnja energije; pogodan je za primjenu na baterijama
  7. Raspon temperature od -25˚C do +70˚C
  8. CMOS ulaz signala podrške

Rukovanje LCD adresom (adresiranje):

Raspored adresa memorije koji je prikazan na LCD zaslonu (DDRAM) je matrica koja se sastoji od 6 redaka (Y adresa) od Y-adrese 0 do Y-adrese 5 i 84 stupca (X adresa) od X-adrese 0 do X- Adresa 83. Ako korisnik želi pristupiti položaju prikaza rezultata na LCD zaslonu, mora se pozvati na odnos između X-adrese i Y-adrese.

Podaci koji će biti poslani na prikaz su 8 bita (1 bajt) i bit će raspoređeni kao okomita linija; u tom će slučaju Bit MSB biti niži, a Bit LSB gornji kao što je prikazano na slici.

Programabilni rezolucija 1-žični digitalni termometar DALLAS «DS18B20»

Značajke:

  1. Jedinstveno 1-Wire® sučelje zahtijeva samo jedan priključak za komunikaciju
  2. Smanjite broj komponenti s integriranim senzorom temperature i EEPROM -om
  3. Mjeri temperature od -55 ° C do +125 ° C (-67 ° F do +257 ° F)
  4. ± 0,5 ° C Točnost od -10 ° C do +85 ° C
  5. Programabilna rezolucija od 9 bita do 12 bita
  6. Nisu potrebne vanjske komponente
  7. Način rada parazita zahtijeva samo 2 pina za rad (DQ i GND)
  8. Pojednostavljuje distribuirane aplikacije za mjerenje temperature s mogućnošću višestrukih kapi
  9. Svaki uređaj ima jedinstveni 64-bitni serijski kod pohranjen u ugrađenom ROM-u
  10. Fleksibilne korisnički definirane nehlapljive (NV) postavke alarma s naredbom za pretraživanje alarma identificiraju uređaje s temperaturama izvan programiranih granica

Prijave:

  1. Termostatske kontrole
  2. Industrijski sustavi
  3. Potrošački proizvodi
  4. Termometri
  5. Toplinski osjetljivi sustavi

Otpornik ovisan o svjetlu

Otpornik ovisan o svjetlu (LDR) je pretvarač koji mijenja svoj otpor pri promjeni svjetlosti na njegovu površinu.

Obično će LDR imati od jednog megaOhma do dva megaOhma pri potpunoj tami, od deset do dvadeset kiloOhma pri deset LUX -a, od dva do pet kilooma pri 100 LUX -a. Otpor između dva kontakta senzora opada s intenzitetom svjetlosti ili se povećava vodljivost između dva kontakta senzora.

Pomoću kruga razdjelnika napona pretvorite promjenu otpora u promjenu napona.

Korak 2: Kôd firmvera mikrokontrolera

#ifndef F_CPU #define F_CPU 16000000UL // govori frekvencija kristala kontrolera (16 MHz AVR ATMega328P) #endif

// SPI INTERFACE DEFINES #define MOSI 3 // MOSI to je PORT B, PIN 3 #define MISO 4 // MISO to je PORT B, PIN 4 #define SCK 5 // SCK to je PORT B, PIN 5 #define SS 2 // SS je PORT B, PIN 2

// PONOVNO POSTAVLJAJTE ZASLON #define RST 0 // RESETUJEM PORT B, PIN 0

// SELECT MODE DISPLAY MODE - Ulaz za odabir naredbe/adrese ili unosa podataka. #define DC 1 // DC to je PORT B, PIN 1

// kodira niz negativnih predznakastatic const unsigned char neg [4] = {0x30, 0x30, 0x30, 0x30};

// kodira niz znamenki [0..9] static 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, 0x26, 0x76E 0x, 0x8C, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 3 {0x3C, 0x3E, 0x7C, 0x60, 0x60, 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01}, // 4 {0x1C, 0x3E, 0x3E, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 5 {0xFC, 0xFE, 0xFE, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 6 {0x04, 0x06, 0x06, 0x86, 0xE6, 0xEE, 0xEx, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00}, // 7 {0xCC, 0xFE, 0xFE, 0x36, 0x36, 0xFE, 0xFE, 0xCC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02 0x0 3, 0x01}, // 8 {0x3C, 0x7E, 0x7E, 0x66, 0x66, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01} // 9};

// kodira niz riječi "TEMP:" static 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, 0x7C, 0x3, 0x7, 0x7C, 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, 0x00, 0x00, 0x00, 0x00, 0x000 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0C, 0x1E, 0x33, 0x33, 0x1E, 0x0C, 0x00, 0xF0, 0x0C, 0x00, 0xF8, 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01,};

// kodira niz riječi "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, 0x01, 0x03, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 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};

#uključi

#include #include

// Inicijalizacija portavoid Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); // Postavi MOSI, SCK, SS, RST, DC kao izlaz, svi ostali ulazi PORTB | = (1 << RST); // Postavi RST pin kao visok PORTB | = (1 << SS); // Postavi SS pin kao visok - Zaslon je Onemogući DDRC = 0xFFu; // Postavite sve pinove PORTC -a kao izlaz. DDRC & = ~ (1 << 0); // Pravi prvi pin PORTC -a kao ulaz PORTC = 0x00u; // Sve pinove PORTC -a postavite na nisko što ga isključuje. }

// ADC Initialization void ADC_init () {// Omogući ADC, uzorkovanje freq = osc_freq/128 postavi pretkaler na maksimalnu vrijednost, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // Odabir referentne vrijednosti napona za ADC // Odabir nule kanala prema zadanim postavkama pomoću registra za odabir ADC multipleksera (ADC0). }

// Funkcija čitanja rezultata analogno -digitalnog pretvaranja uint16_t get_LightLevel () {_delay_ms (10); // Pričekajte neko vrijeme da kanal odabere ADCSRA | = (1 << ADSC); // Pokretanje ADC konverzije postavljanjem ADSC bita. upišite 1 u ADSC dok (ADCSRA & (1 << ADSC)); // čekamo da se konverzija dovrši // ADSC do tada ponovno postaje 0, neprekidno izvršava petlju _delay_ms (10); povrat (ADC); // Vraćanje 10-bitnog rezultata}

// SPI Initialization void SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // Omogući SPI, Postavi kao master, Postavite predskaler kao Fosc/16 u SPI kontroli Registar }

// inicijalizirati 16 -bitni Timer1, prekid i varijablu void TIMER1_init () {// postaviti mjerač vremena s predkalerom = 256 i CTC načinom TCCR1B | = (1 << WGM12) | (1 << CS12); // inicijaliziranje brojača TCNT1 = 0; // inicijalizira vrijednost uspoređivanja - 1 sekunda OCR1A = 62500; // omogući usporedi prekid TIMSK1 | = (1 << OCIE1A); // omogući globalne prekide sei (); }

// Display Enable void SPI_SS_Enable () {PORTB & = ~ (1 << SS); // Omogući SS pin za logiku 0}

// Prikaz Disable void SPI_SS_Disable () {PORTB | = (1 << SS); // Onemogući SS pin na logiku 1}

// Funkcija slanja podataka u međuspremnik za prikazivanje voi SPI_Tranceiver (nepotpisani podaci o charu) {SPDR = podaci; // Učitavanje podataka u međuspremnik while (! (SPSR & (1 << SPIF))); // Pričekajte dok se prijenos ne dovrši}

// Vraćanje zaslona na početak inicijalizacije void Display_Reset () {PORTB & = ~ (1 << RST); _kašnjenje_ms (100); PORTB | = (1 << RST); }

// Zapis naredbe void Display_Cmnd (nepotpisani char podaci) {PORTB & = ~ (1 << DC); // izvođenje istosmjernog pina na logiku 0 za naredbenu operaciju SPI_Tranceiver (podaci); // šalje podatke u registar podataka PORTB | = (1 << DC); // učinite istosmjerni pin na logiku visokim za rad s podacima}

// Inicijalizacija Display void Display_init () {Display_Reset (); // resetiranje prikaza Display_Cmnd (0x21); // naredba postavljena u načinu dodavanja Display_Cmnd (0xC0); // postavljanje napona slanjem C0 znači VOP = 5V Display_Cmnd (0x07); // postavljanje temp. koeficijent do 3 Display_Cmnd (0x13); // postavljena vrijednost Voltage Bias System Display_Cmnd (0x20); // naredba postavljena u osnovnom načinu Display_Cmnd (0x0C); // prikaz rezultata u normalnom načinu rada}

// Brisanje praznine na zaslonu Display_Clear () {PORTB | = (1 << DC); // učinimo istosmjerni pin na logiku visokim za rad podataka za (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); // učinimo istosmjerni pin logičkim nula za naredbeni rad}

// postavljamo stupac i redak na položaj prikaza rezultata na LCD zaslonu void Display_SetXY (bezznačni znak x, nepotpisani znak y) {Display_Cmnd (0x80 | x); // stupac (0-83) Display_Cmnd (0x40 | y); // redak (0-5)}

// Funkcija prikaza negativnog predznaka void Display_Neg (nepotpisani char neg) {Display_SetXY (41, 0); // Postavljanje adrese položaja na zaslonu za (int index = 0; index0) {SPDR = 0x30;} // Učitavanje podataka u međuspremnik prikaza (negativni znak prikaza) else {SPDR = 0x00;} // Učitavanje podataka u tampon prikaza (jasan negativni predznak) while (! (SPSR & (1 << SPIF))); // Pričekajte dok se prijenos ne završi _delay_ms (100); }}

// Funkcija brisanja digitalnog znaka void Off_Dig (nepotpisani znak x, nepotpisani znak y) {Display_SetXY (x, y); // Postavi adresu pozicije na zaslonu (gornji red) za (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Učitaj podatke u međuspremnik zaslona (očisti gornji dio digitalnog znaka) y ++; Display_SetXY (x, y); // Postavi adresu pozicije na ekranu (donji red) za (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Učitaj podatke u međuspremnik zaslona (čisti donji dio digitalnog znaka)}

// Funkcija za prikaz digitalnog znaka void Display_Dig (int dig, unsigned char x, unsigned char y) {Display_SetXY (x, y); // Postavljanje adrese položaja na zaslonu (gornji red) za (int index = 0; index <16; index ++) {if (index == 8) {y ++; Display_SetXY (x, y);} // Postavi adresu položaja na zaslonu (donji redak) SPI_Tranceiver (font6x8 [dig] [index]); // Učitaj niz kodova podataka s znamenkama u međuspremnik prikaza _delay_ms (10); }}

// Inicijalizacija DS18B20 nepotpisanog znaka DS18B20_init () {DDRD | = (1 << 2); // Postavimo PD2 pin PORTD -a kao izlazni PORTD & = ~ (1 << 2); // Postavi PD2 pin kao niski _delay_us (490); // Vrijeme inicijalizacije DDRD & = ~ (1 << 2); // Postavimo PD2 pin PORTD -a kao ulaz _delay_us (68); // Vrijeme OK_Flag = (PIND & (1 << 2)); // dobivanje impulsa senzora _delay_us (422); return OK_Flag; // senzor povratka 0-ok je uključen, senzor s 1 pogreškom je isključen}

// Funkcija čitanja bajta iz DS18B20 unsigned char read_18b20 () {unsigned char i, data = 0; za (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Postavite PD2 pin PORTD -a kao izlaz _delay_us (2); // Vrijeme DDRD & = ~ (1 1; // Sljedeći bit ako (PIND & (1 << 2)) podaci | = 0x80; // stavi bit u bajt _delay_us (62);} vrati podatke;}

// Funkcija za upis bajta u DS18B20 void write_18b20 (podaci bez znakova bez znaka) {unsigned char i; za (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Postavite PD2 pin PORTD -a kao izlaz _delay_us (2); // Mjerenje vremena if (podaci & 0x01) DDRD & = ~ (1 << 2); // ako želimo napisati 1, otpustite redak else DDRD | = (1 1; // Sljedeći bit _delay_us (62); // Mjerenje vremena DDRD & = ~ (1 << 2); // Postavite PD2 pin na PORTD kao input _delay_us (2);}}

// Funkcija za prikaz razine svjetlosti void Read_Lux () {uint16_t tampon; nepotpisani int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // jednoznamenkaste, dvoznamenkaste, troznamenkaste, međuspremnik za četvrtine = get_LightLevel (); // očitavanje rezultata analogno -digitalnog pretvaranja razine svjetlosti temp_int_0 = tampon % 10000 /1000; // četveroznamenkasti temp_int_1 = međuspremnik % 1000 /100; // troznamenkasta temp_int_2 = međuspremnik % 100 /10; // dvoznamenkasti temp_int_3 = međuspremnik % 10; // jednoznamenkasti if (temp_int_0> 0) // ako je rezultat četveroznamenkasti broj {Display_Dig (temp_int_0, 32, 2); // prikazuje 1 znamenku razine svjetlosti Display_Dig (temp_int_1, 41, 2); // prikazuje 2 znamenke razine svjetlosti Display_Dig (temp_int_2, 50, 2); // prikazuje 3 znamenke razine svjetlosti Display_Dig (temp_int_3, 59, 2); // prikazuje 4 znamenke razine svjetlosti} else {if (temp_int_1> 0) // ako je rezultat troznamenkasti broj {Off_Dig (32, 2); // briše 1 znak broja Display_Dig (temp_int_1, 41, 2); // prikazuje 1 znamenku razine svjetlosti Display_Dig (temp_int_2, 50, 2); // prikazuje 2 znamenke razine svjetlosti Display_Dig (temp_int_3, 59, 2); // prikazuje 3 znamenke razine svjetlosti} else {if (temp_int_2> 0) // ako je rezultat dvoznamenkasti broj {Off_Dig (32, 2); // briše 1 znak broja Off_Dig (41, 2); // brisanje 2 znaka broja Display_Dig (temp_int_2, 50, 2); // prikazuje 1 znamenku razine svjetlosti Display_Dig (temp_int_3, 59, 2); // prikazuje 2 znamenke razine svjetlosti} else // ako je rezultat jednoznamenkasti broj {Off_Dig (32, 2); // briše 1 znak broja Off_Dig (41, 2); // briše 2 znak broja Off_Dig (50, 2); // brisanje 3 znaka broja Display_Dig (temp_int_3, 59, 2); // prikazuje 1 znamenku razine svjetlosti}}}}

// Funkcija za prikaz temperature void Read_Temp () {unsigned int međuspremnik; nepotpisani int temp_int_1, temp_int_2, temp_int_3; // jednoznamenkaste, dvoznamenkaste, troznamenkaste, četvrtine znamenke bez znakova Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // Inicijalizacija DS18B20 write_18b20 (0xCC); // Provjera koda senzora write_18b20 (0x44); // Pretvorba početne temperature _delay_ms (1000); // Kašnjenje ispitivanja senzora DS18B20_init (); // Inicijalizacija DS18B20 write_18b20 (0xCC); // Provjera senzorskog koda write_18b20 (0xBE); // Naredba za čitanje sadržaja RAM -a senzora Temp_L = read_18b20 (); // Čitanje prva dva bajta Temp_H = read_18b20 (); temp_flag = 1; // 1-pozitivna temperatura, 0-negativna temperatura // Dobijte negativnu temperaturu ako (Temp_H & (1 << 3)) // Prijavite provjeru bita (ako je bit postavljen-negativna temperatura) {potpisana int temp; temp_flag = 0; // zastava je postavljena 0 - negativna temperatura temp = (Temp_H << 8) | Temp_L; temp = -temp; // Pretvorimo dodatni kod u izravan Temp_L = temp; Temp_H = temp >> 8; } međuspremnik = ((Temp_H 4); temp_int_1 = međuspremnik % 1000 /100; // troznamenkasti temp_int_2 = međuspremnik % 100 /10; // dvoznamenkasti temp_int_3 = međuspremnik % 10; // jednoznamenkasti

// Ako je temperatura negativna, pokažite znak temperature, inače je jasno

if (temp_flag == 0) {Display_Neg (1);} else {Display_Neg (0);} if (temp_int_1> 0) // ako je rezultat troznamenkasti broj {Display_Dig (temp_int_1, 45, 0); // prikazuje 1 znamenku temperature Display_Dig (temp_int_2, 54, 0); // prikazuje 2 znamenke temperature Display_Dig (temp_int_3, 63, 0); // prikazuje 3 znamenke temperature} else {if (temp_int_2> 0) // ako je rezultat dvoznamenkasti broj {Off_Dig (45, 0); // briše 1 znak broja Display_Dig (temp_int_2, 54, 0); // prikazuje 1 znamenku temperature Display_Dig (temp_int_3, 63, 0); // prikazuje 2 znamenke temperature} else // ako je rezultat jednoznamenkasti broj {Off_Dig (45, 0); // briše 1 znak broja Off_Dig (54, 0); // brisanje 2 znaka broja Display_Dig (temp_int_3, 63, 0); // prikazuje 1 znamenku temperature}}}

// Ovaj ISR se aktivira kad god se dogodi podudaranje brojača vremena s vrijednošću usporedbe (svake 1 sekunde) ISR (TIMER1_COMPA_vect) {// Očitavanje, prikaz temperature i razine svjetlosti Read_Temp (); Read_Lux (); }

// Funkcija za prikaz riječi "TEMP" i "LUX" void Display_label () {// Riječ "TEMP" Display_SetXY (0, 0); // Postavi adresu prikazane pozicije (gornji red) za (int index = 0; index <105; index ++) {if (index == 40) {Display_SetXY (0, 1);} // Postavi adresu pozicije na zaslonu (donji redak) if (index == 80) {Display_SetXY (72, 0);} // Postavi adresu položaja na zaslonu (gornji red) if (index == 92) {Display_SetXY (72, 1); } // Postavi adresu pozicije na zaslonu (donji red) SPDR = TEMP_1 [indeks]; // Učitavanje podataka matrice kodova u međuspremnik prikaza while (! (SPSR & (1 << SPIF))); // Pričekajte dok se prijenos ne završi _delay_ms (10); } // Riječ "LUX" Display_SetXY (0, 2); // Postavi adresu prikazane pozicije (gornji red) za (int index = 0; index <60; index ++) {if (index == 30) {Display_SetXY (0, 3);} // Postavi adresu pozicije na zaslonu (donji red) SPDR = TEMP_2 [indeks]; // Učitavanje podataka matrice kodova u međuspremnik prikaza while (! (SPSR & (1 << SPIF))); // Pričekajte dok se prijenos ne završi _delay_ms (10); }}

int main (void)

{Port_Init (); // Inicijalizacija portova ADC_init (); // Inicijalizacija ADC -a SPI_Init (); // SPI inicijalizacija SPI_SS_Enable (); // Omogući prikaz DS18B20_init (); // Inicijalizacija DS18B20 Display_init (); // Inicijalizacija zaslona Display_Clear (); // Prikaz jasnog Display_label (); // Prikaz riječi "TEMP" i "LUX" TIMER1_init (); // Timer1 Inicijalizacija. Pokrenite nadzor. Dobivanje parametara svake sekunde. // Beskonačna petlja while (1) {}}

Korak 3: Flashanje firmvera na mikrokontroler

Učitavanje HEX datoteke u flash memoriju mikrokontrolera. Pogledajte video zapis s detaljnim opisom snimanja flash memorije mikrokontrolera: Bljesak memorije mikrokontrolera gori …

Korak 4: Nadgledanje sklopa kruga uređaja

Nadzor sklopa kruga uređaja
Nadzor sklopa kruga uređaja
Nadzor sklopa sklopa uređaja
Nadzor sklopa sklopa uređaja

Spojite komponente u skladu sa shematskim dijagramom.

Uključite napajanje i radi!

Preporučeni: