Mundarija:

NOKIA 5110: 4 qadamli LCD displeyda harorat va yorug'lik darajasi monitor
NOKIA 5110: 4 qadamli LCD displeyda harorat va yorug'lik darajasi monitor

Video: NOKIA 5110: 4 qadamli LCD displeyda harorat va yorug'lik darajasi monitor

Video: NOKIA 5110: 4 qadamli LCD displeyda harorat va yorug'lik darajasi monitor
Video: Nokia 5110. Капсула времени из 1998 года. Крутой ретро телефон 2024, Noyabr
Anonim
Image
Image

Hammaga salom!

Bu bo'limda biz harorat va yorug'lik darajasini kuzatish uchun oddiy elektron qurilma yasaymiz. Ushbu parametrlarning o'lchovlari NOKIA 5110 LCD displeyida ko'rsatiladi. Qurilma AVR ATMEGA328P mikrokontrolleriga asoslangan. Kuzatuv moslamasi yorug'lik darajasini o'lchash uchun DS18B20 raqamli termometr va fotorezistor bilan jihozlangan.

1 -qadam: Komponentlarning tavsifi

Ta'rif komponentlari
Ta'rif komponentlari
Ta'rif komponentlari
Ta'rif komponentlari

Kuzatuv moslamasining asosiy komponentlari:

  • AVR "ATMEGA328P" mikrokontroller
  • Monoxrom grafikali LCD "NOKIA 5110"
  • Dasturlash mumkin bo'lgan 1-simli raqamli termometr "DS18B20"
  • Yorug'likka bog'liq qarshilik
  • Simlar

AVR "ATMEGA328P" mikrokontroller

Kuzatuv moslamasi mikrokontrollerning quyidagi periferik xususiyatlaridan foydalanadi:

  1. 16 bitli taymer/hisoblagichning uzilishi
  2. 8 kanalli 10 bitli ADC
  3. Master/slave SPI ketma -ket interfeysi

Monoxrom grafikali LCD "NOKIA 5110"

Xususiyatlar:

  1. 48 x 84 nuqta LCD displey
  2. Maksimal yuqori tezligi 4 Mbit/s bo'lgan ketma -ket avtobus interfeysi
  3. Ichki nazoratchi/haydovchi "PCD8544"
  4. LED orqa nuri
  5. 2.7-5 voltli kuchlanish bilan ishlang
  6. Kam quvvat sarfi; u batareyalarni ishlatish uchun javob beradi
  7. Harorat -25 ˚ dan +70 ˚ gacha
  8. CMOS kirishni qo'llab -quvvatlash

LCD manzili bilan ishlash (manzillar):

LCD displeyda (DDRAM) ko'rsatiladigan xotira manzilining joylashuvi-Y-manzildan 0-Y-5-manzilgacha 6 qatordan (Y manzili) va X-manzildan 0 dan Xgacha 84 ustundan (X manzili) iborat Matritsa. Manzil 83. Agar foydalanuvchi LCD displeyda natijani ko'rsatish pozitsiyasiga kirishni xohlasa, X-manzil va Y-manzil o'rtasidagi munosabatlarga murojaat qilishi kerak.

Ko'rsatish uchun yuboriladigan ma'lumotlar 8 bit (1 bayt) bo'lib, u vertikal chiziq sifatida joylashtiriladi; bu holda, Bit MSB pastroq bo'ladi va Bit LSB rasmda ko'rsatilgandek yuqori bo'ladi.

Dasturlash mumkin bo'lgan 1-simli raqamli termometr DALLAS "DS18B20"

Xususiyatlari:

  1. Noyob 1-Wire® interfeysi aloqa uchun faqat bitta portli pinni talab qiladi
  2. Harorat sensori va EEPROM yordamida komponentlar sonini kamaytiring
  3. -55 ° C dan +125 ° C gacha (-67 ° F dan +257 ° F gacha) haroratni o'lchaydi.
  4. ± 0,5 ° C -10 ° C dan +85 ° C gacha aniqlik
  5. 9 bitdan 12 bitgacha programlanadigan piksellar sonini
  6. Tashqi komponentlar talab qilinmaydi
  7. Parazitar quvvat rejimi ishlash uchun faqat 2 ta pinni talab qiladi (DQ va GND)
  8. Multidrop qobiliyati bilan taqsimlangan haroratni aniqlash dasturlarini soddalashtiradi
  9. Har bir qurilma bortli ROMda saqlangan yagona 64-bitli seriya kodiga ega
  10. Signal qidirish buyrug'i bilan moslashuvchan foydalanuvchi tomonidan belgilanadigan o'zgaruvchan bo'lmagan (NV) signal sozlamalari dasturlashtirilgan chegaralar tashqarisidagi haroratga ega qurilmalarni aniqlaydi.

Ilovalar:

  1. Termostatik boshqaruv
  2. Sanoat tizimlari
  3. Iste'mol mahsulotlari
  4. Termometr
  5. Termal sezgir tizimlar

Yorug'likka bog'liq qarshilik

Nurga bog'liq rezistor (LDR) - yorug'lik o'zgarganda, uning qarshiligini o'zgartiradi.

Odatda, LDR to'liq qorong'uda bitta megohmdan ikki megohmgacha, o'n LUXda o'ndan yigirma kilo Ohmgacha, 100 LUXda ikki kilodan besh kiloga qadar bo'ladi. Sensorning ikkita kontaktlari orasidagi qarshilik yorug'lik intensivligida kamayadi yoki sensorning ikkita kontaktlari orasidagi o'tkazuvchanlik oshadi.

Qarshilik o'zgarishini kuchlanish o'zgarishiga aylantirish uchun kuchlanishni ajratuvchi sxemadan foydalaning.

2 -qadam: Mikroto'lqinli dasturiy ta'minot kodi

#ifndef F_CPU #F_CPU 16000000UL ni aniqlang // nazoratchi kristalli chastotasini bildiradi (16 MGts AVR ATMega328P) #endif

// SPI INTERFACE ta'riflaydi #MOSI 3 ni aniqlaydi // MOSI bu PORT B, PIN 3 #MISO 4 ni belgilash // MISO bu PORT B, PIN 4 #SCK 5ni belgilash // SCK bu PORT B, PIN 5 #SSINni belgilash // SS - bu port B, PIN 2

// DISPLAYNI RESETLASH #destine RST 0 // PORT B, PIN 0 kodini qayta o'rnating

// DISPLAY MODE SELECT - buyruq/manzilni yoki ma'lumotlarni kiritishni tanlash uchun kiritish. #define DC 1 // DC - bu PORT B, PIN 1

// manfiy signstatic const unsigned char neg [4] = {0x30, 0x30, 0x30, 0x30} kodlari qatori;

// raqamlar qatori [0..9] statik 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}, // 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, 0x0E, 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:" so'zining kodlar qatori statik const imzosiz char TEMP_1 [165] = {0x02, 0x06, 0x06, 0xFE, 0xFE, 0xFE, 0x06, 0x06, 0x02, 0x00, 0xFC, 0xFE, 0xFE, 0x26, 0x26, 0x02 0x24, 0x00, 0xFC, 0xFE, 0xFE, 0x1C, 0x38, 0x70, 0x38, 0x1C, 0xFE, 0xFE, 0xFC, 0x00, 0xFC, 0xFE, 0xFE, 0x66, 0x66, 0x7x, 0x7, 0x7C, 0x7C 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:" so'zining kodlar majmuasi 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, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01};

#qo'shing

#qo'shing #qo'shing

// Portni ishga tushirish Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); // MOSI -ni o'rnatish, Chiqish sifatida SCK, SS, RST, DC, qolgan hamma PORTB | = (1 << RST); // RST pinini yuqori qilib qo'ying PORTB | = (1 << SS); // SS pinini baland qilib o'rnating - Displey DDRC = 0xFFu -ni o'chiring; // PORTC ning barcha pinlarini chiqish sifatida o'rnating. DDRC & = ~ (1 << 0); // PORTC ning birinchi pinini Kirish PORTC = 0x00u; // PORTC -ning barcha pinlarini pastroq qilib qo'ying, u o'chadi. }

// ADC ishga tushirilishi bekor ADC_init () {// ADC ni yoqish, namuna olish chastotasi = osc_freq/128 prescalerni maksimal qiymatiga, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // ADC uchun kuchlanish mos yozuvini tanlang // ADC Multiplexer Select Register (ADC0) yordamida nol kanalni sukut bo'yicha tanlang. }

// analogdan raqamliga o'tish natijasini o'qish funktsiyasi uint16_t get_LightLevel () {_delay_ms (10); // Kanal tanlangan ADCSRA olishini biroz kuting | = (1 << ADSC); // ADSC bitini sozlash orqali ADC konvertatsiyasini boshlang. ADSC ga 1 yozing (ADCSRA & (1 << ADSC)); // konvertatsiya tugashini kuting // ADSC yana 0 ga aylanadi, tsiklni doimiy ravishda ishga tushiring _delay_ms (10); qaytish (ADC); // 10 bitli natijani qaytarish}

// SPIni ishga tushirish void SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // SPIni yoqish, Master sifatida sozlash, SPC boshqaruvida Prescalerni Fosc/16 sifatida o'rnatish. ro'yxatdan o'tish}

// 16 bitli Timer1ni ishga tushirish, TIMER1_init () uzilishining uzilishi va o'zgaruvchanligi // taymerni oldindan hisoblagich = 256 va CTC rejimi bilan sozlash TCCR1B | = (1 << WGM12) | (1 << CS12); // hisoblagichni ishga tushirish TCNT1 = 0; // solishtirish qiymatini ishga tushirish - 1 sek OCR1A = 62500; // TIMSK1 taqqoslashni taqqoslashni yoqish | = (1 << OCIE1A); // global uzilishlarni yoqish sei (); }

// Displey yoqish void SPI_SS_Enable () {PORTB & = ~ (1 << SS); // SS pinini mantiqqa yoqish 0}

// Display SPID_SS_Disable void bekor qilish () {PORTB | = (1 << SS); // 1 -mantiqqa kirish uchun SS pinini o'chiring.

// SPI_Tranceiver displey buferiga ma'lumotlarni yuborish funktsiyasi (imzosiz char ma'lumoti) {SPDR = ma'lumotlar; // Buferga ma'lumotlarni yuklash vaqtida (! (SPSR & (1 << SPIF))); // Uzatish tugashini kuting}

// Boshlanish boshida ekranni asl holatiga qaytarish void Display_Reset () {PORTB & = ~ (1 << RST); _delay_ms (100); PORTB | = (1 << RST); }

// Buyruq yozish funktsiyasi void Display_Cmnd (imzosiz char ma'lumotlari) {PORTB & = ~ (1 << DC); // SPI_Tranceiver (ma'lumotlar) buyrug'i uchun DC pinini 0 mantiqqa aylantiring; // ma'lumotlar registri ma'lumotlarini yuborish PORTB | = (1 << DC); // ma'lumotlar uzatish uchun shahar pinini yuqori mantiqqa aylantiring}

// Display void Display_init () {Display_Reset (); // Display_Cmnd (0x21) displeyini qayta o'rnatish; // buyruqlar qo'shimcha rejimda o'rnatiladi Display_Cmnd (0xC0); // C0 yuborish orqali kuchlanishni o'rnating VOP = 5V Display_Cmnd (0x07); // haroratni sozlash. koeffitsienti 3 Display_Cmnd (0x13); // Voltaj Bias System Display_Cmnd qiymatining belgilangan qiymati (0x20); // asosiy rejimda o'rnatilgan buyruqlar Display_Cmnd (0x0C); // natijani normal rejimda ko'rsatish}

// Display_Clear () {PORTB | = (1 << DC)) bo'sh joyini o'chirish; // (pin k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); buyruq ishlashi uchun nol}

// ustun va qatorni LCD displeyda natijani ko'rsatiladigan joyga o'rnating Display_SetXY (imzosiz char x, belgisiz char y) {Display_Cmnd (0x80 | x); // ustun (0-83) Display_Cmnd (0x40 | y); // qator (0-5)}

// Void salbiy belgisini ko'rsatish funktsiyasi Display_Neg (unsigned char neg) {Display_SetXY (41, 0); // (int index = 0; index0) {SPDR = 0x30;} uchun ko'rsatiladigan manzil manzilini o'rnating // Ma'lumotni ekran buferiga yuklang (salbiy belgini ko'rsatish) {SPDR = 0x00;} // Ma'lumotni yuklash displey buferi (aniq salbiy belgi) while (! (SPSR & (1 << SPIF)))); // uzatish tugashini kuting _delay_ms (100); }}

// Off_Dig raqamli belgining bo'shligini o'chirish funktsiyasi (imzosiz char x, imzosiz char y) {Display_SetXY (x, y); // (int indeks = 0; indeks <8; indeks ++) {SPI_Tranceiver (0);} uchun displeydagi (yuqori qator) manzil manzilini o'rnating. y ++; Display_SetXY (x, y); // Displeydagi joylashuv manzilini o'rnating (pastki qator) (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Displey buferiga ma'lumotlarni yuklash (raqamli belgining pastki qismini tozalash)}

// Raqamli belgining bo'shligini ko'rsatish funktsiyasi Display_Dig (int dig, unsigned char x, unsigned char y) {Display_SetXY (x, y); // (int index = 0; index <16; indeks ++) {if (indeks == 8) {y ++; Display_SetXY (x, y);} // Ekrandagi pozitsiya manzilini o'rnating (pastki qator) SPI_Tranceiver (font6x8 [dig] [index]); // raqamlar ma'lumotlari kodlari qatorini _delay_ms (10) displey buferiga yuklash; }}

// DS18B20 belgisiz DS18B20_init () {DDRD | = (1 << 2) belgisini ishga tushirish; // PORTD ning PD2 pinini PORTD & = ~ (1 << 2) chiqishi sifatida o'rnating; // PD2 pinini past _delay_us (490) qilib o'rnating; // Boshlanish vaqti DDRD & = ~ (1 << 2); // PORTD ning PD2 pinini _delay_us (68) kirish sifatida o'rnating; // Vaqt OK_Flag = (PIND & (1 << 2)); // sensori pulsini olish _delay_us (422); OK_Flag -ni qaytarish; // qaytarish 0-ok sensori-vilkasi, 1-xato sensori-uzilgan}

// DS18B20 belgisiz baytni o'qish funktsiyasi read_18b20 () {unsigned char i, data = 0; uchun (i = 0; i <8; i ++) {DDRD | = (1 << 2); // PORTD ning PD2 pinini _delay_us (2) chiqishi sifatida o'rnating; // Vaqtni DDRD & = ~ (1 1; // Keyingi bit, agar (PIND & (1 << 2)) ma'lumotlar | = 0x80; // bitni baytga qo'yish _delay_us (62);} ma'lumotlarni qaytarish;}

// DS18B20 ga bayt yozish funktsiyasi yaroqsiz write_18b20 (imzosiz char ma'lumoti) {unsigned char i; uchun (i = 0; i <8; i ++) {DDRD | = (1 << 2); // PORTD ning PD2 pinini _delay_us (2) chiqishi sifatida o'rnating; // Vaqt, agar (ma'lumotlar & 0x01) DDRD & = ~ (1 << 2); // agar biz 1 yozmoqchi bo'lsak, boshqa qatorni bo'shating DDRD | = (1 1; // Keyingi bit _delay_us (62); // Vaqtni DDRD & = ~ (1 << 2); // _Delay_us (2);}} sifatida PORTD

// Read_Lux () {uint16_t tamponining yorug'lik darajasini bo'shligini ko'rsatish funktsiyasi; imzosiz int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // bitta raqam, ikki raqam, uch raqam, chorak raqamli bufer = get_LightLevel (); // analogdan raqamliga o'tish natijasini o'qing yorug'lik darajasi temp_int_0 = bufer % 10000/1000; // chorak raqamli temp_int_1 = bufer % 1000/100; // uch xonali temp_int_2 = bufer % 100/10; // ikki xonali temp_int_3 = bufer % 10; // bitta raqamli if (temp_int_0> 0) // agar natija chorak raqamli raqam bo'lsa {Display_Dig (temp_int_0, 32, 2); // yorug'lik sathining 1 raqamini ko'rsatish Display_Dig (temp_int_1, 41, 2); // Display_Dig yorug'lik darajasining 2 ta raqamini ko'rsatish (temp_int_2, 50, 2); // Display_Dig yorug'lik darajasining 3 ta raqamini ko'rsatish (temp_int_3, 59, 2); // yorug'lik darajasining 4 ta raqamini ko'rsatish} else {if (temp_int_1> 0) // agar natija uch xonali raqam bo'lsa {Off_Dig (32, 2); // Display_Dig raqamining 1 belgisini tozalash (temp_int_1, 41, 2); // yorug'lik darajasining 1 raqamini ko'rsatish Display_Dig (temp_int_2, 50, 2); // Display_Dig yorug'lik darajasining 2 ta raqamini ko'rsatish (temp_int_3, 59, 2); // yorug'lik darajasining 3 ta raqamini ko'rsatish} else {if (temp_int_2> 0) // agar natija ikki xonali raqam bo'lsa {Off_Dig (32, 2); // Off_Dig raqamining 1 belgisini tozalash (41, 2); // Display_Dig raqamining 2 belgisini tozalash (temp_int_2, 50, 2); // yorug'lik darajasining 1 raqamini ko'rsatish Display_Dig (temp_int_3, 59, 2); // yorug'lik darajasining 2 ta raqamini ko'rsatish} boshqa // agar natija bitta xonali raqam bo'lsa {Off_Dig (32, 2); // Off_Dig raqamining 1 belgisini tozalash (41, 2); // Off_Dig raqamining 2 belgisini tozalang (50, 2); // Display_Dig raqamining 3 belgisini tozalash (temp_int_3, 59, 2); // yorug'lik darajasining 1 raqamini ko'rsatish}}}}

// Haroratning bo'shligini ko'rsatish funktsiyasi Read_Temp () {unsigned int bufer; imzosiz int temp_int_1, temp_int_2, temp_int_3; // bitta raqamli, ikki raqamli, uch raqamli, chorak raqamli belgisiz char Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // DS18B20 write_18b20 (0xCC) ni ishga tushirish; // Sensor kodini tekshirish write_18b20 (0x44); // Harorat konvertatsiyasini boshlash _delay_ms (1000); // Sensor so'rovining kechikishi DS18B20_init (); // DS18B20 write_18b20 (0xCC) ni ishga tushirish; // Sensor kodini tekshirish write_18b20 (0xBE); // Sensor RAM Temp_L = read_18b20 () tarkibini o'qish buyrug'i; // Birinchi ikkita baytni o'qing Temp_H = read_18b20 (); temp_flag = 1; // 1-musbat harorat, 0-salbiy harorat // Agar salbiy haroratni oling (Temp_H & (1 << 3)) // Sign Bit tekshiruvi (agar bit o'rnatilgan bo'lsa-salbiy harorat) {sign int temp; temp_flag = 0; // bayroq 0 o'rnatilgan - salbiy harorat harorati = (Temp_H << 8) | Temp_L; temp = -temp; // Qo'shimcha kodni to'g'ridan -to'g'ri aylantirish Temp_L = temp; Temp_H = temp >> 8; } tampon = ((Temp_H 4); temp_int_1 = bufer % 1000/100; // uch xonali temp_int_2 = bufer % 100/10; // ikki xonali temp_int_3 = tampon % 10; // bitta raqamli

// Agar harorat manfiy harorat ko'rsatkichi bo'lsa, boshqasi aniq

if (temp_flag == 0) {Display_Neg (1);} else {Display_Neg (0);} if (temp_int_1> 0) // agar natija uch xonali son bo'lsa {Display_Dig (temp_int_1, 45, 0); // 1 raqamli haroratni ko'rsatish Display_Dig (temp_int_2, 54, 0); // 2 raqamli haroratni ko'rsatish Display_Dig (temp_int_3, 63, 0); // haroratning 3 ta raqamini ko'rsatish} else {if (temp_int_2> 0) // agar natija ikki xonali raqam bo'lsa {Off_Dig (45, 0); // Display_Dig raqamining 1 belgisini tozalash (temp_int_2, 54, 0); // 1 raqamli haroratni ko'rsatish Display_Dig (temp_int_3, 63, 0); // haroratning 2 raqamini ko'rsatish} else // agar natija bitta xonali raqam bo'lsa {Off_Dig (45, 0); // Off_Dig raqamining 1 belgisini tozalash (54, 0); // Display_Dig raqamining 2 belgisini tozalash (temp_int_3, 63, 0); // haroratning 1 raqamini ko'rsatish}}}

// Bu ISR taqqoslash qiymati (har 1 sekundda) bilan taymerlar soni mos kelganda ISR (TIMER1_COMPA_vect) {// o'qish, harorat va yorug'lik darajasini ko'rsatish Read_Temp (); Read_Lux (); }

// "TEMP" va "LUX" so'zlarini ko'rsatish funktsiyasi Display_label () {// Word "TEMP" Display_SetXY (0, 0); // (int indeks = 0; indeks <105; indeks ++) uchun ko'rsatiladigan (yuqoridagi qator) manzilni o'rnating {if (indeks == 40) {Display_SetXY (0, 1);} // Manzil manzilini o'rnating displeyda (pastki qatorda) if (indeks == 80) {Display_SetXY (72, 0);} // Ko'rsatilgan pozitsiyaning manzilini o'rnating (yuqoridagi qator) if (indeks == 92) {Display_SetXY (72, 1); } // Ko'rsatilgan manzil manzilini o'rnating (pastki qator) SPDR = TEMP_1 [indeks]; // (! (SPSR & (1 << SPIF))) displey buferiga kodlar massivi ma'lumotlarini yuklash; // uzatish tugashini kuting _delay_ms (10); } // "LUX" so'zi Display_SetXY (0, 2); // (int indeks = 0; indeks <60; indeks ++) uchun ko'rsatiladigan (yuqoridagi qator) manzil manzilini o'rnating {if (indeks == 30) {Display_SetXY (0, 3);} // Manzil manzilini o'rnating displeyda (pastki qatorda) SPDR = TEMP_2 [indeks]; // (! (SPSR & (1 << SPIF))) displey buferiga kodlar massivi ma'lumotlarini yuklash; // Uzatish tugashini kuting _delay_ms (10); }}

int main (bekor)

{Port_Init (); // Portni ishga tushirish ADC_init (); // ADCni ishga tushirish SPI_Init (); // SPIni ishga tushirish SPI_SS_Enable (); // DS18B20_init -ni yoqishni ko'rsatish (); // DS18B20 Display_init () ni ishga tushirish; // Displeyni ishga tushirish Display_Clear (); // Displeyni tozalash Display_label (); // "TEMP" va "LUX" so'zlarini ko'rsatish TIMER1_init (); // Taymer 1 boshlanishi. Monitoringni boshlang. Parametrlarni har soniyada olish. // Infinity loop (while) (1) {}}

3 -qadam: Mikroto'lqinli dasturiy ta'minotning yonib -o'chishi

HEX faylini mikrokontroller flesh xotirasiga yuklash. Videoni mikrokontroller flesh xotirasining yonishi haqida batafsil tavsif bilan tomosha qiling: mikrokontroller flesh xotirasi yonmoqda…

4 -qadam: Monitoring qurilmasi sxemasini yig'ish

Kuzatuv qurilmasi sxemasini yig'ish
Kuzatuv qurilmasi sxemasini yig'ish
Kuzatuv qurilmalari sxemasini yig'ish
Kuzatuv qurilmalari sxemasini yig'ish

Komponentlarni sxematik sxema bo'yicha ulang.

Quvvat ulang va u ishlaydi!

Tavsiya: