İçindekiler:

LCD Ekranlı Sıcaklık ve Işık Seviyesi Monitörü NOKIA 5110: 4 Adım
LCD Ekranlı Sıcaklık ve Işık Seviyesi Monitörü NOKIA 5110: 4 Adım

Video: LCD Ekranlı Sıcaklık ve Işık Seviyesi Monitörü NOKIA 5110: 4 Adım

Video: LCD Ekranlı Sıcaklık ve Işık Seviyesi Monitörü NOKIA 5110: 4 Adım
Video: Raspberry Pi Pico ile Nokia 5110 Ekran Kullanımı 2024, Kasım
Anonim
Image
Image

Herkese merhaba!

Bu bölümde sıcaklık ve ışık seviyesini izlemek için basit elektronik cihaz yapıyoruz. Bu parametrelerin ölçümleri LCD NOKIA 5110'da görüntülenir. Cihaz, AVR ATMEGA328P mikrodenetleyicisine dayanmaktadır. İzleme cihazı, ışık seviyesini ölçmek için DS18B20 dijital termometre ve fotodirenç ile donatılmıştır.

Adım 1: Tanım Bileşenleri

Tanım Bileşenler
Tanım Bileşenler
Tanım Bileşenler
Tanım Bileşenler

İzleme cihazının temel bileşenleri:

  • Mikrodenetleyici AVR «ATMEGA328P»
  • Tek Renkli Grafik LCD «NOKIA 5110»
  • Programlanabilir Çözünürlük 1-Wire Dijital Termometre «DS18B20»
  • Hafif Bağımlı Direnç
  • teller

Mikrodenetleyici AVR «ATMEGA328P»

İzleme cihazı, mikrodenetleyicinin aşağıdaki çevresel özelliklerini kullanır:

  1. 16-bit Zamanlayıcı/Sayaç kesmesi
  2. 8 kanallı 10 bit ADC
  3. Master/slave SPI seri arayüzü

Tek Renkli Grafik LCD «NOKIA 5110»

Özellikler:

  1. 48 x 84 Nokta LCD Ekran
  2. Maksimum yüksek hızlı 4 Mbits/S ile Seri Veri Yolu Arayüzü
  3. Dahili Kontrolör/Sürücü «PCD8544»
  4. LED arka ışığı
  5. 2,7-5 Volt Voltajda Çalıştırın
  6. Düşük güç tüketimi; pil uygulamaları için uygundur
  7. -25˚C ile +70˚C arası sıcaklık aralığı
  8. Destek Sinyali CMOS Girişi

LCD Adresinin İşlenmesi (Adresleme):

LCD Ekranda (DDRAM) gösterilen belleğin adres düzeni, Y-Adresi 0'dan Y-Adresi 5'e 6 satırdan (Y Adresi) ve X-Adres 0'dan X-'e 84 sütundan (X Adresi) oluşan Matrix'tir. Adres 83. Kullanıcı, LCD Ekranda sonucun görüntülendiği konuma erişmek isterse, X-Adresi ve Y-Adresi arasındaki ilişkiye başvurmalıdır.

Görüntüye gönderilecek olan veri 8 bit (1 Byte) olup, dikey çizgi olarak düzenlenecektir; bu durumda resimde görüldüğü gibi Bit MSB daha düşük ve Bit LSB üst olacaktır.

Programlanabilir Çözünürlük 1 Telli Dijital Termometre DALLAS «DS18B20»

Özellikleri:

  1. Benzersiz 1-Wire® Arayüzü İletişim için Yalnızca Bir Bağlantı Noktası Pimi Gerektirir
  2. Entegre Sıcaklık Sensörü ve EEPROM ile Bileşen Sayısını Azaltın
  3. -55°C ila +125°C (-67°F ila +257°F) arasındaki Sıcaklıkları ölçer
  4. ±0.5°C Doğruluk -10°C ile +85°C arası
  5. 9 Bit'ten 12 Bit'e Programlanabilir Çözünürlük
  6. Harici Bileşen Gerekmez
  7. Parazitik Güç Modu, Çalıştırmak için Sadece 2 Pin Gerektirir (DQ ve GND)
  8. Multidrop Özelliği ile Dağıtılmış Sıcaklık Algılama Uygulamalarını Basitleştirir
  9. Her Aygıtın Yerleşik ROM'da Depolanan Benzersiz bir 64-Bit Seri Kodu vardır
  10. Alarm Arama Komutlu Esnek Kullanıcı Tanımlı Kalıcı (NV) Alarm Ayarları Programlanmış Limitlerin Dışındaki Sıcaklıklara Sahip Cihazları Tanımlar

Uygulamalar:

  1. Termostatik Kontroller
  2. Endüstriyel Sistemler
  3. Tüketici ürünleri
  4. termometreler
  5. Isıya Duyarlı Sistemler

Hafif Bağımlı Direnç

Işığa Bağlı Direnç (LDR), yüzeyine ışık düştüğünde direncini değiştiren bir dönüştürücüdür.

Tipik olarak bir LDR, tam karanlıkta bir megaOhm ila iki megaOhm, on LUX'ta on ila yirmi kiloOhm, 100 LUX'ta iki ila beş kiloohm olacaktır. Işık şiddeti ile sensörün iki kontağı arasındaki direnç azalır veya sensörün iki kontağı arasındaki iletkenlik artar.

Dirençteki değişikliği voltajdaki değişikliğe dönüştürmek için voltaj bölücü devreyi kullanın.

Adım 2: Mikrodenetleyici Ürün Yazılımı Kodu

#ifndef F_CPU#define F_CPU 16000000UL // denetleyici kristal frekansını söylüyor (16 MHz AVR ATMega328P) #endif

// SPI INTERFACE TANIMLAR #define MOSI 3 // MOSI, PORT B, PIN 3 #define MISO 4 // MISO, PORT B, PIN 4 #define SCK 5 // SCK, PORT B, PIN 5 #define SS 2 // SS bu PORT B, PIN 2

// EKRANI SIFIRLA #define RST 0 // PORT B, PIN 0'ı SIFIRLA

//EKRAN MODU SEÇİMİ - Komut/adres veya veri girişini seçmek için giriş. #define DC 1 // DC, PORT B, PIN 1

// negatif işaret statik dizisini kodlar const işaretsiz karakter neg[4] = {0x30, 0x30, 0x30, 0x30};

// kodlar basamak dizisi [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, 0x26FE, 0x76, 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, 0xFEx1C7E,, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00}, // 7 { 0xCC, 0xFE, 0xFE, 0x36, 0x36, 0xFE, 0xFE, 0xCC, 0x01, 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 dizisi "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, 0x3C, 0xC, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 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, 0x00, 0xC, 0xF, 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01, };

// "LUX:" kelime dizisini kodlar 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, 0x03x01, 0x00, 0x01, 0x, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01 };

#Dahil etmek

#include #include

// Port Initializationvoid Port_Init() { DDRB = (1<<MOSI)|(1<<SCK)|(1<<SS)|(1<<RST)|(1<<DC);// MOSI ayarla, Çıkış olarak SCK, SS, RST, DC, diğer tüm girişler PORTB |= (1<<RST);// RST pinini yüksek olarak ayarla PORTB |= (1<<SS);// SS pinini yüksek olarak ayarla - Ekran DDRC=0xFFu'yu devre dışı bırakın; // PORTC'nin tüm pinlerini çıkış olarak ayarlayın. DDRC &= ~(1<<0);//PORTC'nin ilk pinini PORTC=0x00u Girişi olarak yapar; // PORTC'nin tüm pinlerini kapatacak şekilde düşük ayarlayın. }

// ADC Başlatma void ADC_init() { // ADC'yi etkinleştir, örnekleme freq=osc_freq/128 ön ölçekleyiciyi maksimum değere ayarla, 128 ADCSRA |= (1<<ADEN) | (1<<ADPS2)| (1<<ADPS1)| (1<<ADPS0); ADMUX = (1<<REFS0); // ADC için voltaj referansını seçin // ADC Çoklayıcı Seçim kaydını (ADC0) kullanarak varsayılan olarak kanal sıfırını seçin. }

// Analogdan dijitale dönüştürmenin sonucunu okuma işlevi uint16_t get_LightLevel() { _delay_ms(10); // Kanalın seçilmesi için biraz bekleyin ADCSRA |= (1<<ADSC); // ADSC bitini ayarlayarak ADC dönüşümünü başlatın. ADSC'ye 1 yazın while(ADCSRA & (1<<ADSC)); // dönüşümün tamamlanmasını bekle // ADSC o zamana kadar tekrar 0 olur, döngüyü sürekli çalıştır _delay_ms(10); dönüş (ADC); // 10 bitlik sonucu döndür }

// SPI Başlatma void SPI_Init() { SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);//SPI'yi Etkinleştir, Ana Olarak Ayarla, Ön Ölçekleyiciyi SPI kontrolünde Fosc/16 olarak ayarla Kayıt ol }

// 16 bit Timer1'i başlat, kesme ve değişken void TIMER1_init() { // ön ölçekleyici = 256 ve CTC modu ile zamanlayıcıyı ayarla TCCR1B |= (1 << WGM12)|(1 << CS12); // sayacı başlat TCNT1 = 0; // karşılaştırma değerini başlat - 1 sn OCR1A = 62500; // karşılaştırma kesmesini etkinleştir TIMSK1 |= (1 << OCIE1A); // global kesmeleri etkinleştir sei(); }

//Etkinleştir void SPI_SS_Enable() { PORTB &= ~(1<<SS); // SS pinini lojik 0'a etkinleştirin }

//Display Disable void SPI_SS_Disable() { PORTB |= (1<<SS); // SS pinini mantık 1'e devre dışı bırakın }

//Gösterim arabelleğine veri gönderme işlevi void SPI_Tranceiver (imzasız karakter verisi) { SPDR = veri; //Veriyi ara belleğe yükle while(!(SPSR & (1<<SPIF))); // İletim tamamlanana kadar bekleyin }

// Başlatma başlangıcında Ekranı Sıfırla void Display_Reset() { PORTB &= ~(1<<RST); _delay_ms(100); PORTB |= (1<<RST); }

//Komut yazma işlevi void Display_Cmnd(imzasız karakter verisi) { PORTB &= ~(1<<DC); // SPI_Tranceiver(veri) komut işlemi için DC pinini lojik 0 yap; // PORTB veri kaydına veri gönder |= (1<<DC); // veri işlemi için DC pinini mantığa yüksek yap }

// Display void'in başlatılması Display_init() { Display_Reset(); // ekranı sıfırla Display_Cmnd(0x21); // ekleme modunda komut seti Display_Cmnd(0xC0); // C0 göndererek voltajı ayarlayın VOP = 5V Display_Cmnd(0x07); // sıcaklığı ayarla. katsayı 3 Display_Cmnd(0x13); // Gerilim Önyargı Sisteminin değerini ayarla Display_Cmnd(0x20); // temel modda komut seti Display_Cmnd(0x0C); // sonucu normal modda göster }

// Display void'i temizleyin Display_Clear() { PORTB |= (1<<DC); // (int k=0; k<=503; k++){SPI_Tranceiver(0x00);} PORTB &= ~(1<<DC);// DC pini mantık yap komut işlemi için sıfır }

// sütunu ve satırı, LCD Ekranda sonucun görüntülendiği konuma ayarlayın void Display_SetXY(unsigned char x, unsigned char y) { Display_Cmnd(0x80|x); // sütun (0-83) Display_Cmnd(0x40|y); // satır (0-5) }

// Negatif işareti void gösterme işlevi Display_Neg(unsigned char neg) { Display_SetXY(41, 0); // (int index=0; index0) {SPDR = 0x30;} için ekrandaki konumun adresini ayarlayın //Ekran arabelleğine veri yükleyin (negatif işareti görüntüleyin) yoksa {SPDR = 0x00;} //Verileri şuraya yükleyin gösterim arabelleği (net negatif işaret) while(!(SPSR & (1<<SPIF))); //İletim tamamlanana kadar bekleyin _delay_ms(100); } }

// Sayısal işareti geçersiz kılma işlevi Off_Dig(unsigned char x, unsigned char y) { Display_SetXY(x, y); // (int index=0; index<8; index++) {SPI_Tranceiver(0);} için ekrandaki konumun adresini ayarlayın (üst satır) // Ekranın arabelleğine veri yükleyin (dijital işaretin açık üst kısmı) y++; Display_SetXY(x, y);// (int index=0; index<8; index++) için ekrandaki konumun (alt satır) adresini ayarlayın {SPI_Tranceiver(0);}// Ekranın arabelleğine veri yükleyin (dijital işaretin alt kısmını temizleyin) }

// Digital sign void görüntüleme fonksiyonu Display_Dig(int dig, unsigned char x, unsigned char y) { Display_SetXY(x, y);// (int index=0; index) için ekrandaki konumun (üst satır) adresini ayarlayın <16; index++) { if (index==8){y++;Display_SetXY(x,y);} // Ekrandaki konumun adresini ayarlayın (alt satır) SPI_Tranceiver(font6x8[dig][index]); // Kodlar dizisini, _delay_ms(10) görüntüsünün arabelleğine yükleyin; } }

// DS18B20 unsigned char başlatma DS18B20_init() { DDRD |= (1 << 2); // PORTD'nin PD2 pinini PORTD çıkışı olarak ayarlayın &= ~(1 << 2); // PD2 pinini düşük olarak ayarla _delay_us(490); // Başlatma Zamanlaması DDRD &= ~(1 << 2); // PORTD'nin PD2 pinini _delay_us(68) girişi olarak ayarlayın; // Zamanlama OK_Flag = (PIND & (1 << 2)); // sensör darbesini al _delay_us(422); OK_Flag'ı döndür; // dönüş 0-tamam sensörü takılı, 1-hatalı sensör fişten çekilir }

// DS18B20'den bayt okuma işlevi unsigned char read_18b20() { unsigned char i, data = 0; for(i = 0; i < 8; i++) { DDRD |= (1 << 2); // PORTD'nin PD2 pinini çıkış _delay_us(2) olarak ayarlayın; // Zamanlama DDRD &= ~(1 1; // Sonraki bit if(PIND & (1 << 2)) data |= 0x80; // biti bayta koy _delay_us(62); } veriyi döndür; }

// DS18B20'ye bayt yazma işlevi void write_18b20(unsigned char data) { unsigned char i; for(i = 0; i < 8; i++) { DDRD |= (1 << 2); // PORTD'nin PD2 pinini çıkış _delay_us(2) olarak ayarlayın; // Zamanlama if(veri & 0x01) DDRD &= ~(1 << 2); //1 yazmak istiyorsak satırını bırakın DDRD |= (1 1; // Sonraki bit _delay_us(62); // Zamanlama DDRD &= ~(1 << 2); // PD2 pinini ayarlayın Giriş olarak PORTD _delay_us(2); } }

// Işık seviyesini gösterme işlevi void Read_Lux() { uint16_t buffer; imzasız int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // tek basamaklı, çift basamaklı, üç basamaklı, çeyrek basamaklı arabellek = get_LightLevel(); // analogdan dijitale dönüştürme ışık seviyesinin sonucunu oku temp_int_0 = arabellek % 10000 / 1000; // çeyrek basamaklı temp_int_1 = arabellek % 1000 / 100; // üç basamaklı temp_int_2 = arabellek % 100 / 10; // çift haneli temp_int_3 = arabellek % 10; // tek basamaklı if(temp_int_0 > 0) // sonuç çeyrek basamaklı sayıysa { Display_Dig(temp_int_0, 32, 2); // ışık seviyesinin 1 hanesini göster Display_Dig(temp_int_1, 41, 2); // ışık seviyesinin 2 hanesini göster Display_Dig(temp_int_2, 50, 2); // ışık seviyesinin 3 hanesini göster Display_Dig(temp_int_3, 59, 2); // ışık seviyesinin 4 hanesini göster } else { if(temp_int_1 > 0) // sonuç üç basamaklı bir sayı ise { Off_Dig(32, 2); // sayının 1 işaretini temizle Display_Dig(temp_int_1, 41, 2); // ışık seviyesinin 1 hanesini göster Display_Dig(temp_int_2, 50, 2); // ışık seviyesinin 2 hanesini göster Display_Dig(temp_int_3, 59, 2); // ışık seviyesinin 3 hanesini göster } else { if(temp_int_2 > 0) // sonuç çift haneli ise { Off_Dig(32, 2); // sayının 1 işaretini sil Off_Dig(41, 2); // sayının 2 işaretini temizle Display_Dig(temp_int_2, 50, 2); // ışık seviyesinin 1 hanesini göster Display_Dig(temp_int_3, 59, 2); // ışık seviyesinin 2 hanesini göster } else // sonuç tek haneli ise { Off_Dig(32, 2); // sayının 1 işaretini sil Off_Dig(41, 2); // sayının 2 işaretini temizle Off_Dig(50, 2); // sayının 3 işaretini temizle Display_Dig(temp_int_3, 59, 2); // ışık seviyesinin 1 hanesini göster } } } }

// Sıcaklık gösterme işlevi void Read_Temp() { unsigned int buffer; imzasız int temp_int_1, temp_int_2, temp_int_3; // tek haneli, çift haneli, üç haneli, çeyrek haneli unsigned char Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init(); // DS18B20'nin başlatılması write_18b20(0xCC); // Sensör kodu kontrolü write_18b20(0x44); // Sıcaklık dönüşümünü başlat _delay_ms(1000); // Sensör yoklama gecikmesi DS18B20_init(); // DS18B20'nin başlatılması write_18b20(0xCC); // Sensör kodu kontrolü write_18b20(0xBE); // Sensör RAM'inin içeriğini okuma komutu Temp_L = read_18b20(); // İlk iki baytı oku Temp_H = read_18b20(); temp_flag = 1; // 1-pozitif sıcaklık, 0-negatif sıcaklık // Negatif sıcaklık alın if(Temp_H &(1 << 3)) // Sign Bit Check (bit ayarlanmışsa - negatif sıcaklık) { imzalı int temp; temp_flag = 0; // bayrak ayarlandı 0 - negatif sıcaklık sıcaklığı = (Temp_H <<8)|Temp_L; sıcaklık = -temp; // Ek kodu doğrudan Temp_L = temp; Temp_H = sıcaklık>> 8; } arabellek = ((Temp_H 4); temp_int_1 = arabellek % 1000 / 100; // üç haneli temp_int_2 = arabellek % 100 / 10; // çift haneli temp_int_3 = arabellek % 10; // tek haneli

// Sıcaklık negatif ise sıcaklık göstergesi, aksi takdirde silin

if(temp_flag == 0) {Display_Neg(1);} else {Display_Neg(0);} if(temp_int_1 > 0) // eğer sonuç üç basamaklı bir sayıysa { Display_Dig(temp_int_1, 45, 0); // sıcaklığın 1 hanesini göster Display_Dig(temp_int_2, 54, 0); // sıcaklığın 2 hanesini göster Display_Dig(temp_int_3, 63, 0); // sıcaklığın 3 hanesini göster } else { if(temp_int_2 > 0) // sonuç çift haneli ise { Off_Dig(45, 0); // sayının 1 işaretini temizle Display_Dig(temp_int_2, 54, 0); // sıcaklığın 1 hanesini göster Display_Dig(temp_int_3, 63, 0); // sıcaklığın 2 hanesini göster } else // sonuç tek haneli ise { Off_Dig(45, 0); // sayının 1 işaretini sil Off_Dig(54, 0); // sayının 2 işaretini temizle Display_Dig(temp_int_3, 63, 0); // sıcaklığın 1 hanesini göster } } }

// Bu ISR, zamanlayıcı sayımının karşılaştırma değeriyle (her 1 saniyede bir) eşleşmesi olduğunda tetiklenir ISR (TIMER1_COMPA_vect) { // Sıcaklık ve ışık seviyesinin okunması, görüntülenmesi Read_Temp(); Read_Lux(); }

// "TEMP" ve "LUX" sözcüklerini görüntüleme işlevi void Display_label() { // Word "TEMP" Display_SetXY(0, 0); // (int index=0; index<105; index++) { if (index==40){Display_SetXY(0, 1);} için ekrandaki konumun adresini ayarlayın (üst satır) // Konumun adresini ayarlayın ekranda (alt sıra) if (index==80){Display_SetXY(72, 0);} // Ekrandaki konumun adresini ayarlayın (üst satır) if (index==92){Display_SetXY(72, 1); } // Ekrandaki konumun adresini ayarlayın (alt satır) SPDR = TEMP_1[index]; // Kod dizisi verilerini ekranın arabelleğine yükleyin while(!(SPSR & (1<<SPIF))); // İletim tamamlanana kadar bekleyin _delay_ms(10); } // Kelime "LUX" Display_SetXY(0, 2); // (int index=0; index<60; index++) { if (index==30){Display_SetXY(0, 3);} için ekrandaki konumun adresini ayarlayın (üst satır) // Konumun adresini ayarlayın ekranda (alt sıra) SPDR = TEMP_2[index]; // Kod dizisi verilerini ekranın arabelleğine yükleyin while(!(SPSR & (1<<SPIF))); // İletim tamamlanana kadar bekleyin _delay_ms(10); } }

int ana(boşluk)

{ Port_Init(); // Port Başlatma ADC_init(); // ADC Başlatma SPI_Init(); // SPI Başlatma SPI_SS_Enable(); // Etkinleştir DS18B20_init(); // DS18B20'nin başlatılması Display_init(); // Ekran başlatma Display_Clear(); // Display clear Display_label(); // "TEMP" ve "LUX" sözcüklerini görüntüle TIMER1_init(); // Timer1 Başlatma. İzlemeye başlayın. Her saniyede bir parametre almak. // Sonsuz döngü while (1) { } }

Adım 3: Firmware'i Mikrodenetleyiciye Flashlama

HEX dosyasının mikrodenetleyici flash belleğine yüklenmesi. Mikrodenetleyici flash bellek yakma işleminin ayrıntılı bir açıklamasını içeren videoyu izleyin: Mikrodenetleyici flash bellek yakma…

Adım 4: Cihaz Devresi Montajını İzleme

İzleme Cihazı Devresi Montajı
İzleme Cihazı Devresi Montajı
İzleme Cihazı Devresi Montajı
İzleme Cihazı Devresi Montajı

Bileşenleri şematik diyagrama göre bağlayın.

Gücü takın ve çalışıyor!

Önerilen: