Мазмуну:

Температура жана жарык деңгээлинин монитору LCD NOKIA 5110до көрсөтүү менен: 4 кадам
Температура жана жарык деңгээлинин монитору LCD NOKIA 5110до көрсөтүү менен: 4 кадам

Video: Температура жана жарык деңгээлинин монитору LCD NOKIA 5110до көрсөтүү менен: 4 кадам

Video: Температура жана жарык деңгээлинин монитору LCD NOKIA 5110до көрсөтүү менен: 4 кадам
Video: Использование термопары MAX6675 с LCD1602 и Arduino 2024, Июль
Anonim
Image
Image

Баарыңарга салам!

Бул бөлүмдө биз температураны жана жарык деңгээлин көзөмөлдөө үчүн жөнөкөй электрондук түзүлүштү жасайбыз. Бул параметрлердин өлчөөлөрү LCD NOKIA 5110до чагылдырылган. Аппарат AVR ATMEGA328P микроконтроллерине негизделген. Мониторинг түзмөгү DS18B20 санариптик термометр жана жарык деңгээлин өлчөө үчүн фоторезистор менен жабдылган.

1 -кадам: Description компоненттери

Description Компоненттери
Description Компоненттери
Description Компоненттери
Description Компоненттери

Мониторинг түзмөгүнүн негизги компоненттери:

  • AVR "ATMEGA328P" микроконтроллери
  • Монохромдук графикалык ЖК "NOKIA 5110"
  • Программалануучу токтом 1-зымдуу санарип термометр «DS18B20»
  • Жарыкка көз каранды резистор
  • Зымдар

AVR "ATMEGA328P" микроконтроллери

Мониторинг түзмөгү микроконтроллердин төмөнкү перифериялык өзгөчөлүктөрүн колдонот:

  1. 16-бит Таймер/Счетчиктин үзгүлтүгү
  2. 8-канал 10-бит ADC
  3. Мастер/кул SPI сериялык интерфейси

Монохромдук графикалык ЖК "NOKIA 5110"

Мүнөздөмөлөр:

  1. 48 x 84 чекиттүү LCD дисплей
  2. Serial Bus Interface максималдуу жогорку ылдамдыгы менен 4 Мбит/сек
  3. Ички контролер/айдоочу «PCD8544»
  4. LED Back-Light
  5. 2.7-5 Вольтто чуркаңыз
  6. Аз энергия керектөө; ал батареянын колдонмолору үчүн ылайыктуу
  7. Температура диапазону -25˚Cден +70˚Cке чейин
  8. Сигнал CMOS киргизүүнү колдоо

LCD дарегин иштетүү (адрестөө):

Жады дисплейде (DDRAM) көрсөтүлгөн эс тутумдун даректик түзүлүшү-бул 6 саптан (Y Дарек) Y-Дарек 0ден Y-Дарек 5ке чейин жана 84-мамычадан (X Дарек) X-Дарек 0ден Х- га чейин Матрица. Дарек 83. Колдонуучу ЖК дисплейде натыйжаны көрсөтүү абалына жетүүнү кааласа, X-Адрес менен Y-Адрестин ортосундагы байланышка кайрылышы керек.

Дисплейге жөнөтүлө турган маалыматтар 8 бит (1 байт) жана ал вертикалдуу сызык катары жайгашат; бул учурда, Bit MSB төмөн болот жана Bit LSB сүрөттө көрсөтүлгөндөй жогору болот.

Программалануучу токтом 1-зымдуу санарип термометр DALLAS «DS18B20»

Өзгөчөлүктөрү:

  1. Уникалдуу 1-Wire® интерфейси байланыш үчүн бир гана портту талап кылат
  2. Интегралдык температура сенсору жана EEPROM менен компоненттердин санын азайтыңыз
  3. -55 ° Cдан +125 ° Cге чейинки температураларды өлчөйт (-67 ° F дан +257 ° F)
  4. ± 0,5 ° C -10 ° Cдан +85 ° Cга чейин тактык
  5. 9 биттен 12 битке чейин программалоочу чечим
  6. Эч кандай тышкы компоненттер талап кылынбайт
  7. Паразитардык режим иштөө үчүн 2 пинди гана талап кылат (DQ жана GND)
  8. Multidrop жөндөмдүүлүгү менен бөлүштүрүлгөн температураны сезүүчү колдонмолорду жөнөкөйлөтөт
  9. Ар бир түзмөктө борттогу ROMдо сакталган уникалдуу 64 биттик сериялык код бар
  10. Колдонуучу тарабынан аныкталуучу ийкемдүү эмес (NV) Ойготкуч Издөө Командасы бар Ойготкуч Орнотуулары Программаланган Чектердин Тышында Температурасы Бар Түзмөктөрдү Аныктайт.

Колдонмолор:

  1. Термостатикалык башкаруу
  2. Өнөр жай системалары
  3. Керектөө продуктылары
  4. Термометрлер
  5. Жылуулукка сезгич системалар

Жарыкка көз каранды резистор

Жарыкка көз каранды болгон резистор (LDR) - бул жарыктын бетине түшкөндө каршылыгын өзгөртүүчү өзгөрткүч.

Адатта, LDR бир караңгыда бир мегаОмдон эки мегаОмго чейин болот, он LUXте ондон жыйырма килоООмго чейин, 100 LUXте экиден беш килого чейин. Сенсордун эки байланышынын каршылыгы жарыктын интенсивдүүлүгү менен төмөндөйт же сенсордун эки контактинин ортосундагы өткөрүмдүүлүк жогорулайт.

Каршылыктын өзгөрүүсүн чыңалуунун өзгөрүшүнө айландыруу үчүн чыңалуу бөлүүчү схеманы колдонуңуз.

2 -кадам: Микроконтроллердин жабдыктын коду

#ifndef F_CPU #аныктоо F_CPU 16000000UL // контроллердин кристаллдык жыштыгын айтуу (16 MHz AVR ATMega328P) #endif

// SPI INTERFACE аныктайт #MOSI 3ти аныктайт // MOSI бул ПОРТ В, ПИН 3 #MISO 4ту аныктоо // MISO бул ПОРТ В, ПИН 4 #SCK 5ти аныктоо // SCK бул ПОРТ В, ПИН 5 #София SS 2 // SS бул PORT B, PIN 2

// ЭСКЕРТҮҮНҮ КАЙРА КӨРСӨТҮҮ #аныктоо RST 0 // ПОРТ Б, ПИН 0, ЖӨНДӨҢҮЗ

// DISPLAY MODE SELECT - Киргизүү же буйрукту/даректи же маалыматтарды киргизүүнү тандоо. #define DC 1 // DC бул PORT B, PIN 1

// терс сигналдык статикалык const unsigned char neg коддору [4] = {0x30, 0x30, 0x30, 0x30};

// цифрлардын массивдери [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}, // 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, 0x03, 0x03 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:" деген сөздүн коддору статикалык const unsigned 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, 0x7, 0x7C, 0x7E, 0x7E 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01 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:" сөзүнүн массивдер коду 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};

#кошуу

#кошуу #кошуу

// Port Initializationvoid Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); // MOSI орнотуу, SCK, SS, RST, DC чыгаруу катары, башкалардын баары PORTB | = (1 << RST); // RST пинин бийик деп орнотуу PORTB | = (1 << SS); // SS пинин бийик деп коюу - Дисплей DDRC = 0xFFu өчүрүү; // PORTC бардык казыктарын чыгаруу катары коюңуз. DDRC & = ~ (1 << 0); // PORTCдин биринчи пинин PORTC = 0x00u киргизүү катары түзөт; // PORTC бардык казыктарын өчүрүп коюңуз. }

// ADC Initialization void ADC_init () {// ADCти иштетүү, тандап алуу freq = osc_freq/128 prescaler максималдуу мааниге, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // ADC үчүн чыңалуу шилтемесин тандаңыз // ADC Multiplexer Select регистрин (ADC0) колдонуу менен демейки боюнча нөлдү тандаңыз. }

// Санарипке аналогдун жыйынтыгын окуу функциясы uint16_t get_LightLevel () {_delay_ms (10); // Канал тандалганга чейин бир аз күтө туруңуз ADCSRA | = (1 << ADSC); // ADSC битин коюу менен ADC конверсиясын баштаңыз. ADSCке 1 жазуу (ADCSRA & (1 << ADSC)); // конверсиянын бүтүшүн күтөбүз // ADSC ага чейин кайра 0 болуп калат, циклди тынымсыз иштетүү _delay_ms (10); кайтуу (ADC); // 10 биттик жыйынтыкты кайтаруу}

// SPI баштоо жараксыздыгы SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // SPI иштетүү, Master катары коюу, SPC көзөмөлүндө Prescalerди Fosc/16 катары коюу катталуу}

// 16 биттик Timer1ди инициализациялоо, үзгүлтүккө учуроо жана боштук TIMER1_init () {// таймерди prescaler = 256 жана CTC режими менен орнотуу TCCR1B | = (1 << WGM12) | (1 << CS12); // эсептегичти инициализациялоо TCNT1 = 0; // инициализациялоо маанини салыштыруу - 1 сек OCR1A = 62500; // салыштыруу үзгүлтүгүн иштетүү TIMSK1 | = (1 << OCIE1A); // глобалдык үзгүлтүктөрдү иштетүү sei (); }

// Display Enable void void SPI_SS_Enable () {PORTB & = ~ (1 << SS); // логин үчүн SS пин иштетүү 0}

// Display Disable void SPID_SS_Disable () {PORTB | = (1 << SS); // Логикага SS пинди өчүрүү 1}

// Дисплей буферинин боштугуна SPI_Tranceiverге маалыматтарды жөнөтүү функциясы (кол коюлбаган char маалыматы) {SPDR = маалыматтар; // Буферге маалыматтарды жүктөп жатканда (! (SPSR & (1 << SPIF)))); // Өткөрүү аяктаганга чейин күтө туруңуз}

// Дисплейди баштапкы абалга келтирүү void Display_Reset () {PORTB & = ~ (1 << RST); _delay_ms (100); PORTB | = (1 << RST); }

// Command write function void Display_Cmnd (unsigned char data) {PORTB & = ~ (1 << DC); // SPI_Tranceiver (маалыматтар) буйругу үчүн 0 логикасына DC пин жасоо; // маалыматтарды реестрге жөнөтүү PORTB | = (1 << DC); // маалыматтын иштеши үчүн DC логинди жогорку логикага айландырыңыз}

// Display void Display_init () {Initialization of Display_init () {Display_Reset (); // Display_Cmnd дисплейин баштапкы абалга келтирүү (0x21); // буйрук кошумча режимде коюлган Display_Cmnd (0xC0); // C0 жөнөтүү менен чыңалууну коюңуз VOP = 5V Display_Cmnd (0x07); // температураны коюңуз. коэффициент 3 Display_Cmnd (0x13); // Voltage Bias System Display_Cmndдин мааниси коюлган (0x20); // негизги режимде коюлган команда Display_Cmnd (0x0C); // натыйжаны кадимки режимде көрсөтүү}

// Дисплей боштугун тазалоо Display_Clear () {PORTB | = (1 << DC); // маалыматтын иштеши үчүн DC пинди жогорку логикага айландырыңыз (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); // логикага DC пин орнотуу командалык операция үчүн нөл}

// мамычаны жана сапты ЖК дисплейде натыйжаны көрсөтүү абалына коюңуз Display_SetXY (белгисиз char x, unsigned char y) {Display_Cmnd (0x80 | x); // мамыча (0-83) Display_Cmnd (0x40 | y); // катар (0-5)}

// Терс белгини көрсөтпөө функциясы void Display_Neg (unsigned char neg) {Display_SetXY (41, 0); // (int index = 0; index0) үчүн дисплейдеги позициянын дарегин коюңуз {SPDR = 0x30;} // Дисплейдин буферине жүктөңүз (терс белгини көрсөтүңүз) else {SPDR = 0x00;} // Маалыматты жүктөө дисплейдин буфери (терс белгини тазалоо) while (! (SPSR & (1 << SPIF)))); // берүү бүткөнчө күтө туруңуз _delay_ms (100); }}

// Сандык белгини жок кылуу функциясы Off_Dig (unsigned char x, unsigned char y) {Display_SetXY (x, y); // Көрсөтүлгөн позициялардын дарегин коюңуз (жогорку катар) (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Дисплейдин буферине маалыматтарды жүктөө (санарип белгинин жогорку бөлүгүн тазалоо) y ++; Display_SetXY (x, y); // (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // дисплейдин буферине маалыматтарды жүктөө үчүн дисплейдеги (астыңкы катардагы) позициянын дарегин коюңуз (санарип белгинин астынкы бөлүгүн тазалаңыз)}

// Санариптик белгинин жараксыздыгын көрсөтүү функциясы Display_Dig (int dig, unsigned char x, unsigned char y) {Display_SetXY (x, y); // дисплейдеги позициялардын дарегин коюңуз (жогорку катар) (int index = 0; index <16; индекс ++) {if (index == 8) {y ++; Display_SetXY (x, y);} // Дисплейдеги позициянын дарегин коюңуз (астыңкы катар) SPI_Tranceiver (font6x8 [dig] [index]); // цифралык маалыматтардын коддор массивин _delay_ms дисплейинин буферине жүктөө (10); }}

// DS18B20 белгиси жок DS18B20_init () {DDRD | = (1 << 2) инициализациясы; // PORTDдин PD2 pinин PORTD & = ~ (1 << 2) катары коюңуз; // PD2 пинин төмөн _delay_us деп коюңуз (490); // Initialization Timing DDRD & = ~ (1 << 2); // PORTDдин PD2 пинин _delay_us киргизүү катары коюңуз (68); // Убакыт OK_Flag = (PIND & (1 << 2)); // сенсордун импульсун алуу _delay_us (422); кайтуу OK_Flag; // кайтаруу 0-ок сенсор сайгыч, 1 ката сенсор ажыратылган}

// DS18B20 белгисиз байты окуу функциясы read_18b20 () {unsigned char i, data = 0; for (i = 0; i <8; i ++) {DDRD | = (1 << 2); // PORTDнин PD2 пинин _delay_us (2) катары коюңуз; // Убакыт DDRD & = ~ (1 1; // Кийинки бит эгерде (PIND & (1 << 2)) маалымат | = 0x80; // битти _delay_us (62);} кайтаруу маалыматын коет;}

// DS18B20го байт жазуу функциясы жараксыз write_18b20 (кол тамгасы жок маалыматтар) {unsigned char i; for (i = 0; i <8; i ++) {DDRD | = (1 << 2); // PORTDнин PD2 пинин _delay_us (2) катары коюңуз; // Убакыт if (data & 0x01) DDRD & = ~ (1 << 2); // эгерде биз 1 жазгыбыз келсе, анда башка DDRD | = (1 1; // Кийинки бит _delay_us (62); // Timing DDRD & = ~ (1 << 2); // Set PD2 pin _Delay_us (2) катары PORTD;}}

// Жарыктын боштугун көрсөтүү функциясы 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; // бир орундуу if (temp_int_0> 0) // эгерде жыйынтык чейрек орундуу сан болсо {Display_Dig (temp_int_0, 32, 2); // Display_Dig жарык деңгээлинин 1 цифрасын көрсөтүү (temp_int_1, 41, 2); // дисплей жарыктын 2 цифралуу Display_Dig (temp_int_2, 50, 2); // дисплей жарыктын 3 цифралуу Display_Dig (temp_int_3, 59, 2); // жарыктын 4 цифрасын көрсөтүү} башка {эгер (temp_int_1> 0) // эгер натыйжа үч орундуу сан болсо {Off_Dig (32, 2); // санынын 1 белгисин тазалоо Display_Dig (temp_int_1, 41, 2); // дисплей жарыктын 1 цифрасын Display_Dig (temp_int_2, 50, 2); // дисплей жарыктын 2 цифралуу Display_Dig (temp_int_3, 59, 2); // жарык деңгээлинин 3 цифрасын көрсөтүү} башка {эгер (temp_int_2> 0) // эгер натыйжа эки орундуу сан болсо {Off_Dig (32, 2); // Off_Dig санынын 1 белгисин тазалоо (41, 2); // Display_Dig санынын 2 белгисин тазалоо (temp_int_2, 50, 2); // Display_Dig жарык деңгээлинин 1 цифрасын көрсөтүү (temp_int_3, 59, 2); // жарыктын 2 цифрасын көрсөтүү} башка // эгерде натыйжа бир орундуу сан болсо {Off_Dig (32, 2); // Off_Dig санынын 1 белгисин тазалоо (41, 2); // Off_Dig санынын 2 белгисин тазалоо (50, 2); // Display_Dig санынын 3 белгисин тазалоо (temp_int_3, 59, 2); // жарыктын 1 цифрасын көрсөтүү}}}}

// Температураны көрсөтпөө функциясы Read_Temp () {unsigned int buffer; белгисиз int temp_int_1, temp_int_2, temp_int_3; // бир сандар, эки цифралар, үч цифралар, чейрек цифралары белгисиз char Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // DS18B20 write_18b20 (0xCC) инициализациясы; // Сенсордук кодду текшерүү write_18b20 (0x44); // Температураны конверсиялоону баштоо _delay_ms (1000); // Сенсордук сурамжылоонун кечигүүсү DS18B20_init (); // DS18B20 write_18b20 (0xCC) инициализациясы; // Сенсордук кодду текшерүү write_18b20 (0xBE); // Sensor RAM Temp_L = read_18b20 () мазмунун окууга буйрук (); // Биринчи эки байтты окуу Temp_H = read_18b20 (); temp_flag = 1; // 1-позитивдүү температура, 0-терс температура // Эгерде терс температураны алуу temp_flag = 0; // желек 0 коюлган - терс температура темп = (Temp_H << 8) | Temp_L; temp = -temp; // Кошумча кодду түз Temp_L = tempге айландыруу; Temp_H = temp >> 8; } буфер = ((Temp_H 4); temp_int_1 = буфер % 1000/100; // үч орундуу temp_int_2 = буфер % 100/10; // эки орундуу temp_int_3 = буфер % 10; // бир орундуу

// Эгерде температура терс болсо, анда температуранын белгиси

if (temp_flag == 0) {Display_Neg (1);} else {Display_Neg (0);} if (temp_int_1> 0) // if result is three-digit number {Display_Dig (temp_int_1, 45, 0); // температуранын 1 цифрасын көрсөтүү Display_Dig (temp_int_2, 54, 0); // дисплей температуранын 2 цифрасы Display_Dig (temp_int_3, 63, 0); // температуранын 3 цифрасын көрсөтүү} башка {if (temp_int_2> 0) // if result is two-digit number {Off_Dig (45, 0); // 1 белгинин санын тазалоо Display_Dig (temp_int_2, 54, 0); // температуранын 1 цифрасын көрсөтүү Display_Dig (temp_int_3, 63, 0); // температуранын 2 цифрасын көрсөтүү} башка // эгерде натыйжа бир орундуу сан болсо {Off_Dig (45, 0); // Off_Dig санынын 1 белгисин тазалоо (54, 0); // Display_Dig санынын 2 белгисин тазалоо (temp_int_3, 63, 0); // температуранын 1 цифрасын көрсөтүү}}}

// Бул ISR салыштыруу мааниси менен таймердин санына дал келген сайын өчүрүлөт (ар бир 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);} // Позициянын дарегин коюңуз дисплейде (астынкы катар) if (index == 80) {Display_SetXY (72, 0);} // Дисплейдеги позициялардын дарегин коюңуз (өйдөкү сап) if (index == 92) {Display_SetXY (72, 1); } // Дисплейдеги позициянын дарегин коюңуз (төмөнкү сап) SPDR = TEMP_1 [индекс]; // Дисплей буферине коддор массивинин маалыматтарын жүктөө (! (SPSR & (1 << SPIF)))); // берүү бүткөнчө күтө туруңуз _delay_ms (10); } // Word "LUX" Display_SetXY (0, 2); // Көрсөтүлгөн позициялардын дарегин коюңуз (жогорку катар) (int index = 0; index <60; index ++) {if (index == 30) {Display_SetXY (0, 3);} // Позициянын дарегин коюу дисплейде (төмөнкү сапта) SPDR = TEMP_2 [индекс]; // Дисплей буферине коддор массивинин маалыматтарын жүктөө (! (SPSR & (1 << SPIF)))); // берүү бүткөнчө күтө туруңуз _delay_ms (10); }}

int main (боштук)

{Port_Init (); // Портту баштоо ADC_init (); // ADC баштоо SPI_Init (); // SPI баштоо SPI_SS_Enable (); // DS18B20_init иштетүүнү көрсөтүү (); // DS18B20 Display_initти инициализациялоо (); // Дисплейдин инициализациясы Display_Clear (); // Дисплей ачык Display_label (); // "TEMP" жана "LUX" TIMER1_init () сөздөрүн көрсөтүү; // Таймер1 баштоо. Мониторингди баштаңыз. Ар бир секундда параметрлерди алуу. // Чексиздик цикли, ал эми (1) {}}

3 -кадам: Микроконтроллерге Flashing Firmware

HEX файлын микроконтроллердин флеш -эсине жүктөө. Видеону микроконтроллердин флэш -эсинин толук сүрөттөлүшү менен көрүңүз: Микроконтроллердин флеш -эси күйүп жатат…

4 -кадам: Мониторинг түзмөгүнүн схемасы

Мониторинг түзмөгүнүн схемасы
Мониторинг түзмөгүнүн схемасы
Мониторинг түзмөгүнүн схемасы
Мониторинг түзмөгүнүн схемасы

Схемалык схемага ылайык компоненттерди туташтырыңыз.

Штепсель кубаты жана ал иштеп жатат!

Сунушталууда: