ዝርዝር ሁኔታ:

በ LCD ኖኪያ 5110: 4 ደረጃዎች ላይ በማሳየት የሙቀት እና የብርሃን ደረጃ መቆጣጠሪያ
በ LCD ኖኪያ 5110: 4 ደረጃዎች ላይ በማሳየት የሙቀት እና የብርሃን ደረጃ መቆጣጠሪያ

ቪዲዮ: በ LCD ኖኪያ 5110: 4 ደረጃዎች ላይ በማሳየት የሙቀት እና የብርሃን ደረጃ መቆጣጠሪያ

ቪዲዮ: በ LCD ኖኪያ 5110: 4 ደረጃዎች ላይ በማሳየት የሙቀት እና የብርሃን ደረጃ መቆጣጠሪያ
ቪዲዮ: የ LED አሞሌ ግራፍ Arduino UNO ኮድ || የአሩዲኖ ፕሮጀክት 2024, ሀምሌ
Anonim
Image
Image

ሰላም ለሁላችሁ!

በዚህ ክፍል ውስጥ የሙቀት እና የብርሃን ደረጃን ለመቆጣጠር ቀላል የኤሌክትሮኒክ መሣሪያ እንሰራለን። የእነዚህ መለኪያዎች ልኬቶች በ LCD ኖኪያ 5110 ላይ ይታያሉ። መሣሪያው በማይክሮ መቆጣጠሪያ AVR ATMEGA328P ላይ የተመሠረተ ነው። የክትትል መሳሪያው የብርሃን ደረጃን ለመለካት DS18B20 ዲጂታል ቴርሞሜትር እና ፎቶቶሪስተር አለው።

ደረጃ 1 የማብራሪያ ክፍሎች

መግለጫ አካላት
መግለጫ አካላት
መግለጫ አካላት
መግለጫ አካላት

የክትትል መሳሪያው መሠረታዊ ክፍሎች:

  • የማይክሮ መቆጣጠሪያ AVR «ATMEGA328P»
  • ሞኖክሮም ግራፊክ ኤልሲዲ “ኖኪያ 5110”
  • ሊተገበር የሚችል ጥራት 1-ሽቦ ዲጂታል ቴርሞሜትር «DS18B20»
  • ብርሃን ጥገኛ ተከላካይ
  • ሽቦዎች

የማይክሮ መቆጣጠሪያ AVR «ATMEGA328P»

የክትትል መሣሪያ የሚከተሉትን የማይክሮ መቆጣጠሪያ ተቆጣጣሪ ባህሪያትን ይጠቀማል።

  1. 16-ቢት ሰዓት ቆጣሪ/ቆጣሪ ማቋረጥ
  2. 8-ሰርጥ 10-ቢት ኤ.ዲ.ሲ
  3. ማስተር/ባሪያ SPI ተከታታይ በይነገጽ

ሞኖክሮም ግራፊክ ኤልሲዲ “ኖኪያ 5110”

ዝርዝር መግለጫዎች

  1. 48 x 84 ነጥብ LCD ማሳያ
  2. ተከታታይ አውቶቡስ በይነገጽ ከከፍተኛው ከፍተኛ ፍጥነት 4 ሜቢ/ሰ
  3. የውስጥ ተቆጣጣሪ/ነጂ «PCD8544»
  4. LED ተመለስ ብርሃን
  5. በቮልቴጅ 2.7-5 ቮልት ላይ አሂድ
  6. ዝቅተኛ የኃይል ፍጆታ; ለባትሪ ትግበራዎች ተስማሚ ነው
  7. የሙቀት መጠን ከ -25˚C እስከ +70˚C
  8. የድጋፍ ምልክት CMOS ግቤት

የኤልሲዲ አድራሻ አያያዝ (አድራሻ)

በኤልሲዲ ማሳያ (ዲዲኤምኤም) ላይ የሚታየው የአድራሻ አቀማመጥ ከ Y-Address 0 እስከ Y-Address 5 እና 84 አምዶች (የ X አድራሻ) ከ X- አድራሻ 0 እስከ X- 6 ረድፎችን (Y አድራሻ) የያዘ ማትሪክስ ነው። አድራሻ 83. ተጠቃሚ በኤልሲዲ ማሳያ ላይ የማሳያውን ቦታ ለመድረስ ከፈለገ በኤክስ አድራሻ እና በ Y- አድራሻ መካከል ያለውን ግንኙነት ማመልከት አለበት።

ለማሳየት የሚላከው ውሂብ 8 ቢት (1 ባይት) ሲሆን እንደ አቀባዊ መስመር ይደራጃል። በዚህ ሁኔታ ፣ ቢት ኤምኤስቢ ዝቅተኛ እና በሥዕሉ ላይ እንደሚታየው ቢት ኤልኤስቢ የላይኛው ይሆናል።

በፕሮግራም ሊሠራ የሚችል ጥራት 1-ሽቦ ዲጂታል ቴርሞሜትር DALLAS «DS18B20»

ዋና መለያ ጸባያት:

  1. ልዩ 1-Wire® በይነገጽ ለግንኙነት አንድ ወደብ ፒን ብቻ ይፈልጋል
  2. ከተዋሃደ የሙቀት ዳሳሽ እና EEPROM ጋር የቁጥሮች ቆጠራን ይቀንሱ
  3. የሚለካው የሙቀት መጠን ከ -55 ° ሴ እስከ +125 ° ሴ (-67 ° F እስከ +257 ° F)
  4. ± 0.5 ° ሴ ትክክለኛነት ከ -10 ° ሴ እስከ +85 ° ሴ
  5. በፕሮግራም ሊሠራ የሚችል ጥራት ከ 9 ቢት እስከ 12 ቢት
  6. ምንም የውጭ አካላት አያስፈልጉም
  7. ፓራሳይቲክ የኃይል ሁኔታ ለሥራ (2 ዲኤች እና ጂኤንዲ) 2 ፒን ብቻ ይፈልጋል
  8. ከብዙ መልቀቂያ ችሎታ ጋር የተከፋፈለ የሙቀት-ዳሳሽ ትግበራዎችን ያቃልላል
  9. እያንዳንዱ መሣሪያ በቦርድ ሮም ውስጥ የተከማቸ ልዩ 64-ቢት ተከታታይ ኮድ አለው
  10. ተጣጣፊ ተጠቃሚ-ሊገለጽ የማይችል (ኤን.ቪ.) የማንቂያ ቅንብሮች ከማንቂያ ፍለጋ ትዕዛዝ ጋር የሙቀት መጠን ያላቸውን መሣሪያዎች ከፕሮግራም መርሃግብር ገደቦች ጋር ይለያል

ማመልከቻዎች

  1. ቴርሞስታቲክ መቆጣጠሪያዎች
  2. የኢንዱስትሪ ስርዓቶች
  3. የሸማች ምርቶች
  4. ቴርሞሜትሮች
  5. Thermally ስሱ ስርዓቶች

ብርሃን ጥገኛ ተከላካይ

ብርሃን ጥገኛ ጥገኛ (LDR) ብርሃን በላዩ ላይ ሲወድቅ ተቃውሞውን የሚቀይር አስተላላፊ ነው።

በተለምዶ አንድ ኤልአርአይ በአጠቃላይ ጨለማ ላይ ከአንድ ሜጋኦኤምኤስ እስከ ሁለት ሜጋ ኦኤምኤስ ፣ ከአስር እስከ ሃያ ኪሎ ኦኤምኤስ በአሥር LUX ፣ ከሁለት እስከ አምስት ኪሎሆም በ 100 ሊትክስ ይኖረዋል። በሁለቱ አነፍናፊ እውቂያዎች መካከል ያለው ተቃውሞ በብርሃን ጥንካሬ ወይም በሁለት አነፍናፊ እውቂያዎች መካከል ያለው አመላካች ይጨምራል።

በቮልቴጅ ውስጥ ያለውን ለውጥ የመቋቋም ለውጥን ለመለወጥ የቮልቴጅ መከፋፈያ ወረዳውን ይጠቀሙ።

ደረጃ 2 የማይክሮ መቆጣጠሪያ የጽኑ ትዕዛዝ ኮድ

#ifndef F_CPU #F_CPU 16000000UL ን ይገልፃል / ለተቆጣጣሪ ክሪስታል ድግግሞሽ መንገር (16 ሜኸ AVR ATMega328P) #endif

// SPI INTERFACE #MOSI 3 ን ይገልፃል // MOSI እሱ ወደብ ቢ ፣ ፒን 3 #MISO 4 // MISO እሱ ወደብ ቢ ፣ ፒን 4 #ዲፊን SCK 5 // SCK እሱ ፖርት ቢ ፣ ፒን 5 #መግለፅ SS 2 // ኤስ ኤስ ፖርት ቢ ፣ ፒን 2 ነው

// ትርኢቱን ዳግም ያስጀምሩ #ጥራት RST 0 // ዳግም ያስይዙት ፖርት ቢ ፣ ፒን 0 ነው

// የማሳያ ሁነታ ምረጥ - የትእዛዝ/አድራሻ ወይም የውሂብ ግብዓት ለመምረጥ ግቤት። #ዲሲ 1 ዲሲን // ዲሲ እሱ ፖርት ቢ ፣ ፒን 1 ነው

// የኮዶች ድርድር አሉታዊ የምልክት ኮንስ ያልተፈረመ ቻር neg [4] = {0x30 ፣ 0x30 ፣ 0x30 ፣ 0x30};

// የኮዶች ድርድር አሃዞች [0..9] የማይንቀሳቀስ const ያልተፈረመ ቻር ቅርጸ ቁምፊ 6x8 [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 ፣ 0x06 ፣ 0x8C ፣ 0x00 ፣ 0x01 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x01} ፣ // 3 {0x3C ፣ 0x3E ፣ 0x7C ፣ 0x60 ፣ 0x60 ፣ 0xFC ፣ 0xFE ፣ 0xFC ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0x00 0x01 ፣ 0x03 ፣ 0x01} ፣ // 4 {0x1C ፣ 0x3E ፣ 0x3E ፣ 0x36 ፣ 0x36 ፣ 0xF6 ፣ 0xF6 ፣ 0xE4 ፣ 0x01 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x01 0xFE ፣ 0xFE ፣ 0x36 ፣ 0x36 ፣ 0xF6 ፣ 0xF6 ፣ 0xE4 ፣ 0x01 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x01} ፣ / 6 6 0 ፣ 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:" static const ያልተፈረመ ቻር 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 ፣ 0x7 ፣ 0x7 ፣ 0x7 0x00 ፣ 0x00 ፣ 0x00 ፣ 0x01 ፣ 0x03 ፣ 0x01 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0x01 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x01 ፣ 0x00 ፣ 0x01 ፣ 0x03 ፣ 0x0 ፣ 0x00 ፣ 0x00 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0C, 0x1E, 0x33, 0x33, 0x1E, 0x0C, 0x0C 0x9C ፣ 0x98 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0x01 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x01 ፣};

// ኮዶች የቃላት ድርድር “LUX:” const ያልተፈረመ ቻር 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 ፣ 0x0 ፣ 0x0 ፣ 0x0 ፣ 0x0 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x03 ፣ 0x01 ፣ 0x00 ፣ 0x01 ፣ 0x03 ፣ 0x03 ፣ 0x01 ፣ 0x00 ፣ 0x01 ፣ 0x03 ፣ 0x03 ፣ 0x01 ፣ 0x00 ፣ 0x01 ፣ 0x01};

#ያካትቱ

#አካትት #አካትት

// ወደብ ማስጀመር ማስቀረት Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC) ፤ // MOSI ን ያዘጋጁ ፣ SCK ፣ SS ፣ RST ፣ ዲሲ እንደ ውጤት ፣ ሁሉም ሌሎች ግብዓት PORTB | = (1 << RST) ፤ // የ RST ፒን እንደ ከፍተኛ PORTB | = (1 << SS) ያዘጋጁ ፤ // የኤስ ኤስ ፒን ፒን እንደ ከፍተኛ ያዘጋጁ - ማሳያ ነው DDRC = 0xFFu ን አሰናክል; // ሁሉንም የ PORTC ፒኖች እንደ ውፅዓት ያዘጋጁ። DDRC & = ~ (1 << 0); // የመጀመሪያውን የ PORTC ፒን እንደ ግብዓት PORTC = 0x00u ያደርገዋል ፤ // ሁሉንም የሚያሰናክል የ PORTC ዝቅተኛ ፒኖችን ያዘጋጁ። }

// የ ADC ማስጀመሪያ ባዶነት ADC_init () {// ኤዲሲን ያንቁ ፣ ናሙና freq = osc_freq/128 አዘጋጅ መጠባበቂያ ወደ ከፍተኛ እሴት ፣ 128 ADCSRA | = ((1 << ADEN)) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // ለኤ.ዲ.ሲ የቮልቴጅ ማመሳከሪያውን ይምረጡ // የኤዲሲ ባለብዙ ማሰራጫ ምዝግብ (ADC0) ን በመጠቀም በነባሪነት የሰርጥ ዜሮን ይምረጡ። }

// የአናሎግ ውጤትን ወደ ዲጂታል ለመለወጥ ተግባር uint16_t get_LightLevel () {_delay_ms (10); // ሰርጡ የተመረጠውን ADCSRA | = (1 << ADSC) እስኪያገኝ ድረስ ለተወሰነ ጊዜ ይጠብቁ። // ADSC ቢት በማቀናበር የ ADC ልወጣውን ያስጀምሩ። ለ ADSC 1 ይፃፉ (ADCSRA & (1 << ADSC)); // ልወጣ እስኪጠናቀቅ ድረስ ይጠብቁ // ADSC እስከዚያ እንደገና 0 ይሆናል ፣ loop ን ያለማቋረጥ አሂድ _delay_ms (10); መመለስ (ኤ.ዲ.ሲ.); // የ 10 ቢት ውጤቱን ይመልሱ}

// SPI ማስጀመሪያ ባዶነት SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0) ፤ // SPI ን ያንቁ ፣ እንደ መምህር ያዘጋጁ ፣ Prescaler ን እንደ Fosc/16 በ SPI ቁጥጥር ውስጥ ያዋቅሩ ይመዝገቡ}

// 16 ቢት Timer1 ን ያቋርጡ ፣ ያቋርጡ እና ተለዋዋጭ ባዶ ባዶ TIMER1_init () {// ሰዓት ቆጣሪ በ prescaler = 256 እና CTC ሁነታ TCCR1B | = (1 << WGM12) | (1 << CS12); // ማስጀመሪያ ቆጣሪ TCNT1 = 0; // የንፅፅር ዋጋን ያስጀምሩ - 1 ሰከንድ OCR1A = 62500; // ን ማነጻጸር ማቋረጥ TIMSK1 | = (1 << OCIE1A); // ዓለም አቀፍ ማቋረጫዎችን ያንቁ sei (); }

// ማሳያ ባዶ SPI_SS_Enable () {PORTB & = ~ (1 << SS) ን ያንቁ; // የኤስ ኤስ ፒን ወደ አመክንዮ 0} ያንቁ

// ማሳያ ባዶን SPI_SS_Disable () {PORTB | = (1 << SS); // የኤስ ኤስ ፒን ወደ አመክንዮ 1} ያሰናክሉ

// መረጃን ወደ የማሳያው ቋት ባዶ SPI_Tranceiver (ያልተፈረመ የቻር ውሂብ) {SPDR = ውሂብ; // (! (SPSR & (1 << SPIF))))) መረጃን ወደ ቋት ውስጥ ይጫኑ። // ስርጭቱ እስኪጠናቀቅ ድረስ ይጠብቁ}

// የመነሻ ባዶነት ማሳያ መጀመሪያ ላይ ማሳያውን ዳግም ያስጀምሩ () {PORTB & = ~ (1 << RST); _ መዘግየት_ms (100); PORTB | = (1 << RST); }

// የትእዛዝ ፃፍ ተግባር ባዶነት Display_Cmnd (ያልተፈረመ የቻር ውሂብ) {PORTB & = ~ (1 << DC); // ለትእዛዝ ሥራ SPI_Tranceiver (ውሂብ) የዲሲ ፒን ወደ ሎጂክ 0 ያድርጉ። // በውሂብ መመዝገቢያ ላይ መረጃ ላክ PORTB | = (1 << ዲሲ); // ለውሂብ አሠራር የዲሲ ፒን ወደ ሎጂክ ከፍ ያድርጉት}

// የማሳያ ባዶነት ማሳያ_ኢኒት () {Display_Reset (); // ማሳያውን ዳግም ያስጀምሩ Display_Cmnd (0x21); // የትእዛዝ ሁኔታ በተጨማሪ ሁነታ ሞድ Display_Cmnd (0xC0) ፤ // C0 ን በመላክ ቮልቴጅን ያዘጋጁ ማለት VOP = 5V Display_Cmnd (0x07) ማለት ነው። // የሙቀት መጠኑን ያዘጋጁ። Coefficient ወደ 3 Display_Cmnd (0x13); // የቮልታ አድልዎ ስርዓት Display_Cmnd (0x20) ዋጋ; // ትዕዛዙ በመሠረታዊ ሁናቴ ውስጥ ተዘጋጅቷል Display_Cmnd (0x0C); // የማሳያ ውጤት በመደበኛ ሁኔታ}

// የማሳያውን ባዶነት ያጽዱ Display_Clear () {PORTB | = (1 << DC); // ለ (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << ዲሲ) ፤ // የዲሲን ፒን ወደ አመክንዮ እንዲሰራ የዲሲ ፒን ወደ አመክንዮ ከፍ ያድርጉት። ዜሮ ለትእዛዝ አሠራር}

// አምዱን እና ረድፉን በ LCD ማሳያ ቦታ ላይ ያዋቅሩ ማሳያ ባዶነት Display_SetXY (ያልተፈረመ ቻር x ፣ ያልተፈረመ ቻር y) {Display_Cmnd (0x80 | x) ፤ // አምድ (0-83) Display_Cmnd (0x40 | y); // ረድፍ (0-5)}

// አሉታዊ ምልክት ባዶነትን ለማሳየት ተግባር Display_Neg (ያልተፈረመ ቻር ኔግ) {Display_SetXY (41, 0); // በማሳያው ላይ ያለውን የአድራሻ አድራሻ ለ (int index = 0; index0) {SPDR = 0x30;} // መረጃን በማሳያው ቋት ውስጥ ይጫኑ (አሉታዊ ምልክት ያሳዩ) ሌላ {SPDR = 0x00;} // መረጃን ወደ ውስጥ ይጫኑ የማሳያ ቋሚው (ግልጽ አሉታዊ ምልክት) እያለ (! (SPSR & (1 << SPIF)))); // ስርጭቱ እስኪጠናቀቅ ድረስ ይጠብቁ _delay_ms (100) ፤ }}

// Off_Dig (ያልተፈረመ ቻር x ፣ ያልተፈረመ char y) {Display_SetXY (x ፣ y); // ለ (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // መረጃን በማሳያው ቋት ውስጥ ያስቀምጡ (የዲጂታል ምልክቱን የላይኛው ክፍል ያፅዱ) y ++; Display_SetXY (x, y); // በማሳያው ላይ (የአድራሻ ረድፍ) አቀማመጥ አቀማመጥ (ለ ኢን ኢንዴክስ = 0 ፣ መረጃ ጠቋሚ <8 ፣ መረጃ ጠቋሚ ++) {SPI_Tranceiver (0) ፤} // መረጃን በማሳያው ቋት ውስጥ ይጫኑ (የዲጂታል ምልክት የታችኛው ክፍል ግልፅ)}

// የዲጂታል ምልክት ባዶነትን ለማሳየት ተግባር Display_Dig (int dig ፣ ያልተፈረመ ቻር x ፣ ያልተፈረመ ቻር y) {Display_SetXY (x, y) ፤ // በማሳያው ላይ ያለውን አቀማመጥ አድራሻ (የላይኛው ረድፍ) ለ (int index = 0 ፣ index) <16 ፤ መረጃ ጠቋሚ ++) {ከሆነ (መረጃ ጠቋሚ == 8) {y ++ ፤ Display_SetXY (x ፣ y) ፤} // በማሳያው ላይ ያለውን የአድራሻ አድራሻ (የታችኛው ረድፍ) SPI_Tranceiver (font6x8 [dig] [index]) ፤ // የማሳያ ቋት ውስጥ ያለ የቁጥር ውሂብ ድርደራ ኮዶች ጫን _delay_ms (10) ፤ }}

// DS18B20 ያልተፈረመ ቻር DS18B20_init () {DDRD | = (1 << 2); // የ PORTD PD2 ፒን እንደ ውፅዓት PORTD & = ~ (1 << 2) ያዘጋጁ ፤ // የ PD2 ፒን እንደ ዝቅተኛ _delay_us (490) ያዘጋጁ ፤ // የማስነሻ ጊዜ አሰጣጥ DDRD & = ~ (1 << 2); // የ PORTD PD2 ፒን እንደ ግብዓት _delay_us (68) ያዘጋጁ ፤ // የጊዜ አቆጣጠር OK_Flag = (PIND & (1 << 2)); // አነፍናፊ ምት _delay_us (422) ያግኙ ፤ OK_Flag ን መመለስ; // መመለስ 0-ok ዳሳሽ ተሰኪ ነው ፣ 1-የስህተት ዳሳሽ ነቅሏል}

// ተግባር ከ DS18B20 ያልተፈረመ ቻር ማንበብ_18b20 () {ያልተፈረመ ቻር i ፣ ውሂብ = 0; ለ (i = 0; i <8; i ++) {DDRD | = (1 << 2); // የ PORTD PD2 ፒን እንደ ውፅዓት _delay_us (2) ያዘጋጁ ፤ // የጊዜ ሰሌዳ DDRD & = ~ (1 1; // የሚቀጥለው ቢት ከሆነ (ፒንዲ እና (1 << 2)) ውሂብ | = 0x80; // ቢት በ _delay_us (62) ፤} ውሂብ ይመልሱ ፤}

// በባይት ወደ DS18B20 ባዶ መጻፍ_18b20 (ያልተፈረመ የቻር ውሂብ) {ያልተፈረመ ቻር i; ለ (i = 0; i <8; i ++) {DDRD | = (1 << 2); // የ PORTD PD2 ፒን እንደ ውፅዓት _delay_us (2) ያዘጋጁ ፤ // ጊዜን (ውሂብ እና 0x01) DDRD & = ~ (1 << 2); // 1 ለመጻፍ ከፈለግን ሌላውን መስመር DDRD | = (1 1; // ቀጣይ ቢት _delay_us (62)) ፣ PORTD እንደ ግብዓት _delay_us (2);}}

// የብርሃን ደረጃ ባዶነትን Read_Lux () {uint16_t ቋት ለማሳየት ተግባር) ያልተፈረመ int temp_int_1 ፣ temp_int_2 ፣ temp_int_3 ፣ temp_int_0; // ነጠላ አሃዞች ፣ ባለ ሁለት አሃዞች ፣ ባለሶስት አሃዞች ፣ የሩብ አሃዝ ቋት = get_LightLevel (); // የአናሎግ ውጤትን ወደ ዲጂታል መለወጥ የብርሃን ደረጃ temp_int_0 = ቋት % 10000 /1000 ያንብቡ። // ሩብ-አሃዝ temp_int_1 = ቋት % 1000/100; // ባለሶስት አሃዝ temp_int_2 = ቋት % 100/10; // ባለ ሁለት አሃዝ temp_int_3 = ቋት % 10; // ነጠላ-አሃዝ ከሆነ (temp_int_0> 0) // ውጤቱ ሩብ-አሃዝ ቁጥር ከሆነ {Display_Dig (temp_int_0, 32, 2); // ማሳያ 1 አሃዝ የብርሃን ደረጃ ማሳያ_ዲግ (temp_int_1 ፣ 41 ፣ 2) ፤ // 2 ዲጂት የብርሃን ደረጃ አሳይ ማሳያ_ዲግ (temp_int_2 ፣ 50 ፣ 2) ፤ // የብርሃን ደረጃ 3 አሃዝ ማሳያ_ዲግ (temp_int_3, 59, 2); // ባለ 4 አሃዝ የብርሃን ደረጃ አሳይ} ሌላ {ከሆነ (temp_int_1> 0) // ውጤቱ ባለሶስት አሃዝ ቁጥር ከሆነ {Off_Dig (32 ፣ 2) ፤ // የቁጥር 1 ማሳያ/ ዲግ (temp_int_1 ፣ 41 ፣ 2) ን ያፅዱ ፤ // ማሳያ 1 አሃዝ የብርሃን ደረጃ ማሳያ_ዲግ (temp_int_2 ፣ 50 ፣ 2) ፤ // 2 ዲጂት የብርሃን ደረጃ አሳይ ማሳያ_ዲግ (temp_int_3, 59, 2); // 3 ዲጂት የብርሃን ደረጃ አሳይ} ሌላ {ከሆነ (temp_int_2> 0) // ውጤቱ ባለ ሁለት አሃዝ ቁጥር ከሆነ {Off_Dig (32 ፣ 2) ፤ // 1 የቁጥር ምልክት Off_Dig ን (41 ፣ 2) ያፅዱ ፤ // የቁጥር 2 ምልክት/ ዲግ (temp_int_2 ፣ 50 ፣ 2) ን ያፅዱ ፤ // ማሳያ 1 አሃዝ የብርሃን ደረጃ ማሳያ_ዲግ (temp_int_3, 59, 2); // ባለ 2 አሃዝ የብርሃን ደረጃ አሳይ} ሌላ // ውጤቱም ባለአንድ አሃዝ ቁጥር ከሆነ {Off_Dig (32 ፣ 2) ፤ // የ 1 ቁጥርን ምልክት Off_Dig (41 ፣ 2) ያፅዱ ፤ // የ 2 ቁጥርን ምልክት Off_Dig (50 ፣ 2) ያፅዱ ፤ // የቁጥር 3 ምልክት/ ዲግ (temp_int_3, 59, 2) ን ያፅዱ; // 1 አሃዝ የብርሃን ደረጃ አሳይ}}}}

// የሙቀት ባዶነትን Read_Temp () {ያልተፈረመ int buffer; ያልተፈረመ int temp_int_1 ፣ temp_int_2 ፣ temp_int_3; // ነጠላ አሃዞች ፣ ባለ ሁለት አሃዞች ፣ ባለሶስት አሃዞች ፣ የሩብ አሃዞች ያልተፈረመ ቻር Temp_H ፣ Temp_L ፣ OK_Flag ፣ temp_flag; DS18B20_init (); // የ DS18B20 መፃፍ_18b20 (0xCC); // የዳሳሽ ኮድ ቼክ ጻፉ_18b20 (0x44); // የሙቀት ለውጥን ይጀምሩ _delay_ms (1000); // የዳሳሽ ምርጫ መዘግየት DS18B20_init (); // የ DS18B20 መፃፍ_18b20 (0xCC); // የአነፍናፊ ኮድ ቼክ write_18b20 (0xBE); // የአነፍናፊ ራም Temp_L = read_18b20 () ይዘቶችን እንዲያነቡ ትእዛዝ ይስጡ ፤ // የመጀመሪያውን ሁለት ባይት ያንብቡ Temp_H = read_18b20 (); temp_flag = 1; // 1-አዎንታዊ የሙቀት መጠን ፣ 0-አሉታዊ የሙቀት መጠን // (Temp_H & (1 << 3)) // አሉታዊ የሙቀት መጠን ያግኙ (ቢት ከተዋቀረ-አሉታዊ ሙቀት) {የተፈረመ int temp; temp_flag = 0; // ሰንደቅ ዓላማ 0 ተዘጋጅቷል - አሉታዊ የሙቀት መጠን temp = (Temp_H << 8) | Temp_L; ቴምፕ = -ሙከራ; // ተጨማሪውን ኮድ በቀጥታ Temp_L = temp ውስጥ ይለውጡ ፤ Temp_H = temp >> 8; } ቋት = ((Temp_H 4) ፤ temp_int_1 = ቋት % 1000/100 ፤ // ባለሶስት አሃዝ temp_int_2 = ቋት % 100/10 ፤ // ባለ ሁለት አሃዝ temp_int_3 = ቋት % 10 ፤ // ነጠላ አሃዝ

// የሙቀት መጠኑ የሙቀት ማሳያ አሉታዊ ምልክት ከሆነ ፣ ሌላ ግልፅ ያድርጉ

ከሆነ (temp_flag == 0) {Display_Neg (1) ፤} ሌላ {Display_Neg (0) ፤} ከሆነ (temp_int_1> 0) // ከሆነ ባለሶስት አሃዝ ቁጥር {Display_Dig (temp_int_1 ፣ 45 ፣ 0) ፤ // 1 ዲጂት የሙቀት መጠን ማሳያ_ዲግ (temp_int_2 ፣ 54 ፣ 0) ፤ // ማሳያ 2 ዲጂት የሙቀት መጠን ማሳያ_ዲግ (temp_int_3, 63, 0); // 3 ዲጂት የሙቀት መጠን አሳይ} ሌላ {ከሆነ (temp_int_2> 0) // ውጤቱ ባለ ሁለት አሃዝ ቁጥር ከሆነ {Off_Dig (45 ፣ 0) ፤ // የ 1 የቁጥር ምልክት አሳይ/ ዲግ (temp_int_2 ፣ 54 ፣ 0) ፤ // ማሳያ 1 አሃዝ የሙቀት መጠን ማሳያ_ዲግ (temp_int_3, 63, 0); // 2 ዲጂት የሙቀት መጠንን ያሳዩ} ሌላ // ውጤቱም ባለአንድ አሃዝ ቁጥር ከሆነ {Off_Dig (45 ፣ 0) ፤ // የ 1 ቁጥርን ምልክት Off_Dig (54 ፣ 0) ያፅዱ ፤ // የቁጥር 2 ምልክት/ ዲግ (temp_int_3, 63, 0) ን ያፅዱ; // 1 ዲጂት የሙቀት መጠን አሳይ}}}

// ይህ አይአይኤስ (ግጥሚያ) በንፅፅር እሴት (በየ 1 ሴኮንድ) ISR (TIMER1_COMPA_vect) {// ንባብ ፣ የሙቀት መጠንን እና የብርሃን ደረጃን ማንበብ Read_Temp () ፣ Read_Lux (); }

// “TEMP” እና “LUX” ባዶነት Display_label () {// Word “TEMP” Display_SetXY (0 ፣ 0) ቃላትን የማሳየት ተግባር ፤ // በማሳያው ላይ ያለውን የአድራሻ አድራሻ (እስከ ረድፍ) ለ (int index = 0; index <105; index ++) {if (index == 40) {Display_SetXY (0, 1) ፤} // የአቀማመጥን አድራሻ ያዘጋጁ በማሳያው ላይ (የታችኛው ረድፍ) ከሆነ (መረጃ ጠቋሚ == 80) {Display_SetXY (72 ፣ 0) ፤} // በማሳያው ላይ ያለውን አቀማመጥ አድራሻ (ረድፍ) ከሆነ (መረጃ ጠቋሚ == 92) {Display_SetXY (72 ፣ 1) ፤ } // በማሳያው ላይ ያለውን የአድራሻ አድራሻ ያዘጋጁ (የታችኛው ረድፍ) SPDR = TEMP_1 [መረጃ ጠቋሚ]; // (! (SPSR & (1 << SPIF)))))/ ኮዶችን የመጫን መረጃን በማሳያው ቋት ውስጥ ያደራጁ። // ስርጭቱ እስኪጠናቀቅ ድረስ ይጠብቁ _delay_ms (10) ፤ } // ቃል "LUX" Display_SetXY (0, 2); // በማሳያው ላይ ያለውን የአድራሻ አድራሻ (እስከ ረድፍ) ለ (int index = 0 ፣ መረጃ ጠቋሚ <60 ፣ መረጃ ጠቋሚ ++) {ከሆነ (መረጃ ጠቋሚ == 30) {Display_SetXY (0 ፣ 3) ፤} // የአቀማመጥን አድራሻ ያዘጋጁ በማሳያው ላይ (የታችኛው ረድፍ) SPDR = TEMP_2 [መረጃ ጠቋሚ]; // (! (SPSR & (1 << SPIF)))))/ ኮዶችን የመጫን መረጃን በማሳያው ቋት ውስጥ ያደራጁ። // ስርጭቱ እስኪጠናቀቅ ድረስ ይጠብቁ _delay_ms (10) ፤ }}

int main (ባዶ)

{Port_Init (); // ወደብ ማስጀመር ADC_init (); // የኤዲሲ አጀማመር SPI_Init (); // SPI ማስጀመሪያ SPI_SS_Enable (); // ማሳያ DS18B20_init () ን አንቃ; // የ DS18B20 Display_init () አጀማመር; // የማሳያ ማስነሻ ማሳያ_ክሌር (); // ግልፅ ማሳያ_ላቤል () አሳይ ፤ // ቃላትን “TEMP” እና “LUX” TIMER1_init () አሳይ ፤ // የሰዓት ቆጣሪ 1 አጀማመር። ክትትል ይጀምሩ። በየሰከንዱ መለኪያዎች ማግኘት። // Infinity loop (1) {}}

ደረጃ 3: ብልጭ ድርግም የሚል ሶፍትዌር ወደ ማይክሮ መቆጣጠሪያ

የ HEX ፋይልን ወደ ማይክሮ መቆጣጠሪያ ፍላሽ ማህደረ ትውስታ በመስቀል ላይ። ስለ ማይክሮ መቆጣጠሪያ ፍላሽ ማህደረ ትውስታ ማቃጠል ዝርዝር መግለጫ ቪዲዮውን ይመልከቱ -የማይክሮ መቆጣጠሪያ ፍላሽ ማህደረ ትውስታ ማቃጠል…

ደረጃ 4 - የመሣሪያ የወረዳ ስብሰባን መከታተል

የክትትል መሣሪያ የወረዳ ስብሰባ
የክትትል መሣሪያ የወረዳ ስብሰባ
የክትትል መሣሪያ የወረዳ ስብሰባ
የክትትል መሣሪያ የወረዳ ስብሰባ

በስዕላዊ ሥዕላዊ መግለጫ መሠረት አካላትን ያገናኙ።

ኃይልን ይሰኩ እና እየሰራ ነው!

የሚመከር: