Mündəricat:

LCD NOKIA 5110: 4 Addımlı Ekranlı İstilik və İşıq Səviyyə Monitoru
LCD NOKIA 5110: 4 Addımlı Ekranlı İstilik və İşıq Səviyyə Monitoru

Video: LCD NOKIA 5110: 4 Addımlı Ekranlı İstilik və İşıq Səviyyə Monitoru

Video: LCD NOKIA 5110: 4 Addımlı Ekranlı İstilik və İşıq Səviyyə Monitoru
Video: NOKIA 5110 EKRAN (LCD) KULLANIMI | AYRINTILI KULLANIM REHBERİ 2024, Noyabr
Anonim
Image
Image

Hamıya salam!

Bu bölmədə temperatur və işıq səviyyəsini izləmək üçün sadə bir elektron cihaz hazırlayırıq. Bu parametrlərin ölçüləri LCD NOKIA 5110 -da göstərilir. Cihaz AVR ATMEGA328P mikro nəzarətçisinə əsaslanır. Nəzarət cihazı işıq səviyyəsini ölçmək üçün DS18B20 rəqəmsal termometr və fotorezistorla təchiz edilmişdir.

Addım 1: Təsvir komponentləri

Təsvir komponentləri
Təsvir komponentləri
Təsvir komponentləri
Təsvir komponentləri

İzləmə cihazının əsas komponentləri:

  • AVR "ATMEGA328P" mikro nəzarətçi
  • Monoxrom Qrafik LCD "NOKIA 5110"
  • Proqramlaşdırıla bilən 1 telli rəqəmsal termometr «DS18B20»
  • İşıqdan asılı rezistor
  • Tellər

AVR "ATMEGA328P" mikro nəzarətçi

İzləmə cihazı mikro nəzarətçinin aşağıdakı periferik xüsusiyyətlərindən istifadə edir:

  1. 16 bitlik Taymer/Sayğacın kəsilməsi
  2. 8 kanallı 10 bitlik ADC
  3. Master/slave SPI serial interfeysi

Monoxrom Qrafik LCD "NOKIA 5110"

Xüsusiyyətlər:

  1. 48 x 84 nöqtəli LCD ekran
  2. Maksimum 4 Mbit/S sürətə malik Serial Avtobus İnterfeysi
  3. Daxili Nəzarətçi/Sürücü «PCD8544»
  4. LED arxa işıq
  5. 2.7-5 Volt gərginliyində işləyin
  6. Aşağı enerji istehlakı; batareya tətbiqləri üçün uyğundur
  7. Temperatur aralığı -25˚C ilə +70˚C arasında
  8. Sinyal CMOS Girişini dəstəkləyin

LCD Ünvanla İşləmə (Ünvanlama):

LCD Ekranda (DDRAM) göstərilən yaddaş ünvanı, Y-Ünvan 0-dan Y-Ünvan 5-ə qədər 6 sıra (Y Ünvan) və X-Ünvan 0-dan X-ə qədər 84 sütundan (X Ünvan) ibarət Matrixdir. Ünvan 83. İstifadəçi nəticəni LCD Ekranda göstərmək mövqeyinə daxil olmaq istəyirsə, X-Ünvan və Y-Ünvanı arasındakı əlaqəyə istinad etməlidir.

Göstərilməyə göndəriləcək məlumatlar 8 bit (1 Bayt) təşkil edir və şaquli xətt kimi təşkil ediləcək; bu halda, Bit MSB daha aşağı, Bit LSB isə yuxarıda göstərildiyi kimi olacaq.

Proqramlaşdırıla bilən 1 telli rəqəmsal termometr DALLAS «DS18B20»

Xüsusiyyətləri:

  1. Unikal 1-Wire® İnterfeysi ünsiyyət üçün yalnız bir Port Pin tələb edir
  2. İnteqrasiya edilmiş temperatur sensoru və EEPROM ilə komponentlərin sayını azaldın
  3. -55 ° C ilə +125 ° C (-67 ° F - +257 ° F) arasındakı temperaturları ölçür.
  4. ± 0,5 ° C -10 ° C ilə +85 ° C arasında dəqiqlik
  5. 9 bitdən 12 bitə qədər proqramlaşdırıla bilən qətnamə
  6. Xarici komponentlərə ehtiyac yoxdur
  7. Parazitar Güc Modu Əməliyyat üçün Yalnız 2 Pins (DQ və GND) tələb edir
  8. Dağıtılmış İstilik Algılama Tətbiqlərini Multidrop qabiliyyəti ilə sadələşdirir
  9. Hər bir cihazda, ROM-da saxlanılan unikal 64 bitlik seriya kodu var
  10. Siqnal Axtarış Komandası ilə İstifadəçi tərəfindən təyin edilə bilən Qeyri-Uçucu (NV) Siqnal Ayarları Proqramlaşdırılmış Limitlər xaricində Temperaturlu Cihazları Tanıyır.

Tətbiqlər:

  1. Termostatik nəzarət
  2. Sənaye Sistemləri
  3. İstehlak Məhsulları
  4. Termometrlər
  5. Termal Həssas Sistemlər

İşıqdan asılı rezistor

İşığa Bağlı Rezistor (LDR), səthə işıq düşəndə müqavimətini dəyişən bir çeviricidir.

Tipik olaraq bir LDR, tam qaranlıqda bir megaOhm -dan iki megaOhm -a, on LUX -da on -iyirmi kiloOhm -ə, 100 LUX -da iki -beş kiloohm -a malik olacaqdır. Sensorun iki kontağı arasındakı müqavimət işıq intensivliyi ilə azalır və ya sensorun iki kontağı arasındakı keçiricilik artır.

Müqavimət dəyişikliyini gərginlik dəyişikliyinə çevirmək üçün gərginlik bölücü dövrə istifadə edin.

Addım 2: Mikrokontrolör Firmware Kodu

#ifndef F_CPU #F_CPU 16000000UL təyin edin // nəzarətçi kristal tezliyini bildirir (16 MHz AVR ATMega328P) #endif

// SPI INTERFACE TANIMLAR #MOSI 3 təyin edin // MOSI bu PORT B, PIN 3 #MISO 4 təyin edin // MISO bu PORT B, PIN 4 #SCK 5 təyin edin // SCK bu PORT B, PIN 5 #SS 2 təyin edin // SS bu PORT B, PIN 2

// EKRANI SIFIRLAYIN #RST 0 təyin edin // PORT B, PIN 0 -ı sıfırlayın

// EKRAN MODU SEÇİMİ - Komanda/ünvan və ya məlumat girişini seçmək üçün giriş. #define DC 1 // DC bu PORT B, PIN 1 -dir

// mənfi işarəli statik işarəsiz işarələr char neg [4] = {0x30, 0x30, 0x30, 0x30};

// rəqəmlərdən ibarət kodlar [0..9] statik const işarəsiz 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, 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, 0x03, 5x01 0xFE, 0xFE, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 6 {0x04, 0x06, 0x06, 0x86, 0x86, 0x86, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00}, // 7 {0xCC, 0xFE, 0xFE, 0x36, 0x36, 0xFE, 0xFE, 0xCC, 0x01, 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};

// "TEMP:" sözünün kodlar silsiləsi statik const işarəsiz char TEMP_1 [165] = {0x02, 0x06, 0x06, 0xFE, 0xFE, 0xFE, 0x06, 0x06, 0x02, 0x00, 0xFC, 0xFE, 0xFE, 0x26, 0x26, 0x06 0x24, 0x00, 0xFC, 0xFE, 0xFE, 0x1C, 0x38, 0x70, 0x38, 0x1C, 0xFE, 0xFE, 0xFC, 0x00, 0xFC, 0xFE, 0xFE, 0x66, 0x66, 0x7x, 0x7C, 0x7C, 0x7E, 0x7E 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0C, 0x1E, 0x33, 0x33, 0x1x, 0x0C, 0x0C 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01,};

// "LUX:" sözünün dizisini kodlar 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, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01};

#daxil edin

#daxil edin #daxil edin

// Liman Başlatması Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); // MOSI qurun, Çıxış olaraq SCK, SS, RST, DC, digər bütün girişlər PORTB | = (1 << RST); // RST pinini yüksək olaraq təyin edin PORTB | = (1 << SS); // SS pinini yüksək olaraq təyin edin - Ekran DDRC = 0xFFu aradan buraxın; // PORTC -nin bütün sancaqlarını çıxış olaraq təyin edin. DDRC & = ~ (1 << 0); // PORTC'nin ilk pinini Giriş PORTC = 0x00u olaraq edir; // Bütün PORTC pinlərini söndürən aşağıya endirin. }

// ADC Başlanğıc boşluğu ADC_init () {// ADC -ni aktiv edin, nümunə götürmə freq = osc_freq/128 prescaler -ı maksimum dəyərə təyin edin, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // ADC üçün gərginlik istinadını seçin // ADC Multiplexer Select reyestrini (ADC0) istifadə edərək kanal sıfırını standart olaraq seçin. }

// Analoqun rəqəmsaldan rəqəmsala çevrilməsinin nəticəsini oxumaq funksiyası uint16_t get_LightLevel () {_delay_ms (10); // Kanalın seçilmiş ADCSRA almasını bir müddət gözləyin | = (1 << ADSC); // ADSC bitini təyin edərək ADC çevrilməsinə başlayın. ADSC -ə 1 yazın (ADCSRA & (1 << ADSC)); // dönüşümün tamamlanmasını gözləyin // ADSC o vaxta qədər yenidən 0 olur, döngəni davamlı işlədin _delay_ms (10); qayıt (ADC); // 10 bitlik nəticəni qaytarın}

// SPI Başlatma boşluğu SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // SPI -ni aktivləşdirin, Master olaraq təyin edin, SPI nəzarətində Prescaler -ı Fosc/16 olaraq təyin edin qeydiyyatdan keç}

// 16 bit Timer1, fasilə və dəyişkən boşluq TIMER1_init () {// işə salın, prescaler = 256 və CTC rejimi ilə timer qurun TCCR1B | = (1 << WGM12) | (1 << CS12); // sayğacı işə salın TCNT1 = 0; // müqayisə dəyərini başlat - 1 san OCR1A = 62500; // müqayisə kəsilməsini aktivləşdir TIMSK1 | = (1 << OCIE1A); // qlobal fasilələri aktivləşdirin sei (); }

// Display Enable void SPI_SS_Enable () {PORTB & = ~ (1 << SS); // Məntiq üçün SS pinini aktiv edin 0}

// Display Disable void boşluğu SPI_SS_Disable () {PORTB | = (1 << SS); // Məntiq üçün SS pinini deaktiv edin}

// SPI_Tranceiver (işarəsiz char məlumatları) boşluq tamponuna məlumat göndərmə funksiyası {SPDR = data; // Buferə məlumat yükləyərkən (! (SPSR & (1 << SPIF))); // Göndərmə tamamlanana qədər gözləyin}

// Başlanğıcın əvvəlində Ekranı sıfırlayın void Display_Reset () {PORTB & = ~ (1 << RST); _delay_ms (100); PORTB | = (1 << RST); }

// Əmr yazma funksiyası void Display_Cmnd (işarəsiz char məlumatları) {PORTB & = ~ (1 << DC); // əmr əməliyyatı SPI_Tranceiver (data) üçün məntiqi 0 -a DC pin etmək; // məlumat reyestri haqqında məlumat göndərmək PORTB | = (1 << DC); // məlumatların işlənməsi üçün məntiqi yüksək DC pin edin}

// Display void Display_init () {Display_Reset (); // ekranı sıfırlayın Display_Cmnd (0x21); // əlavə rejimində əmr dəsti Display_Cmnd (0xC0); // C0 göndərərək gərginliyi təyin edin VOP = 5V Display_Cmnd (0x07) deməkdir; // istiliyi təyin edin. 3 Display_Cmnd (0x13) əmsalı; // Voltaj Bias Sisteminin Display_Cmnd (0x20) dəyərini təyin edin; // Display_Cmnd (0x0C) əsas rejimində əmr verilir; // nəticəni normal rejimdə göstərin}

// Ekran boşluğunu silin Display_Clear () {PORTB | = (1 << DC); // (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); // DC pinini məntiqə çevirin əmr əməliyyatı üçün sıfır}

// sütunu və sətri nəticəni LCD displeydə göstərmə vəziyyətinə qoyun Display_SetXY (işarəsiz char x, işarəsiz char y) {Display_Cmnd (0x80 | x); // sütun (0-83) Display_Cmnd (0x40 | y); // sıra (0-5)}

// Mənfi işarənin boşluğunu göstərmək funksiyası Display_Neg (unsigned char neg) {Display_SetXY (41, 0); // Göstərilən mövqenin ünvanını (int index = 0; index0) {SPDR = 0x30;} // Məlumatı ekran tamponuna yükləyin (mənfi işarəni göstərin) başqa {SPDR = 0x00;} // Veriləri daxil edin ekran tamponu (mənfi işarəni sil) while (! (SPSR & (1 << SPIF)))); // Göndərmə tamamlanana qədər gözləyin _delay_ms (100); }}

// Off_Dig (işarəsiz char x, işarəsiz char y) rəqəmsal işarənin boşluğunu silmək funksiyası {Display_SetXY (x, y); // (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} üçün ekrandakı mövqeyin ünvanını təyin edin (rəqəm işarəsinin yuxarı hissəsini silin) y ++; Display_SetXY (x, y); // (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Ekranın tamponuna məlumat yüklə () rəqəmsal işarənin alt hissəsini təmizləyin)}

// Digital işarəsinin boşluğunu göstərmək funksiyası Display_Dig (int dig, işarəsiz char x, işarəsiz char y) {Display_SetXY (x, y); // (int index = 0; index <16; index ++) {if (index == 8) {y ++; Display_SetXY (x, y);} // Ekrandakı mövqenin ünvanını təyin edin (alt sıra) SPI_Tranceiver (font6x8 [dig] [index]); // _delay_ms (10) displeyinin tamponuna rəqəm məlumatları kodları silsiləsini yükləyin; }}

// DS18B20 imzasız char DS18B20_init () {DDRD | = (1 << 2); // PORTD -in PD2 pinini PORTD & = ~ (1 << 2) çıxışı olaraq təyin edin; // PD2 pinini aşağı _delay_us (490) olaraq təyin edin; // Başlama Zamanlaması DDRD & = ~ (1 << 2); // PORTD -nin PD2 pinini _delay_us (68) girişi olaraq təyin edin; // Zamanlama OK_Flag = (PIND & (1 << 2)); // sensor nəbzini əldə edin _delay_us (422); OK_Flag qayıt; // qaytar 0-ok sensoru fişdir, 1 səhv sensoru ayrılır}

// DS18B20 işarəsiz char read_18b20 () {işarəsiz char i, data = 0; üçün (i = 0; i <8; i ++) {DDRD | = (1 << 2); // PORTD -nin PD2 pinini _delay_us (2) çıxışı olaraq təyin edin; // Zamanlama DDRD & = ~ (1 1; // Növbəti bit (PIND & (1 << 2)) data | = 0x80; // biti baytda qoyduqda _delay_us (62);} məlumatları qaytarır;}

// DS18B20 -ə bayt yazmaq funksiyası etibarsız write_18b20 (işarəsiz char məlumatları) {unsigned char i; üçün (i = 0; i <8; i ++) {DDRD | = (1 << 2); // PORTD -nin PD2 pinini _delay_us (2) çıxışı olaraq təyin edin; // Zamanlama (data & 0x01) DDRD & = ~ (1 << 2); // 1 yazmaq istəsək, başqa satırı buraxın DDRD | = (1 1; // Sonrakı bit _delay_us (62); // Zamanlama DDRD & = ~ (1 << 2); // _Delay_us (2) girişi olaraq PORTD;}}

// işıq səviyyəsinin boşluğunu göstərmək funksiyası Read_Lux () {uint16_t tampon; işarəsiz int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // tək rəqəmlər, ikiqat rəqəmlər, üçlü rəqəmlər, dörddəbir rəqəm tamponu = get_LightLevel (); // analoqun nəticəsini rəqəmsal səviyyəyə çevirmək işıq səviyyəsini oxuyun temp_int_0 = tampon % 10000 /1000; // dörddəbirlik temp_int_1 = tampon % 1000/100; // üçrəqəmli temp_int_2 = tampon % 100/10; // iki rəqəmli temp_int_3 = tampon % 10; // tək rəqəmli if (temp_int_0> 0) // nəticə dörddəbirlik rəqəmdirsə {Display_Dig (temp_int_0, 32, 2); // işıq səviyyəsinin 1 rəqəmini göstər Display_Dig (temp_int_1, 41, 2); // işıq səviyyəsinin 2 rəqəmini göstər Display_Dig (temp_int_2, 50, 2); // işıq səviyyəsinin 3 rəqəmini göstər Display_Dig (temp_int_3, 59, 2); // işıq səviyyəsinin 4 rəqəmini göstər} başqa {if (temp_int_1> 0) // nəticə üç rəqəmli rəqəmdirsə {Off_Dig (32, 2); // Display_Dig (temp_int_1, 41, 2) rəqəminin 1 işarəsini silin; // işıq səviyyəsinin 1 rəqəmini göstər Display_Dig (temp_int_2, 50, 2); // işıq səviyyəsinin 2 rəqəmini göstər Display_Dig (temp_int_3, 59, 2); // işıq səviyyəsinin 3 rəqəmini göstərin} başqa {if (temp_int_2> 0) // nəticə iki rəqəmli rəqəmdirsə {Off_Dig (32, 2); // Off_Dig nömrəsinin 1 işarəsini silin (41, 2); // Display_Dig (temp_int_2, 50, 2) rəqəminin 2 işarəsini silin; // işıq səviyyəsinin 1 rəqəmini göstər Display_Dig (temp_int_3, 59, 2); // işıq səviyyəsinin 2 rəqəmini göstərin} başqa // nəticə təkrəqəmli bir rəqəm olarsa {Off_Dig (32, 2); // Off_Dig nömrəsinin 1 işarəsini silin (41, 2); // Off_Dig rəqəminin 2 işarəsini silin (50, 2); // Display_Dig rəqəminin 3 işarəsini silin (temp_int_3, 59, 2); // işıq səviyyəsinin 1 rəqəmini göstərin}}}}

// Temperatur boşluğunu göstərmək funksiyası Read_Temp () {unsigned int buffer; işarəsiz int temp_int_1, temp_int_2, temp_int_3; // tək rəqəmlər, ikiqat rəqəmlər, üç rəqəmlər, dörddəbir rəqəmlər işarəsiz char Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // DS18B20 write_18b20 (0xCC) başlanğıcı; // Sensor kodu yoxlama write_18b20 (0x44); // İstilik çevrilməsinə başlayın _delay_ms (1000); // Sensor yoxlama gecikməsi DS18B20_init (); // DS18B20 write_18b20 (0xCC) başlanğıcı; // Sensor kodu yoxlama write_18b20 (0xBE); // Sensor RAM -ın məzmununu oxumaq əmri Temp_L = read_18b20 (); // İlk iki baytı oxuyun Temp_H = read_18b20 (); temp_flag = 1; // 1-müsbət temperatur, 0-mənfi temperatur // Əgər mənfi temperatur alın (Temp_H & (1 << 3)) // İşarələmə Bitini yoxlayın (bit təyin olunarsa-mənfi temperatur) {imzalanmış int temp; temp_flag = 0; // bayraq 0 olaraq təyin olunur - mənfi temperatur tempi = (Temp_H << 8) | Temp_L; temp = -temp; // Əlavə kodu birbaşa Temp_L = tempə çevirin; Temp_H = temp >> 8; } tampon = ((Temp_H 4); temp_int_1 = tampon % 1000/100; // üçrəqəmli temp_int_2 = tampon % 100/10; // iki rəqəmli temp_int_3 = tampon % 10; // təkrəqəmli

// Əgər temperatur mənfi göstərici olarsa, başqa bir şey göstərin

if (temp_flag == 0) {Display_Neg (1);} else {Display_Neg (0);} if (temp_int_1> 0) // nəticə üç rəqəmli rəqəmdirsə {Display_Dig (temp_int_1, 45, 0); // temperaturun 1 rəqəmini göstər Display_Dig (temp_int_2, 54, 0); // temperaturun 2 rəqəmini göstər Display_Dig (temp_int_3, 63, 0); // temperaturun 3 rəqəmini göstərin} başqa {if (temp_int_2> 0) // nəticə iki rəqəmli rəqəmdirsə {Off_Dig (45, 0); // Display_Dig (temp_int_2, 54, 0) rəqəminin 1 işarəsini silin; // temperaturun 1 rəqəmini göstər Display_Dig (temp_int_3, 63, 0); // temperaturun 2 rəqəmini göstərin} başqa // nəticə təkrəqəmli bir rəqəmdirsə {Off_Dig (45, 0); // Off_Dig nömrəsinin 1 işarəsini silin (54, 0); // Display_Dig rəqəminin 2 işarəsini silin (temp_int_3, 63, 0); // temperaturun 1 rəqəmini göstərin}}}

// Müqayisə dəyəri (hər 1 saniyədə) ISR (TIMER1_COMPA_vect) ilə taymer sayına uyğun gələndə bu ISR atılır {// Oxu, temperaturun və işıq səviyyəsinin göstərilməsi Read_Temp (); Read_Lux (); }

// "TEMP" və "LUX" sözlərini göstərmək üçün funksiya Display_label () {// Word "TEMP" Display_SetXY (0, 0); // Göstərilən mövqenin ünvanını (yuxarı sıra) (int index = 0; index <105; index ++) üçün təyin edin {if (index == 40) {Display_SetXY (0, 1);} // Mövqe ünvanını təyin edin ekranda (alt sıra) if (indeks == 80) {Display_SetXY (72, 0);} // Ekrandakı mövqenin ünvanını təyin edin (yuxarı satır) əgər (indeks == 92) {Display_SetXY (72, 1); } // Ekrandakı mövqenin ünvanını təyin edin (alt sətir) SPDR = TEMP_1 [index]; // (! (SPSR & (1 << SPIF))); // ötürülmə tamamlanana qədər gözləyin _delay_ms (10); } // Word "LUX" Display_SetXY (0, 2); // Göstərilən mövqenin ünvanını (yuxarı sıra) (int index = 0; index <60; index ++) üçün təyin edin {if (index == 30) {Display_SetXY (0, 3);} // Mövqe ünvanını təyin edin ekranda (alt sıra) SPDR = TEMP_2 [indeks]; // (! (SPSR & (1 << SPIF))); // Göndərmə tamamlanana qədər gözləyin _delay_ms (10); }}

int main (boş)

{Port_Init (); // Limanın işə salınması ADC_init (); // ADC başlatma SPI_Init (); // SPI başlatma SPI_SS_Enable (); // Display Enable DS18B20_init (); // DS18B20 Display_init () başlanğıcı; // Ekran başlanğıc göstəricisi Display_Clear (); // Aydın göstər Display_label (); // "TEMP" və "LUX" TIMER1_init () sözlərini göstərin; // Zamanlayıcı1 Başlanğıc. Monitorinqə başlayın. Parametrləri hər saniyə əldə etmək. // Sonsuzluq döngəsi (1) {}}

Addım 3: Mikro nəzarətçiyə Flaş Proqramı yanır

HEX faylının mikro nəzarətçi flash yaddaşına yüklənməsi. Videoya mikro nəzarətçi flash yaddaşının yanmasının ətraflı təsviri ilə baxın: Mikro nəzarətçi flash yaddaşının yanması…

Addım 4: Monitorinq Cihazı Dövrə Montajı

Nəzarət Cihazı Dövrə Quraşdırması
Nəzarət Cihazı Dövrə Quraşdırması
Nəzarət Cihazı Dövrə Quraşdırması
Nəzarət Cihazı Dövrə Quraşdırması

Şematik sxemə uyğun olaraq komponentləri birləşdirin.

Gücü bağlayın və işləyir!

Tövsiyə: