Мазмұны:

NOKIA 5110 СКД дисплейінде температура мен жарық деңгейінің мониторы: 4 қадам
NOKIA 5110 СКД дисплейінде температура мен жарық деңгейінің мониторы: 4 қадам

Бейне: NOKIA 5110 СКД дисплейінде температура мен жарық деңгейінің мониторы: 4 қадам

Бейне: NOKIA 5110 СКД дисплейінде температура мен жарық деңгейінің мониторы: 4 қадам
Бейне: Обзор Nokia 5110 - Ретро мобильный телефон! Mobile phone retro! 2024, Қараша
Anonim
Image
Image

Барлығына сәлем!

Бұл бөлімде біз температура мен жарық деңгейін бақылайтын қарапайым электронды құрылғы жасаймыз. Бұл параметрлердің өлшемдері LCD NOKIA 5110 экранында көрсетілген. Құрылғы AVR ATMEGA328P микроконтроллеріне негізделген. Бақылау құрылғысы DS18B20 сандық термометрімен және жарық деңгейін өлшеуге арналған фоторезистормен жабдықталған.

1 -қадам: Компоненттерді сипаттау

Сипаттама компоненттері
Сипаттама компоненттері
Сипаттама компоненттері
Сипаттама компоненттері

Бақылау құрылғысының негізгі компоненттері:

  • AVR «ATMEGA328P» микроконтроллері
  • Монохромды графикалық СКД «NOKIA 5110»
  • Бағдарламаланатын ажыратымдылығы 1 сымды «DS18B20» сандық термометрі
  • Жарыққа тәуелді резистор
  • Сымдар

AVR «ATMEGA328P» микроконтроллері

Бақылау құрылғысы микроконтроллердің келесі перифериялық мүмкіндіктерін пайдаланады:

  1. 16-разрядты таймер/есептегіштің үзілуі
  2. 8 каналды 10 биттік ADC
  3. Master/slave SPI сериялық интерфейсі

Монохромды графикалық СКД «NOKIA 5110»

Ерекшеліктер:

  1. 48 x 84 нүктелі СКД дисплейі
  2. Сериялық шина интерфейсі максималды жоғары жылдамдығы 4 Мбит/с
  3. Ішкі контроллер/драйвер «PCD8544»
  4. Жарықдиодты артқы жарық
  5. 2.7-5 Вольт кернеуде жұмыс жасаңыз
  6. Қуатты аз тұтыну; ол батареяларды қолдану үшін жарамды
  7. Температура диапазоны -25˚С -тан +70˚С -қа дейін
  8. CMOS сигналының сигналын қолдау

СКД адресін өңдеу (адрестеу):

СКД дисплейде (DDRAM) көрсетілетін жадының адрестік орналасуы-бұл матрица, ол 6 жолдан тұрады (Y мекенжайы)-Y мекенжайы 0-Y-адрес 5-84 бағаннан (X адрес)-X-адрес 0-X- Мекенжай 83. Егер пайдаланушы СКД дисплейінде нәтижені көрсету орнына қол жеткізгісі келсе, X-Мекен-жайы мен Y-мекен-жайы арасындағы байланысқа сілтеме жасауы керек.

Көрсетуге жіберілетін деректер 8 биттік (1 байт) және ол тік сызық ретінде орналасады; бұл жағдайда Bit MSB төмен болады, ал 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 МГц AVR ATMega328P) #endif

// SPI INTERFACE анықтайды #MOSI 3 анықтайды // MOSI бұл Порт В, PIN 3 #MISO 4 анықтаңыз // MISO бұл Порт В, PIN 4 #SCK 5 анықтаңыз // SCK бұл Порт В, PIN 5 #SS 2 анықтаңыз SS - бұл ПОРТ В, PIN 2

// ДИСПЛЕЙДІ ҚАЛПЫНА КЕЛТІРУ #destine RST 0 // B PORT, PIN 0 кодын қалпына келтіріңіз

// ДИПЛАМА РЕЖИМІН ТАҢДАУ - Команданы/адресті немесе деректерді енгізуді таңдау үшін енгізу. #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 0xFE, 0xFE, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 6 {0x04, 0x06, 0x0E, 0x06, 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:» сөзінің кодтар жиыны: TEMP_1 [165] = {0x02, 0x06, 0x06, 0xFE, 0xFE, 0xFE, 0x06, 0x06, 0x02, 0x00, 0xFC, 0xFE, 0xFE, 0x26, 0x02, 0x06, 0x02, 0x06. 0x24, 0x00, 0xFC, 0xFE, 0xFE, 0x1C, 0x38, 0x70, 0x38, 0x1C, 0xFE, 0xFE, 0xFC, 0x00, 0xFC, 0xFE, 0xFE, 0x66, 0x66, 0x7x, 0x7x, 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 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_Init () порттың инициализациясының күші жоқ () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); // MOSI орнату, SCK, SS, RST, DC шығыс ретінде, қалғандары PORTB | = (1 << RST) енгізеді; // RST түйреуішін жоғары етіп орнатыңыз DDRC = 0xFFu өшіру; // PORTC барлық түйреуіштерін шығыс ретінде орнатыңыз. DDRC & = ~ (1 << 0); // PORTC бірінші түйреуін PORTC = 0x00u енгізу ретінде жасайды; // Барлық PORTC түйреуіштерін төмен орнатыңыз, ол оны өшіреді. }

// ADC инициализациясының жарамсыздығы ADC_init () {// ADC қосу, жиілікті таңдау = osc_freq/128 алдын ала есептегішті максималды мәнге, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // ADC үшін кернеу сілтемесін таңдаңыз // ADC мультиплексоры таңдау регистрін (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, үзіліс және айнымалы void 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 PIN кодын логикаға қосу 0}

// Display Disable void void SPI_SS_Disable () {PORTB | = (1 << SS); // 1 -логикаға SS түйреуін өшіру

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

// Дисплейді бастапқы күйге қайтару void Display_Reset () {PORTB & = ~ (1 << RST); _кешіктіру (100); ПОРТБ | = (1 << RST); }

// Командалық жазу функциясы void Display_Cmnd (таңбасыз char деректері) {PORTB & = ~ (1 << DC); // SPI_Tranceiver (деректер) пәрмені үшін 0 логикасына DC түйреуін жасаңыз; // деректердің регистрі туралы деректерді жіберу PORTB | = (1 << DC); // Деректермен жұмыс істеу үшін тұрақты токты жоғары логикаға айналдырыңыз}

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

// Display_Clear () {PORTB | = (1 << DC) дисплейдегі бос орынды жою; // (пин k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); командалық жұмыс үшін нөл}

// баған мен жолды LCD дисплейінде нәтижені көрсету күйіне орнатыңыз Display_SetXY (белгісіз char x, белгісіз 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 (белгісіз char x, белгісіз 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 түйреуішін 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-жақсы сенсор штепсельде, 1-қате сенсоры ажыратылған}

// DS18B20 белгісіз char 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 (таңбасыз char деректері) {unsigned char i; for (i = 0; i <8; i ++) {DDRD | = (1 << 2); // PORTD PD2 түйреуішін _delay_us (2) шығысы ретінде орнатыңыз; // Уақыт, егер (деректер & 0x01) DDRD & = ~ (1 << 2); // егер біз 1 жазғымыз келсе, басқа жолды босатамыз DDRD | = (1 1; // Келесі бит _delay_us (62); // Уақыт DDRD & = ~ (1 << 2); // _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); // Display_Dig жарық деңгейінің 2 цифрын көрсету (temp_int_2, 50, 2); // Display_Dig жарық деңгейінің 3 цифрын көрсету (temp_int_3, 59, 2); // жарық деңгейінің 4 цифрын көрсетеді} else {if (temp_int_1> 0) // егер нәтиже үш таңбалы сан болса {Off_Dig (32, 2); // Display_Dig санының 1 белгісін өшіру (temp_int_1, 41, 2); // Display_Dig жарық деңгейінің 1 цифрын көрсету (temp_int_2, 50, 2); // Display_Dig жарық деңгейінің 2 цифрын көрсету (temp_int_3, 59, 2); // жарық деңгейінің 3 цифрын көрсетеді} else {if (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 цифрын көрсетеді} else // егер нәтиже бір таңбалы сан болса {Off_Dig (32, 2); // Off_Dig санының 1 белгісін өшіру (41, 2); // Off_Dig санының 2 белгісін өшіру (50, 2); // Display_Dig санының 3 белгісін тазалаңыз (temp_int_3, 59, 2); // жарық деңгейінің 1 цифрын көрсету}}}}

// Температураның void көрінетін функциясы Read_Temp () {unsigned int буфері; қол қойылмаған 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_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); // Display_Dig температурасының 1 цифрын көрсету (temp_int_2, 54, 0); // Display_Dig температурасының 2 цифрын көрсету (temp_int_3, 63, 0); // температураның 3 цифрын көрсетеді} else {if (temp_int_2> 0) // егер нәтиже екі таңбалы сан болса {Off_Dig (45, 0); // Display_Dig санының 1 белгісін өшіру (temp_int_2, 54, 0); // Display_Dig температурасының 1 цифрын көрсету (temp_int_3, 63, 0); // 2 цифрлық температураны көрсету} else // егер нәтиже бір таңбалы сан болса {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 (индекс == 80) {Display_SetXY (72, 0);} // Дисплейдегі позицияның адресін орнатыңыз (жоғары қатар) if (индекс == 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 Инициализация. Бақылауды бастаңыз. Әр секунд сайын параметрлерді алу. // Infinity циклы, ал (1) {}}

3 -қадам: микроконтроллерге микробағдарламаның жыпылықтауы

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

4 -қадам: Мониторинг құрылғысының схемасы

Бақылау қондырғысының схемасы
Бақылау қондырғысының схемасы
Бақылау қондырғысының схемасы
Бақылау қондырғысының схемасы

Схемалық схемаға сәйкес компоненттерді қосыңыз.

Қуат көзіне қосыңыз және ол жұмыс істейді!

Ұсынылған: