Satura rādītājs:

Temperatūras un gaismas līmeņa monitors ar displeju LCD NOKIA 5110: 4 soļi
Temperatūras un gaismas līmeņa monitors ar displeju LCD NOKIA 5110: 4 soļi

Video: Temperatūras un gaismas līmeņa monitors ar displeju LCD NOKIA 5110: 4 soļi

Video: Temperatūras un gaismas līmeņa monitors ar displeju LCD NOKIA 5110: 4 soļi
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Novembris
Anonim
Image
Image

Sveiki visiem!

Šajā sadaļā mēs izgatavojam vienkāršu elektronisku ierīci temperatūras un gaismas līmeņa uzraudzībai. Šo parametru mērījumi tiek parādīti LCD NOKIA 5110. Ierīces pamatā ir mikrokontrolleris AVR ATMEGA328P. Uzraudzības ierīce ir aprīkota ar DS18B20 digitālo termometru un fotorezistoru gaismas līmeņa mērīšanai.

1. darbība. Sastāvdaļu apraksts

Apraksts Sastāvdaļas
Apraksts Sastāvdaļas
Apraksts Sastāvdaļas
Apraksts Sastāvdaļas

Uzraudzības ierīces galvenās sastāvdaļas:

  • Mikrokontrolleris AVR «ATMEGA328P»
  • Vienkrāsains grafiskais LCD "NOKIA 5110"
  • Programmējama izšķirtspēja 1 vadu digitālais termometrs «DS18B20»
  • No gaismas atkarīgs rezistors
  • Vadi

Mikrokontrolleris AVR «ATMEGA328P»

Uzraudzības ierīce izmanto šādas mikrokontrollera perifērijas funkcijas:

  1. 16 bitu taimera/skaitītāja pārtraukums
  2. 8 kanālu 10 bitu ADC
  3. Master/slave SPI sērijas interfeiss

Vienkrāsains grafiskais LCD "NOKIA 5110"

Specifikācijas:

  1. 48 x 84 punktu LCD displejs
  2. Sērijas kopnes saskarne ar maksimālo ātrumu 4 Mbit/s
  3. Iekšējais kontrolieris/draiveris «PCD8544»
  4. LED fona apgaismojums
  5. Darbiniet ar spriegumu 2,7-5 volti
  6. Zems enerģijas patēriņš; tas ir piemērots akumulatora lietojumiem
  7. Temperatūras diapazons no -25˚C līdz +70˚C
  8. Atbalsta signāla CMOS ievadi

LCD adreses apstrāde (adresēšana):

Atmiņas adrešu izkārtojums, kas redzams LCD displejā (DDRAM), ir matrica, kas sastāv no 6 rindām (Y adrese) no Y-adreses 0 līdz Y-adreses 5 un 84 kolonnām (X adrese) no X-adreses 0 līdz X- Adrese 83. Ja lietotājs vēlas piekļūt rezultātam LCD displejā, ir jāatsaucas uz attiecībām starp X-adresi un Y-adresi.

Dati, kas tiks nosūtīti uz displeju, ir 8 bitu (1 baits), un tie tiks sakārtoti kā vertikāla līnija; šajā gadījumā bits MSB būs zemāks un bits LSB būs augšējais, kā parādīts attēlā.

Programmējama izšķirtspēja 1 vadu digitālais termometrs DALLAS «DS18B20»

Iespējas:

  1. Unikālai 1-Wire® saskarnei ir nepieciešama tikai viena pieslēgvieta
  2. Samaziniet komponentu skaitu, izmantojot integrēto temperatūras sensoru un EEPROM
  3. Mēra temperatūru no -55 ° C līdz +125 ° C (-67 ° F līdz +257 ° F)
  4. ± 0,5 ° C Precizitāte no -10 ° C līdz +85 ° C
  5. Programmējama izšķirtspēja no 9 bitiem līdz 12 bitiem
  6. Nav nepieciešami ārēji komponenti
  7. Parazītu barošanas režīma darbībai nepieciešami tikai 2 tapas (DQ un GND)
  8. Vienkāršo izkliedētās temperatūras noteikšanas lietojumprogrammas ar vairāku pilienu iespēju
  9. Katrai ierīcei ir unikāls 64 bitu sērijas kods, kas saglabāts iebūvētajā ROM
  10. Elastīgi lietotāja definējami nemainīgi (NV) trauksmes iestatījumi ar trauksmes meklēšanas komandu Identificē ierīces ar temperatūru, kas pārsniedz programmētās robežas

Lietojumprogrammas:

  1. Termostatiskās vadības ierīces
  2. Rūpnieciskās sistēmas
  3. Patērētāju produkti
  4. Termometri
  5. Termiski jutīgas sistēmas

No gaismas atkarīgs rezistors

Gaismas atkarīgais rezistors (LDR) ir devējs, kas maina pretestību, mainoties gaismai uz virsmas.

Parasti LDR būs no viena megaohma līdz diviem megaohmiem pilnīgā tumsā, no desmit līdz divdesmit kiloOhm pie desmit LUX, no diviem līdz pieciem kilomiem pie 100 LUX. Pretestība starp abiem sensora kontaktiem samazinās līdz ar gaismas intensitāti vai palielinās vadītspēja starp diviem sensora kontaktiem.

Izmantojiet sprieguma dalītāja ķēdi, lai pretestības izmaiņas pārveidotu par sprieguma izmaiņām.

2. darbība: mikrokontrollera programmaparatūras kods

#ifndef F_CPU #define F_CPU 16000000UL // norādot kontroliera kristāla frekvenci (16 MHz AVR ATMega328P) #endif

// SPI INTERFACE DEFINES #define MOSI 3 // MOSI it PORT B, PIN 3 #define MISO 4 // MISO it PORT B, PIN 4 #define SCK 5 // SCK it PORT B, PIN 5 #define SS 2 // SS tas ir B ports, PIN 2

// ATiestatīt displeju #define RST 0 // ATiestatīt tā portu B, PIN 0

// DISPLAY MODE SELECT - Ievadiet komandu vai adresi vai datu ievadi. #define DC 1 // DC tas ir B ports, PIN 1

// negatīvo signālu statisko kodu kods masīvs unsigned char neg [4] = {0x30, 0x30, 0x30, 0x30};

// kodē ciparu masīvu [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 {101} 0x0C, 0x8E, 0xCE, 0xE6, 0xE6, 0xBE, 0x9E, 0x0C, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 2 {0x00, 0x04, 0x06, 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 0x01, 0x03, 0x01}, // 4 {0x1C, 0x3E, 0x3E, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01x, // {0x01 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 0x0 3, 0x01}, // 8 {0x3C, 0x7E, 0x7E, 0x66, 0x66, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01} // 9};

// kodē vārda masīvu "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, 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, 0x0, 0x0 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01,};

// kodē vārdu masīvu "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, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01};

#iekļaut

#iekļaut #iekļaut

// Porta inicializācija nav derīga Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); // Iestatīt MOSI, SCK, SS, RST, DC kā izeja, visi pārējie ievada PORTB | = (1 << RST); // Iestatīt RST tapu kā augstu PORTB | = (1 << SS); // Iestatīt SS tapu kā augstu - Displejs ir Atspējot DDRC = 0xFFu; // Iestatiet visas PORTC tapas kā izeju. DDRC & = ~ (1 << 0); // Izveido PORTC pirmo tapu kā ievadi PORTC = 0x00u; // Iestatiet zemas visas PORTC tapas, kas to izslēdz. }

// ADC inicializācijas void ADC_init () {// Iespējot ADC, paraugu ņemšanas biežums = osc_freq/128 iestatīt prescaler uz maksimālo vērtību, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // Atlasiet ADC sprieguma atsauci // Pēc noklusējuma izvēlieties kanāla nulli, izmantojot ADC Multiplexer Select reģistru (ADC0). }

// Funkcija, lai nolasītu analogā uz digitālo konvertēšanas rezultātu uint16_t get_LightLevel () {_delay_ms (10); // Pagaidiet kādu laiku, līdz kanāls iegūst izvēlēto ADCSRA | = (1 << ADSC); // Sāciet ADC konvertēšanu, iestatot ADSC bitu. rakstiet 1 uz ADSC, kamēr (ADCSRA & (1 << ADSC)); // gaidiet, līdz konversija tiks pabeigta // ADSC līdz tam atkal kļūst par 0, nepārtraukti palaist cilpu _delay_ms (10); atgriešanās (ADC); // Atgriezt 10 bitu rezultātu}

// SPI inicializācija nav spēkā SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // Iespējot SPI, iestatīt kā galveno, iestatīt prescaler kā Fosc/16 SPI vadībā reģistrēties}

// inicializēt 16 bitu taimeri1, pārtraukt un mainīt void TIMER1_init () {// iestatīt taimeri ar prescaler = 256 un CTC režīmu TCCR1B | = (1 << WGM12) | (1 << CS12); // inicializēt skaitītāju TCNT1 = 0; // inicializēt salīdzināšanas vērtību - 1 sek OCR1A = 62500; // iespējot salīdzināt pārtraukumu TIMSK1 | = (1 << OCIE1A); // iespējot globālos pārtraukumus sei (); }

// Displejs Iespējot void SPI_SS_Enable () {PORTB & = ~ (1 << SS); // SS pin iespējošana loģikā 0}

// Displejs Atspējot void SPI_SS_Disable () {PORTB | = (1 << SS); // SS atspējot loģiku 1}

// Funkcija datu nosūtīšanai displeja buferī void SPI_Tranceiver (neparakstīti char dati) {SPDR = data; // Ielādēt datus buferī, kamēr (! (SPSR & (1 << SPIF))); // Pagaidiet, līdz pārraide ir pabeigta}

// Atiestatīt displeju inicializācijas sākumā void Display_Reset () {PORTB & = ~ (1 << RST); _kavēšanās_ms (100); PORTB | = (1 << RST); }

// Komandu rakstīšanas funkcija void Display_Cmnd (neparakstīti char dati) {PORTB & = ~ (1 << DC); // padarīt DC pin uz loģiku 0 komandu darbībai SPI_Tranceiver (dati); // nosūtīt datus datu reģistrā PORTB | = (1 << DC); // padarīt DC pin līdz loģikai augstu datu darbībai}

// Displeja inicializēšana void Display_init () {Display_Reset (); // atiestatīt displeju Display_Cmnd (0x21); // komandu komplekts papildināšanas režīmā Display_Cmnd (0xC0); // iestatiet spriegumu, nosūtot C0 nozīmē VOP = 5V Display_Cmnd (0x07); // iestatiet temp. koeficients līdz 3 Display_Cmnd (0x13); // sprieguma novirzes sistēmas iestatītā vērtība Display_Cmnd (0x20); // komandu komplekts pamata režīmā Display_Cmnd (0x0C); // parādīt rezultātu normālā režīmā}

// Notīrīt displeja tukšumu Display_Clear () {PORTB | = (1 << DC); // padarīt DC pin līdz loģikai augstu datu darbībai (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); // padarīt DC pin loģikai nulle komandu darbībai}

// iestatiet kolonnu un rindu uz rezultātu parādīšanas pozīciju LCD displejā void Display_SetXY (unsigned char x, unsigned char y) {Display_Cmnd (0x80 | x); // kolonna (0-83) Display_Cmnd (0x40 | y); // rinda (0-5)}

// Funkcija negatīvās zīmes parādīšanai void Display_Neg (unsigned char neg) {Display_SetXY (41, 0); // Iestatiet displejā redzamās pozīcijas adresi (int index = 0; index0) {SPDR = 0x30;} // Ielādējiet datus displeja buferī (displeja negatīvā zīme) else {SPDR = 0x00;} // Ielādējiet datus displeja buferis (skaidra negatīvā zīme), kamēr (! (SPSR & (1 << SPIF))); // Pagaidiet, līdz pārraide ir pabeigta _delay_ms (100); }}

// Funkcija, lai notīrītu digitālo zīmi void Off_Dig (unsigned char x, unsigned char y) {Display_SetXY (x, y); // Iestatiet displejā redzamās pozīcijas adresi (augšējā rinda) (int indekss = 0; indekss <8; indekss ++) {SPI_Tranceiver (0);} // Ielādējiet datus displeja buferī (skaidra digitālās zīmes augšējā daļa) y ++; Display_SetXY (x, y); // Iestatiet displeja pozīcijas adresi (apakšējā rindā) (int indekss = 0; indekss <8; indekss ++) {SPI_Tranceiver (0);} // Ielādējiet datus displeja buferī (notīriet digitālās zīmes apakšējo daļu)}

// Funkcija, lai parādītu digitālo apzīmējumu anulētu <16; indekss ++) {if (index == 8) {y ++; Display_SetXY (x, y);} // Iestatiet displejā redzamās pozīcijas adresi (apakšējā rindā) SPI_Tranceiver (font6x8 [dig] [index]); // Ielādēt kodu masīvu ciparu datus displeja buferī _delay_ms (10); }}

// DS18B20 neparakstītu simbolu inicializācija DS18B20_init () {DDRD | = (1 << 2); // Iestatiet PORTD PD2 tapu kā izeju PORTD & = ~ (1 << 2); // Iestatīt PD2 tapu kā zemu _delay_us (490); // Inicializācijas laiks DDRD & = ~ (1 << 2); // Iestatiet PORTD PD2 tapu kā ieeju _delay_us (68); // Laiks OK_Flag = (PIND & (1 << 2)); // iegūt sensora impulsu _delay_us (422); atgriezties OK_Flag; // atgriezties 0-ok sensors ir spraudnis, 1 kļūdas sensors ir atvienots}

// Funkcija, lai nolasītu baitu no DS18B20 unsigned char read_18b20 () {unsigned char i, data = 0; par (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Iestatiet PORTD PD2 tapu kā izeju _delay_us (2); // Laiks DDRD & = ~ (1 1; // Nākamais bits, ja (PIND & (1 << 2)) dati | = 0x80; // ievieto bitu baitos _delay_us (62);} atgriež datus;}

// Funkcija, lai ierakstītu baitu uz DS18B20 void write_18b20 (neparakstīti char dati) {unsigned char i; par (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Iestatiet PORTD PD2 tapu kā izeju _delay_us (2); // Laiks, ja (dati & 0x01) DDRD & = ~ (1 << 2); // ja mēs vēlamies rakstīt 1, atlaidiet rindu else DDRD | = (1 1; // Nākamais bits _delay_us (62); // Timing DDRD & = ~ (1 << 2); // Set PD2 pin of PORTD kā ievade _delay_us (2);}}

// Funkcija gaismas līmeņa parādīšanai void Read_Lux () {uint16_t buferis; neparakstīts int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // vienciparu, divciparu, trīsciparu, ceturtdaļas ciparu buferis = get_LightLevel (); // nolasīt rezultātu no analogā uz digitālo konvertēt gaismas līmeni temp_int_0 = buferis % 10000/1000; // ceturtdaļciparu temp_int_1 = buferis % 1000 /100; // trīsciparu temp_int_2 = buferis % 100/10; // divciparu temp_int_3 = buferis % 10; // vienciparu if (temp_int_0> 0) // ja rezultāts ir ceturtdaļciparu skaitlis {Display_Dig (temp_int_0, 32, 2); // parādīt 1 gaismas līmeņa ciparu Display_Dig (temp_int_1, 41, 2); // parādīt gaismas līmeņa 2 ciparus Display_Dig (temp_int_2, 50, 2); // parādīt gaismas līmeņa 3 ciparus Display_Dig (temp_int_3, 59, 2); // parādīt gaismas līmeņa 4 ciparus} else {if (temp_int_1> 0) // ja rezultāts ir trīsciparu skaitlis {Off_Dig (32, 2); // notīrīt skaitļa 1 zīmi Display_Dig (temp_int_1, 41, 2); // parādīt 1 gaismas līmeņa ciparu Display_Dig (temp_int_2, 50, 2); // parādīt gaismas līmeņa 2 ciparus Display_Dig (temp_int_3, 59, 2); // parādīt gaismas līmeņa 3 ciparus} else {if (temp_int_2> 0) // ja rezultāts ir divciparu skaitlis {Off_Dig (32, 2); // notīrīt skaitļa 1 zīmi Off_Dig (41, 2); // notīrīt skaitļa 2 zīmi Display_Dig (temp_int_2, 50, 2); // parādīt 1 gaismas līmeņa ciparu Display_Dig (temp_int_3, 59, 2); // parādīt 2 gaismas līmeņa ciparus} else // ja rezultāts ir viencipara skaitlis {Off_Dig (32, 2); // notīrīt skaitļa 1 zīmi Off_Dig (41, 2); // notīrīt skaitļa 2 zīmi Off_Dig (50, 2); // notīrīt skaitļa 3 zīmi Display_Dig (temp_int_3, 59, 2); // parādīt 1 gaismas līmeņa ciparu}}}}

// Funkcija temperatūras parādīšanai void Read_Temp () {unsigned int buffer; neparakstīts int temp_int_1, temp_int_2, temp_int_3; // vienciparu, divciparu, trīsciparu, ceturkšņa ciparu neparakstīta zīme Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // DS18B20 inicializēšana write_18b20 (0xCC); // Sensora koda pārbaude write_18b20 (0x44); // Sākt temperatūras konversiju _delay_ms (1000); // Sensora aptaujas aizkave DS18B20_init (); // DS18B20 inicializēšana write_18b20 (0xCC); // Sensora koda pārbaude write_18b20 (0xBE); // Komanda, lai nolasītu sensora RAM saturu Temp_L = read_18b20 (); // Lasīt pirmos divus baitus Temp_H = read_18b20 (); temp_flag = 1; // 1-pozitīva temperatūra, 0-negatīva temperatūra // Iegūt negatīvu temperatūru, ja (Temp_H & (1 << 3)) // Sign Bit Check (ja bits ir iestatīts-negatīva temperatūra) {parakstīta int temp; temp_flag = 0; // karogs ir iestatīts 0 - negatīva temperatūra temp = (Temp_H << 8) | Temp_L; temperatūra = -temperatūra; // Pārveidot papildu kodu tiešā veidā Temp_L = temp; Temp_H = temp >> 8; } buferis = ((Temp_H 4); temp_int_1 = buferis % 1000/100; // trīsciparu temp_int_2 = buferis % 100/10; // divciparu temp_int_3 = buferis % 10; // vienciparu

// Ja temperatūra ir negatīva temperatūras zīme, citādi notīriet

if (temp_flag == 0) {Display_Neg (1);} else {Display_Neg (0);} if (temp_int_1> 0) // ja rezultāts ir trīsciparu skaitlis {Display_Dig (temp_int_1, 45, 0); // parādīt 1 temperatūras ciparu Display_Dig (temp_int_2, 54, 0); // parādīt 2 ciparus no temperatūras Display_Dig (temp_int_3, 63, 0); // parādīt temperatūras 3 ciparus} else {if (temp_int_2> 0) // ja rezultāts ir divciparu skaitlis {Off_Dig (45, 0); // notīrīt skaitļa 1 zīmi Display_Dig (temp_int_2, 54, 0); // parādīt 1 temperatūras ciparu Display_Dig (temp_int_3, 63, 0); // parādīt 2 temperatūras ciparus} else // ja rezultāts ir viencipara skaitlis {Off_Dig (45, 0); // notīrīt skaitļa 1 zīmi Off_Dig (54, 0); // notīrīt skaitļa 2 zīmi Display_Dig (temp_int_3, 63, 0); // parādīt 1 temperatūras ciparu}}}

// Šis ISR tiek aktivizēts ikreiz, kad sakrīt taimeru skaits ar salīdzināšanas vērtību (ik pēc 1 sekundes) ISR (TIMER1_COMPA_vect) {// Lasīšana, temperatūras un gaismas līmeņa lasīšana Read_Temp (); Lasīt_Lukss (); }

// Funkcija, lai parādītu vārdus "TEMP" un "LUX" void Display_label () {// Word "TEMP" Display_SetXY (0, 0); // Iestatiet displejā redzamās pozīcijas adresi (augšējā rindā) (int indekss = 0; indekss <105; indekss ++) {if (indekss == 40) {Display_SetXY (0, 1);} // Iestatiet pozīcijas adresi displejā (apakšējā rindā), ja (indekss == 80) {Display_SetXY (72, 0);} // Iestatiet displejā redzamās pozīcijas adresi (augšējā rinda), ja (indekss == 92) {Display_SetXY (72, 1); } // Iestatiet displejā redzamās pozīcijas adresi (apakšējā rinda) SPDR = TEMP_1 [indekss]; // Ielādēt kodu masīva datus displeja buferī, kamēr (! (SPSR & (1 << SPIF))); // Pagaidiet, līdz pārraide ir pabeigta _delay_ms (10); } // Vārds "LUX" Display_SetXY (0, 2); // Iestatiet displejā redzamās pozīcijas adresi (augšējā rindā) (int indekss = 0; indekss <60; indekss ++) {if (indekss == 30) {Display_SetXY (0, 3);} // Iestatiet pozīcijas adresi displejā (apakšējā rindā) SPDR = TEMP_2 [indekss]; // Ielādēt kodu masīva datus displeja buferī, kamēr (! (SPSR & (1 << SPIF))); // Pagaidiet, līdz pārraide ir pabeigta _delay_ms (10); }}

int main (anulēts)

{Port_Init (); // Ostas inicializācija ADC_init (); // ADC inicializācija SPI_Init (); // SPI inicializācija SPI_SS_Enable (); // Displeja iespējošana DS18B20_init (); // DS18B20 inicializēšana Display_init (); // Displeja inicializācija Display_Clear (); // Parādīt skaidru Display_label (); // Parādīt vārdus "TEMP" un "LUX" TIMER1_init (); // Taimeris1 Inicializācija. Sāciet uzraudzību. Parametru iegūšana katru sekundi. // Bezgalības cilpa, kamēr (1) {}}

3. darbība: programmaparatūras mirgošana mikrokontrollerī

HEX faila augšupielāde mikrokontrollera zibatmiņā. Noskatieties video ar detalizētu mikrokontrollera zibatmiņas ierakstīšanas aprakstu: Mikrokontrollera zibatmiņas ierakstīšana…

4. solis: Uzraudzības ierīces shēmas montāža

Uzraudzības ierīces shēmas komplekts
Uzraudzības ierīces shēmas komplekts
Uzraudzības ierīces shēmas komplekts
Uzraudzības ierīces shēmas komplekts

Savienojiet komponentus saskaņā ar shēmu.

Pievienojiet strāvu un tas darbojas!

Ieteicams: