Аппараттық және бағдарламалық қамтамасыз етуді орнату

Max7219 және бірнеше сым. Жүгіртпе жол

Барлығы бұрыннан бері үйреніп қалған электрондық құрылғыэкран бар, ол арқылы адамға кез келген пайдалы ақпарат. MP3 ойнатқышы ойнатылатын жолдың атын көрсетеді, квадрокоптердің қашықтан басқару пульті ұшу телеметриясын көрсетеді, тіпті кір жуғыш машинажуудың соңына дейін уақытты көрсетеді, ал смартфонда жеке компьютердің бүкіл жұмыс үстелі бар! Сіздің келесі құрылғыңызға да кішкене дисплей қажет болуы мүмкін 🙂 Қарапайым электронды сағат жасап көрейік! Ал табло ретінде біз кәдімгі және арзан таңбалы сұйық кристалды дисплейді қолданамыз 1602. Суреттегідей: 16x2-ден басқа, 20x4 таңбалы дисплей (әрқайсысы 20 таңбадан тұратын төрт жол), сонымен қатар графикалық дисплей де танымал болып саналады. 128x64 пиксель рұқсатымен. Міне, олар суреттерде:

1. 1602 таңбалы СКД дисплейін қосу

1602 дисплейінде 16 түйреуіш бар. Әдетте олар солдан оңға қарай нөмірленеді, егер сіз оны суреттегідей қарасаңыз. Кейде қорытындыларға қол қойылады, мысалы: DB0, DB1, EN, т.б. Кейде олар тек шығыс нөмірін көрсетеді. Кез келген жағдайда түйреуіштер тізімі әрқашан бірдей: 1 - «GND», жер (қуат минус); 2 - «Vcc», +5 В қоректену; 3 - «VEE», контраст; 4 - «RS», регистр таңдау;5 - "R / W", деректерді беру бағыты (жазу / оқу); 6 - "EN", синхрондау; 7-14 - "DB0", "DB1", .., "DB7" - деректер шинасы; 15 - артқы жарық аноды (+5В); 16 - катодты артқы жарық (жер). VEE, RS жолдары және төрт деректер желісі DB4, DB5, DB6, DB7 контроллердің сандық шығыстарына қосылған. Біз «R / W» сызығын контроллердің «жеріне» қосамыз (өйткені бізге тек дисплей жадына жазу функциясы қажет). Біз әзірге артқы жарықты қоспаймыз, оны өзіңіз оңай анықтай аласыз деп ойлаймын 🙂 Дисплейді қосу схемасы Arduino Uno
Орналасу көрінісі
Кездейсоқ, сонымен қатар табақша түрінде:
СКД дисплей 1602 1 2 4 6 11 12 13 14 15 16
Arduino Uno GND +5 В 4 5 6 7 8 9 +5 В GND

2. «Сәлем, әлем!» бағдарламасы.

Әртүрлі өлшемдер мен типтегі СКД дисплейлерімен жұмыс істеу үшін Arduino IDE редакторында арнайы кітапхана бар сұйық кристал. Кітапхананы қосу үшін бағдарламамыздың бірінші жолы ретінде келесі өрнекті жазамыз: #include Әрі қарай, дисплейді қосу үшін қандай Arduino түйреуіштерін пайдаланғанымызды көрсетуіміз керек. Модульді инициализациялау кезінде біз бұл ақпаратты көрсетеміз: LiquidCrystal lcd(4, 5, 6, 7, 8, 9); Мұнда алғашқы екі аргумент RS және EN түйреуіштері, ал қалған төртеуі DB4-DB7 деректер шинасы. сызықтар. Содан кейін «бастау» пәрменін пайдаланып дисплей өлшемін көрсетіңіз: lcd.begin(16, 2); Еске сала кетейік, біздің дисплейде әрқайсысы 16 таңбадан тұратын екі жол бар. Ақырында, мәтінді басып шығару үшін бізге қарапайым «басып шығару» функциясы қажет. Осы белгілі фразаның шығысы келесідей болады: lcd.print("Сәлем, әлем!"); Толық бағдарлама келесідей болады: #include LiquidCrystal lcd(4, 5, 6, 7, 8, 9); void setup()( lcd.begin(16, 2); lcd.print("Сәлем, әлем!"); ) void loop()( ) Оны Arduino Uno-ға жүктеп, дисплейде не болып жатқанын көріңіз. Үш негізгі жағдай болуы мүмкін 🙂 1) Дисплейде «Hello, world!» деген жазу пайда болады. Осылайша сіз бәрін дұрыс қостыңыз және контраст қандай да бір түрде керемет түрде бастапқыда дұрыс конфигурацияланған болып шықты. Біз қуанып, келесі тарауға көшеміз. 2) Бейнебетте көрсетіледі тұтас сызыққара төртбұрыштар - контрастты реттеу қажет! Сондықтан біз тізбекке тұтқасы бар потенциометрді қостық. Дисплейде анық жазу пайда болғанша біз оны бір шетінен екіншісіне бұрамыз. 3) Қара түсті төртбұрыштардың екі қатары. Қосылу кезінде сіз бірдеңені бұзған шығарсыз. Барлық сымдарды үш рет тексеріңіз. Егер сіз қате таппасаңыз - мысықтан тексеруді сұраңыз!

3. Сағатты бағдарламалаңыз

Енді дисплей дәл жұмыс істеп тұр, қарапайым құрылғымызды нағыз электронды сағатқа айналдыруға тырысайық. Назар аударыңыз!Уақытты көрсету үшін бізге «Уақыт» кітапханасы қажет. Егер ол әлі орнатылмаған болса, мұрағатты сілтемеден жүктеп алуға болады. Оны енгізейік: #include Содан кейін біз «setTime» функциясы арқылы ағымдағы күн мен уақытты орнатамыз: setTime(23, 59, 59, 12, 31, 2015); Мұнда бәрі түсінікті: сағат, минут, секунд, ай, күн, жыл. Күнді көрсету үшін біз бірқатар функцияларды қолданамыз:
  • year() - бізге жылды қайтарады;
  • month() - ай;
  • day() - күн;
  • сағат() - сағат;
  • minute() - минутты қайтарады;
  • second() - екінші.
Енді осы жайтқа назар аударайық. Егер әдеттегі күн жазбасындағы таңбалар санын санасақ: “31.12.2015 23:59:59”, біз 19 аламыз. Ал бізде тек 16 ғана! Дегенмен, ол бір қатарға сәйкес келмейді. Тағы бір мәселені шешуге болады пайдалы қасиеті- «Cursor орнату». Бұл функция курсорды қажетті орынға қояды. Мысалы: lcd.setCursor(0,1); Курсорды екінші жолдың басына орнатады. Курсор – мәтінді шығару келесі «басып шығару» пәрменімен басталатын таңбаның орны. Бұл функцияны бірінші жолда күнді, екіншісінде уақытты көрсету үшін қолданайық. Күн мен уақытты шығару арқылы бәрі түсінікті. Кәдімгі нәрселер қалды. Мысалы, дисплейді әр толтырғаннан кейін біз оны «clear()» функциясымен тазалаймыз: lcd.clear(); Сондай-ақ деректерді секундына бір реттен артық көрсетудің мағынасы жоқ, сондықтан екі итерация арасында 1000 миллисекундты кідіртейік. Сонымен, бәрін біріктіріп, біз келесі бағдарламаны аламыз: #include #қосу LiquidCrystal lcd(4, 5, 6, 7, 8, 9); void setup()( lcd.begin(16, 2); setTime(7,0,0,1,10,2015); // 7:00, 10 қаңтар, 2015 ) void loop()( lcd.clear(); lcd .print(күн()); lcd.print("."); lcd.print(ай()); lcd.print("."); lcd.print(жыл()); lcd.setCursor(0 , 1); lcd.print(сағат()); lcd.print(":"); lcd.print(минут()); lcd.print(":"); lcd.print(секунд()); кідіріс ( 1000); ) Эскизді Arduino Uno-ға жүктеңіз және сағаттың қозғалысын бақылаңыз! 🙂 Алынған білімді бекіту үшін мен сағатымызды толыққанды оятқышқа қосуды ұсынамын. Сізге бірнеше түйме мен дыбыстық сигнал қоссаңыз болғаны 🙂

Сәлем Жігіттер. Бүгін біз MAX7219 және Arduino LED модульдеріндегі жұмыс сызығын қысқартамыз. Тапсырма өте қарапайым және бізден электроника және бағдарламалау саласында үлкен білімнің болуын талап етпейді. Бастау үшін мен жарықдиодты матрицаның құрылғысы туралы аздаған теорияны, оның қосылу принципін зерттеуді және біз мақаланың бүкіл кезеңінде ұмтылатын нәтиженің бейнесін көруді ұсынамын.

Жарықдиодты матрица қарапайым кескіндерді, әріптерді және сандарды көрсету үшін қолданылатын графикалық индикатор болып табылады. Мен матрицалық индикаторлар құрылғысымен егжей-тегжейлі жұмыс істеу міндетін қойған жоқпын, алайда, шын мәнінде, матрица 8x8 жарықдиодты шамдардан тұратынын атап өткен жөн. Шын мәнінде, бәрі динамикалық көрсеткішке түседі. Осыған сүйене отырып, бірнеше матрицаларды біріктіру оңай жұмыс емес екені анық. Әрбір жаңа жол немесе матрица бағаны үшін жаңасын қосу керек ауысым тіркелімісымдармен және резисторлармен және жақсы мағынада ULN2003 чипімен бірге.

Бақытымызға орай, инженерлер әртүрлі көрсеткіштерді басқаруға арналған мамандандырылған микросхемалар ұзақ уақыт бойы әзірледі. Бұл мақалада біз MAX7219 чипі бар матрицалық модульді қарастырамыз. Кейінірек белгілі болатындай, мұндай модульмен жұмыс істеу бір ғанибет.

MAX7219 чипі бар жарықдиодты матрицалық модуль

Модуль - бұл микросхемасы бар тақта, оған қажетті бау және шын мәнінде матрицалық индикатор. Әдетте индикатор тақтаға дәнекерленбейді, бірақ қосқышқа салынған. Бұл модульдер тобын алдымен бұрандалардың көмегімен қандай да бір бетке бекітуге, содан кейін оларға матрицаларды енгізуге болатындай етіп жасалады.

Модульдің әр жағында бес түйреуіш бар. Бір жағынан, деректер модульге түседі, екінші жағынан, деректер модульден шығып, келесіге беріледі. Бұл y матрицаларын тізбектеуге мүмкіндік береді.

Кіріс қосқышы / шығыс қосқышы:

  • VCC, GND - қуат;
  • DIN – мәліметтерді енгізу;
  • CS - модульді таңдау (чип таңдау);
  • CLK – сағат импульсі.

Модуль 5 вольт кернеуде жұмыс істейді.

Max72xxPanel кітапханасын пайдаланып пиксельді шығару

MAX7219 чипін басқару үшін біз кітапхананы қолданамыз Max72xxPanel. Сіз оны мақаланың соңындағы сілтемелерден жүктей аласыз.

Кітапхананы орнатып, x=3 және y=4 координаталары бар бір ғана нүктені көрсететін шағын кодты жазайық. Нүкте 600 миллисекундпен жыпылықтайды.

#қосу #қосу #қосу int pinCS = 10; int numberOf HorizontalDisplays = 1; // көлденең матрицалар саны int numberOfVerticalDisplays = 1; // матрицалардың тік саны Max72xxPanel матрицасы = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); void setup() ( matrix.setIntensity(4); // жарықтық 0-ден 15-ке дейін ) void loop() ( matrix.drawPixel(3, 4, HIGH); // (3,4) матрицадағы пикселді жарықтандыру. write (); // барлық пикселдерді матрицаға сызыңыз delay(300); матрица. drawPixel(3, 4, LOW); // пиксельдік матрицаны босатыңыз. write(); delay(300); )

Бұрын айтылғандай, MAX7219 чипі бар матрицалық модульдерді оңай біріктіруге болады. Дәл осы мақсатта бағдарламаның басында біз көлденең және тік матрицалардың санын орнатамыз. Бұл жағдайда бір матрица пайдаланылады, сондықтан бұл параметрлердің екеуі де 1-ге тең болады.

Пиксельдерді қосқаннан кейін және өшіргеннен кейін drawPixel, функцияны шақыру керек жазу. Жазу функциясынсыз пикселдер матрицада жанбайды!

Енді матрицадағы смайликті көрсететін кодты жазайық. Біз сегіз байт массивін пайдаланып күлімсіреуді шифрлаймыз. Массивтің әрбір байты матрица жолына, ал байттағы әрбір бит жолдағы нүктеге жауапты болады.

#қосу #қосу #қосу int pinCS = 10; int numberOf HorizontalDisplays = 1; // көлденең матрицалар саны int numberOfVerticalDisplays = 1; // матрицалардың тік саны Max72xxPanel матрицасы = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); const байт деректері = ( 0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10100101, 0b10011001, 0b01000010, 0b001); void setup() ( matrix.setIntensity(7); // жарықтық 0-ден 15-ке дейін matrix.fillScreen(LOW); // (int y = 0; y) үшін матрицаны тазалау< 8; y++) { for (int x = 0; x < 8; x++) { // зажигаем x-й пиксель в y-й строке matrix.drawPixel(x, y, data[y] & (1<

Ескерту. Max72xxPanel кітапханасының функциясы бар SetRotation, ол матрицадағы кескіннің бағытын анықтайды. Мысалы, смайликті 90 градусқа бұрғымыз келсе, функцияны шақырғаннан кейін бірден қажет болады. SetIntensityқоңырау шалу SetRotationтиісті дәлелдермен:

matrix.setRotation(0, 1);

бірінші параметр матрицаның индексі, біздің жағдайда ол нөлге тең; екінші параметр - 90 градусқа бұрылыстар саны.

Adafruit-GFX-Library көмегімен мәтінді шығару

Сол сияқты матрицада кез келген басқа символды, мысалы, әріпті көрсетуге болады. Бірақ ағылшын алфавитінің кез келген әрпін көрсету үшін бағдарламада 26 сегіз байттық массивтерді анықтауымыз керек! Бұл өте өкінішті, және, әрине, мұны бізден бұрын біреу жасаған.

Танымал Adafruit-GFX-Library-де графикамен және мәтінмен жұмыс істеу функцияларынан басқа, бас және кіші регистрдегі латын әріптерінің базасы, сондай-ақ барлық тыныс белгілері мен басқа да қызметтік таңбалар бар. Кітапханаға сілтеме мақаланың соңында.

Функцияны пайдаланып матрицада таңбаны көрсетуге болады drawChar.

drawChar(x, y, таңба, түс, фон, өлшем);

Функцияның алғашқы екі параметрі таңбаның сол жақ жоғарғы бұрышының координаталарына жауап береді. Үшінші параметр - таңбаның өзі. Біздің жағдайда таңбаның түсі 1 немесе HIGH тең болады, өйткені матрица екі түсті. Фон 0 немесе ТӨМЕН. Соңғы «өлшем» параметрін 1-ге тең етейік.

«СӘЛЕМ ӘЛЕМ!» деген сөз тіркесінің барлық әріптерін кезекпен көрсететін программа жазайық.

#қосу #қосу #қосу int pinCS = 10; int numberOf HorizontalDisplays = 1; int numberOfVerticalDisplays = 1; Max72xxPanel матрицасы = Max72xxPanel(pinCS, numberOf HorizontalDisplays, numberOfVerticalDisplays); Жолдық таспа = «HELLO WORLD»; int wait = 800; void setup() ( matrix.setIntensity(1); // жарықтық 0-ден 15-ке дейін ) void loop() ( for (int i = 0 ; i)< tape.length(); i++) { matrix.fillScreen(LOW); matrix.drawChar(0, 0, tape[i], HIGH, LOW, 1); matrix.write(); delay(wait); } }

Ескерту. Adafruit_GFX кітапханасында графикамен жұмыс істеуге арналған көптеген функциялар бар. Мысалы, drawCircle(3, 3, 2, HIGH) центрі (3,3) және радиусы 2 болатын шеңбер сызады. Соңғы параметр түс болып табылады, бірақ монохромды матрица жағдайында ол 1 немесе ЖОҒАРЫ болады. DrawLine(0, 0, 3, 6, HIGH) функциясы (0,0) және (3,6) нүктелерінің арасында сызық сызады.

Max7219 желісінде жұмыс істейді

Осылайша, біз құрылғыны және бір матрицаға шығару принципін анықтадық деп үміттенемін. Енді тікелей жүгіру сызығына көшейік.

Не талап етіледі?

Идеяны жүзеге асыру үшін сізге өте аз мәліметтер қажет:

  • 8-8 пиксель төрт матрицадан тұратын екі жарықдиодты модуль;
  • қосу сымдары;
  • Arduino Nano тақтасы;

Схема

Қолданылатын жарықдиодты модульдің баспа схемасында өлшемі 8-ден 8-ге дейінгі 4 матрица бар. Әрбір жарықдиодты тақта MAX7219 чипімен басқарылады.

MAX7219 - 64 жарық диодты дисплейге, жалпы катодтық массивтерге және дискретті жарық диодтарына арналған контроллер. Жарықдиодты дисплейде көрсетілетін ақпаратты ыңғайлырақ қабылдау үшін бірнеше модульдерді орнату ұсынылады. Ол үшін олар тізбектей қосылған топтарға біріктіріледі, яғни бірінші модульдің шығысы (шығыс) екінші модульдің кірісіне (in) қосылады. Менің құрастыруым екі модульден (16 матрицадан) тұрады, олардың ұзындығы бүкіл сөйлемдерді ыңғайлы оқу үшін жеткілікті. Бұл жағдайда жинақ Arduino-ға бір модуль сияқты қосылады.

Жүйелі бағдарламалау.

MAX7219 басқаруындағы Arduino және LED модульдерінің жұмыс сызығы дерлік дайын. Бағдарламаның соңғы бөлігіне көшудің уақыты келді.

#қосу #қосу #қосу int pinCS = 10; // CS 10 пинге, DIN MOSI және CLK SCK int numberOfHorizontalDisplays = 1; // Көлденең модульдер саны int numberOfVerticalDisplays = 8; // Модульдер саны тігінен Max72xxPanel матрицасы = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); Жолдық таспа = ""; int wait = 10; // Миллисекундтағы айналдыру жылдамдығы int spacer = 1; // Таңбалар арасындағы алшақтық (нүктелер саны) int ені = 5 + аралық; // Таңба ені /* Орыс қаріпін UTF-8-ден Windows-1251-ге түрлендіру */ String utf8rus(String source) ( int i,k; String target; unsigned char n; char m = ( "0", "\0" ); k = source.length(); i = 0; while (i< k) { n = source[i]; i++; if (n >= 0xC0) ( ауыстырғыш (n) ( 0xD0 жағдайы: ( n = көз[i]; i++; егер (n == 0x81) ( n = 0xA8; үзіліс; ) егер (n >= 0x90 && n)<= 0xBF) n = n + 0x2F; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB7; break; } if (n >= 0x80 && n<= 0x8F) n = n + 0x6F; break; } } } m = n; target = target + String(m); } return target; } /* Код для работы с com-портом */ String Serial_Read() { unsigned char c; // переменная для чтения сериал порта String Serial_string = ""; // Формируемая из символов строка while (Serial.available() >0) ( // Егер сериялық портта таңбалар болса c = Serial.read(); // Таңбаны оқу //Serial.print(c,HEX); Serial.print(" "); Serial.print(c) ); if (c == "\n") ( // Егер бұл жолдың соңы болса Serial_string қайтарады; // Жолды қайтару ) if (c == 0xB8) c = c - 0x01; // Таңбаны түзету кесте кодтары????өйткені кестедегі орыс таңбалары стандартты utf кодтауына қатысты 1 таңбаға ауыстырылады, егер (c >= 0xBF && c)<= 0xFF) c = c - 0x01; Serial_string = Serial_string + String(char(c)); //Добавить символ в строку } return Serial_string; } void setup() { Serial.begin(9600); tape = utf8rus("сайт Amateur Radio WorkShop"); // Этот текст выводиться при включении или если в com-порт не пришла информация matrix.setIntensity(3); // Яркость от 0 до 15 matrix.setRotation(matrix.getRotation()+3); //1 - 90 2 - 180 3 - 270 } void loop() { if (Serial.available()){ tape=Serial_Read(); } for (int i = 0 ; i < width * tape.length() + matrix.width() - 1 - spacer; i++) { matrix.fillScreen(LOW); int letter = i / width; // Номер символа выводимого на матрицу int x = (matrix.width() - 1) - i % width; int y = (matrix.height() - 8) / 2; // Центрируем текст по вертикали while (x + width - spacer >= 0 && әріп >= 0) ( егер (әріп< tape.length()) { matrix.drawChar(x, y, tape, HIGH, LOW,1); } letter--; x -= width; } matrix.write(); // Вывод сообщения на экран delay(wait); } }

Мен кодты жазудың мәнін көрмеймін. Ол жақсы түсініктеме береді. Дегенмен, атап өтуге болатын кейбір ерекшеліктер бар.

Ескерту. Маңызды. Adafruit_GFX стандартты кітапханасы бастапқыда тек ағылшын қаріптерін қолдайды, сондықтан Ресейден келген жігіттер қолдарынан келгеннің бәрін жасады және орыс қаріптері мен барлық жақсы нәрселерді қосу арқылы кітапхананы қайта жазды. Барлық кітапханалар мен эскиздер менің GitHUB бетімде қолжетімді.

Жарық диодты модульде көрсетілетін хабарлама мәтінін жылдам өзгерту үшін ком-портпен жұмыс істеуге арналған код бөлігі қажет. Дегенмен, бұл бізге тек бұл үшін ғана қажет емес. Болашақта осы функция арқылы біз өзіміздің және Arduino-дағы жұмыс сызығын қосамыз.

Таңбалық графикалық дисплейлермен жұмыс істеу үшін Arduino IDE стандартты жинағына кіретін және 8-биттік (4-бит) параллель интерфейсте жұмыс істеуге арналған LiquidCrystal кітапханасын пайдалануды ұсынамыз. Егер сіздің дисплей Arduino-ға I2 шинасы арқылы қосылған болса, онда сізге LiquidCrystal_I2C кітапханасын орнату қажет (оның функцияларының көпшілігі бірінші кітапхананың функцияларын қайталайды).

Қолдау көрсетілетін дисплейлер:

Дисплей Қосылу және инициализация
LCD1602 - таңбалық дисплей (16x02 таңба),


#қосу
[ , 8 , 9 , 10 , 11 ]);
жарамсыз орнату()( lcd.begin(16 , 2);}

// Түсіндірме:

жарамсыз орнату()( OBJECT.begin(NUM_COLUMNS, NUM_ROWS); )


LiquidCrystal OBJECT(RS, E, D0, D1, D2, D3, D4, D5, D6, D7);


I2C интерфейсімен (көк)

#қосу
#қосу
LiquidCrystal_I2C lcd(0x27немесе 0x3F, 16 , 2);
жарамсыз орнату()( lcd.init(); }

// Түсіндірме:



LCD1602 I2C - таңбаларды көрсету (16x02 таңба),
I2C интерфейсімен (жасыл)

#қосу
#қосу
LiquidCrystal_I2C lcd(0x27немесе 0x3F, 16 , 2);
жарамсыз орнату()( lcd.init(); }

// Түсіндірме:
LiquidCrystal_I2C OBJECT(ADDRESS_I2C , NUM_COLUMNS, NUM_ROWS);
// ADDRESS_I2C 0x27 немесе 0x3F болуы мүмкін

LCD2004 - таңбалық дисплей (20x04 таңба),
параллель интерфейсі бар (көк)

#қосу
LiquidCrystal lcd(2 , 3 , 4 , 5 , 6 , 7[ , 8 , 9 , 10 , 11 ]);
жарамсыз орнату()( lcd.begin(20 , 4);}

// Түсіндірме:
LiquidCrystal OBJECT(RS, E, D4, D5, D6, D7);
жарамсыз орнату()( OBJECT.begin(NUM_COLUMNS, NUM_ROWS); )

// Егер 8 деректер шинасы сымы пайдаланылса, олардың барлығын көрсетіңіз
LiquidCrystal OBJECT(RS, E, D0, D1, D2, D3, D4, D5, D6, D7);

LCD2004 I2C - таңбаларды көрсету (20x04 таңба),
I2C интерфейсімен (көк)
#қосу
#қосу
LiquidCrystal_I2C lcd(0x27немесе 0x3F, 20 , 4);
жарамсыз орнату()( lcd.init(); }

// Түсіндірме:
LiquidCrystal_I2C OBJECT(ADDRESS_I2C , NUM_COLUMNS, NUM_ROWS);
// ADDRESS_I2C 0x27 немесе 0x3F болуы мүмкін

№1 Мысал

I2C шинасы арқылы қосылған LCD1602 дисплейінде жазуды көрсетеміз. LCD2004 дисплейімен жұмыс істеу үшін 3-жолды LiquidCrystal_I2C lcd(0x27,20,4) етіп өзгерту керек;

#қосу // СКД дисплеймен жұмыс істеуге арналған кітапхананы I2C шинасы LiquidCrystal_I2C lcd(0x27,16,2) арқылы қосамыз; // Дисплей параметрлерін көрсете отырып, кітапхана объектісін жариялау (I2C мекенжайы = 0x27, бағандар саны = 16, жолдар саны = 2) // Егер жазу пайда болмаса, 0x27 мекенжайын 0x3F void setup()( /) арқылы ауыстырыңыз. / lcd.init(); // СКД дисплеймен жұмысты бастау lcd.backlight(); // СКД дисплейінің артқы жарығын қосу lcd.setCursor(0, 0); // Курсорды орынға орнату (0-баған). , row 0) lcd.print("LCD"); // "LCD" мәтінін ағымдағы курсор орнынан бастап басып шығару lcd.setCursor(0, 1); // Курсорды орынға орнату (0-баған, 1-жол) lcd.print("www.iarduino.ru"); // Орнатылған курсор орнынан бастап "www.iarduino.ru" мәтінін көрсетеміз ) // // void loop()() // ішіндегі код цикл функциясы үнемі орындалады. Бірақ біз статикалық мәтінді көрсететіндіктен, оны іске қосу кезінде цикл кодын пайдаланбай 1 рет көрсету жеткілікті.

№2 Мысал

Біз жазуды 4-биттік параллель шинасы арқылы қосылған LCD1602 дисплейінде көрсетеміз. LCD2004 дисплейімен жұмыс істеу үшін 5-жолды lcd.begin(20, 4) етіп өзгерту керек;

#қосу // LiquidCrystal кітапханасын LiquidCrystal СКД дисплеймен жұмыс істеу үшін қосамыз lcd(2,3,4,5,6,7); // Дисплей түйреуіштерін (RS,E,D4,D5,D6,D7) көрсете отырып, кітапхана нысанын жариялау // Егер 8 деректер шинасы сымы пайдаланылса, онда (RS,E,D0,D1,D2,D3,D4, D5, D6,D7) void setup()( // lcd.begin(16, 2); // Санды (бағандар, жолдар) lcd.setCursor(0, 0) көрсете отырып, СКД дисплеймен жұмысты бастау; // Курсорды орынға орнату (0 баған, 0 жол) lcd.print("LCD2004"); // lcd.setCursor(0, 1) ағымдағы курсор орнынан бастап "LDC1602" мәтінін басып шығару; // Курсорды орнату позицияға (0 баған, 1 жол ) lcd.print("www.iarduino.ru"); // Орнатылған курсор позициясынан бастап "www.iarduino.ru" мәтінін басып шығару ) // // void loop()( ) // Цикл функциясының ішіндегі код үнемі орындалады. Бірақ біз статикалық мәтінді көрсететіндіктен, оны іске қосу кезінде цикл кодын пайдаланбай 1 рет көрсету жеткілікті.

№3 Мысал

I2C шинасы арқылы қосылған LCD1602 дисплейінде «Орыс тілі» деген жазуды көрсетеміз:

#қосу // #include I2C автобусымен жұмыс істеу үшін кітапхананы қосыңыз // СКД дисплеймен жұмыс істеуге арналған кітапхананы I2C шинасы LiquidCrystal_I2C lcd(0x27,16,2) арқылы қосамыз; // Дисплей параметрлерін көрсете отырып, кітапхана нысанын жариялау (I2C мекенжайы = 0x27, бағандар саны = 16, жолдар саны = 2) // uint8_t символы = ( // 6 жеке таңбадан тұратын массивді жариялаңыз (k және y i z s), әрқайсысы таңба 8 байттан тұрады ( 0, 0,18,20,24,20,18, 0 ), // - ( 0, 0,17,19,21,25,17, 0 ), // және (10, 4 ,17,19,21,25,17, 0 ), // th ( 0, 0,15,17,15, 5, 9, 0 ), // i ( 0, 0,14,17, 6,17 ,14, 0 ) , // z( 0, 0.17,17,29,19,29, 0 )); // s // void setup()( // lcd.init(); // СКД дисплеймен жұмысты бастау lcd.backlight(); // СКД артқы жарығын қосу lcd.createChar(1, символ); // ЖЖҚ дисплейіне 1 "k" таңбасын жүктеңіз lcd.createChar(2, символ); // ЖЖҚ дисплейіне 2 "және" таңбасын жүктеңіз lcd.createChar(3, символ); // RAM lcd дисплейіне 3 "th" таңбасын жүктеңіз .createChar (4, символ); // 4 таңбаны дисплей жедел жадына жүктеңіз lcd.createChar(5, символ); // 5 таңбаны дисплей жедел жадына жүктеңіз lcd.createChar(6, символ); // 6 таңбаны жүктеңіз "s" дисплейде RAM lcd.setCursor(0, 0); // Курсорды орынға орнату (0-баған, 0-жол) lcd.print("Pycc\1\2\3 \4\5\6\1" ); // «Pyccky тілі» мәтінін шығарыңыз, мұнда «Pycc» латын тілінде, ал «kycc» дисплейдің жедел жадындағы таңбалармен жазылады ) // Егер дисплейдің жедел жадынан таңбаны басып шығару қажет болса, онда \ және таңбаны жазыңыз. сан // void loop( )() // цикл функциясының ішіндегі код үнемі орындалады. Бірақ біз статикалық мәтінді көрсететіндіктен, оны іске қосу кезінде цикл кодын пайдаланбай 1 рет көрсету жеткілікті.

№4 Мысал

I2C шинасы арқылы қосылған LCD1602 дисплейінде іске қосылғаннан кейін өткен уақытты көрсетеміз:

#қосу // #include I2C автобусымен жұмыс істеу үшін кітапхананы қосыңыз // СКД дисплеймен жұмыс істеуге арналған кітапхананы I2C шинасы LiquidCrystal_I2C lcd(0x27,16,2) арқылы қосамыз; // Дисплей параметрлерін көрсете отырып, кітапхана объектісін жариялаңыз (I2C мекенжайы = 0x27, бағандар саны = 16, жолдар саны = 2) // uint8_t tim_D, tim_H, tim_M, tim_S; // Күндерді, сағаттарды, минуттарды және секундтарды сақтау үшін айнымалы мәндерді жариялаңыз. uint32_ttim; // Біз басынан бері өткен уақыттың жалпы көлемін сақтау үшін айнымалыны жариялаймыз. // Егер жазу пайда болмаса, 0x27 мекенжайын 0x3F void setup()( // lcd.init(); // СКД дисплейімен жұмысты бастаңыз lcd.backlight(); // СКД артқы жарығын қосыңыз ) // // void loop()( // // Басынан бері өткен уақытты алу: // tim = millis() / 1000; // Жалпы секунд санын алу (макс. 4"294"967 сек ≈ 49,7 күн ).tim_S = tim % 60 ; // секундтарды алу: минутқа бөлінген барлық секундтардың қалдығы (60 сек) tim = (tim-tim_S) / 60; // Жалпы минуттарды алу tim_M = tim % 60; // минуттарды алу: сағатына барлық минуттардың қалдығы (60 мин) tim = (tim-tim_M) / 60; // сағаттардың жалпы санын алу tim_H = tim % 24; // сағаттарды алу: барлық сағаттардың тәулікке бөлінген қалдығы (24) сағат) tim_D = (tim-tim_H) / 24; // Күндердің жалпы санын алу. // Басынан бері өткен уақытты басып шығару: // егер (millis()%1000<100){ // Условие выполняется в течении 100 первых миллисекунд каждой новой секунды. delay(100); lcd.setCursor(0, 0); // Устанавливаем курсор в позицию (0 столбец, 0 строка). lcd.print("Days: "); // Выводим текст. if(tim_D<10){lcd.print(0);} // Выводим 0 перед количеством дней. lcd.print(tim_D); // Выводим количество дней. lcd.setCursor(0, 1); // Устанавливаем курсор в позицию (0 столбец, 1 строка) lcd.print("Time: "); // Выводим текст. if(tim_H<10){lcd.print(0);} // Выводим 0 перед количеством часов. lcd.print(tim_H); // Выводим количество часов. lcd.print(":"); // Выводим символ. if(tim_M<10){lcd.print(0);} // Выводим 0 перед количеством минут. lcd.print(tim_M); // Выводим количество минут. lcd.print(":"); // Выводим символ. if(tim_S<10){lcd.print(0);} // Выводим 0 перед количеством секунд. lcd.print(tim_S); // Выводим количество секунд. } // } //

LiquidCrystal және LiquidCrystal_I2C кітапханаларына ортақ функциялар:

  • БАСТА(колонкалар, жолдар, ); – Бағандар, жолдар саны және таңба өлшемімен инициализацияны көрсету.
  • clear();– Курсорды 0,0 мәніне қою арқылы дисплейді тазалау (Көп уақыт алады!).
  • үй();– Курсорды 0,0 мәніне қойыңыз (Көп уақыт алады!).
  • көрсету();– Дисплейді жылдам қосу (ЖЖҚ ​​деректерін өзгертпей).
  • noDisplay();– Дисплейді жылдам өшіру (ЖЖҚ ​​деректерін өзгертпей).
  • жыпылықтау();– Жыпылықтап тұрған курсорды қосу (шамамен 1 Гц жиілікпен).
  • noBlink();– Жыпылықтап тұрған курсорды өшіріңіз.
  • курсор();– Курсордың астын сызуды қосыңыз.
  • noCursor();– Курсордың астын сызуды өшіріңіз.
  • scrollDisplayLeft();– Дисплейді солға айналдырыңыз. Shift дисплейі бір бағанды ​​солға қарай үйлестіреді (ЖЖҚ ​​өзгертпей).
  • scrollDisplayRight();– Дисплейді оңға айналдырыңыз. Shift дисплейі бір бағанды ​​оңға қарай үйлестіреді (ЖЖҚ ​​өзгертпей).
  • leftToRight();– Келесі таңбаны шығарғаннан кейін курсор орнын одан әрі бір баған оңға жылжытуды көрсетеді.
  • rightToLeft();– Келесі таңбаны шығарғаннан кейін курсордың орнын одан әрі жылжытуды көрсетеді, бір баған солға.
  • noAutoscroll();– Мәтін курсор орнының сол жағына одан әрі тураланғанын көрсетеді (әдеттегідей).
  • autoscroll();– Мәтін курсор орнының оң жағына әрі қарай тураланатынын көрсетеді.
  • құру Char(сан, массив ); – Көрсетілген санның астындағы дисплейдің CGRAM жүйесіне реттелетін таңбаны жазыңыз.
  • setCursor(кол, қатар ); – Курсорды баған мен жол нөмірімен көрсетілген орынға орнатады.
  • басып шығару(мәтін ); – Дисплей экранында мәтінді, белгілерді немесе сандарды көрсету. Синтаксис Serial класындағы аттас функцияға ұқсас.

Тек LiquidCrystal_I2C кітапханасында орындалатын функциялар:

  • ішінде();– Дисплейді инициализациялау. Нысан жасалғаннан кейін LiquidCrystal_I2C кітапханасының бірінші пәрмені болуы керек. Шындығында, бұл функция LiquidCrystal кітапханасында да бар, бірақ бұл кітапханада нысан жасалған кезде ол автоматты түрде (әдепкі бойынша) шақырылады.
  • артқы жарық();– Дисплейдің артқы жарығын қосыңыз.
  • noBacklight();– Дисплейдің артқы жарығын өшіріңіз.
  • setBacklight(жалау ); – Backlight бақылауы (шын – қосу / жалған – өшіру), noBacklight және артқы жарық функцияларының орнына пайдаланылады.

Байланыс:

// I2C шинасы үшін:
#қосу
#қосу
LiquidCrystal_I2C LCD(мекенжайы , кол , қатар );
жарамсыз орнату()(
lcd.init();
}

Параметр:
  • мекенжайы: I2C шинасында мекенжайды көрсету - 0x27 немесе 0x3F
  • col:
  • қатар:
// 4 сымды параллельді шина үшін:
#қосу
сұйық кристал LCD(Р.С , Е , D4 , D5 , D6 , D7 );
жарамсыз орнату()(
lcd.begin(кол , қатар );
}
Параметр:
  • RS: RS істікшесі қосылған Arduino істікшесінің #
  • E: E істікшесі қосылған Arduino пин нөмірі
  • D0...D3: D0-D3 түйреуіштері қосылған Arduino түйреуіштерінің саны
  • D4...D7: D4-D7 түйреуіштері қосылған Arduino түйреуіштерінің саны
  • col:дисплейде орындалған бағандар саны
  • қатар:дисплейде орындалған жолдар саны
// 8 сымды параллельді шина үшін:
#қосу
сұйық кристал LCD(Р.С , Е , D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 );
жарамсыз орнату()(
lcd.begin(кол , қатар );
}
БАСТА(кол , қатар , );
Экран өлшемдері мен таңбалары бар инициализацияны көрсету.
Параметр:
  • col:дисплейде орындалған бағандар саны
  • қатар:дисплейде орындалған жолдар саны
  • өлшемі:тұрақты мәнмен белгіленген таңба өлшемі:
    LCD_5x8DOTS (әдепкі) немесе LCD_5x10DOTS
/* I2C шинасы үшін: */ #include // #include I2C автобусымен жұмыс істеу үшін кітапхананы қосыңыз // СКД дисплеймен жұмыс істеуге арналған кітапхананы I2C шинасы LiquidCrystal_I2C lcd(0x3F,20,4) арқылы қосамыз; // Дисплей параметрлерін көрсете отырып, кітапхана нысанын жариялаңыз (I2C мекенжайы = 0x3F, бағандар саны = 20, жолдар саны = 4) // void setup()( // lcd.init(); // Жұмысты бастау LCD дисплей lcd.backlight (); // СКД дисплейдің артқы жарығын қосу... // Іске қосу кезінде көрсетілетін ақпаратты көрсету ) // // void loop()() // ... // Дисплей кодыңыздың алгоритміне сәйкес өзгеруі керек ақпарат ) // /* 4 сымды параллельді шина үшін: */ #include // LiquidCrystal кітапханасын LiquidCrystal СКД дисплеймен жұмыс істеу үшін қосамыз lcd(2,3,4,5,6,7); // Дисплей түйреуіштерін көрсете отырып, кітапхана нысанын жариялау (RS,E,D4,D5,D6,D7) // Егер 8 деректер шинасы сымы пайдаланылса, онда (RS,E,D0,D1,D2,D3,D4, D5, D6,D7) void setup()( // lcd.begin(16, 2); // (бағандар, жолдар) санын көрсете отырып, СКД дисплеймен жұмысты бастаңыз ... // Шығарылатын ақпарат болуы керек іске қосу кезінде көрсетіледі ) / / // void loop()() // ... // Кодыңыздың алгоритміне сәйкес өзгеруі керек ақпаратты шығару ) //

Басқару функцияларын көрсету:

көрсету();
Дисплейді noDisplay функциясымен өшіргеннен кейін қосады.
Ескертпе: Функция жылдам және дисплейдің жедел жадына өзгеріссіз орындалады.
noDisplay();
Дисплейді өшіреді.
Дисплей функциясы шақырылғанға дейін дисплейдегі деректер көрсетілмейді, бірақ ол ЖЖҚ жадынан өшірілмейді және дисплей функциясы шақырылғаннан кейін ол қайтадан көрсетіледі.
Ескертпе: Функция жылдам және дисплейдің жедел жадына өзгеріссіз орындалады.
scrollDisplayLeft();
Дисплей координаттарын бір бағанды ​​солға жылжытады.



scrollDisplayRight();
Дисплей координаттарын бір бағанды ​​оңға жылжытады.
Бұл функцияның тұрақты шақыруы орындалатын жолдың әсерін жасайды.
Координаттар дисплейдегі ақпарат үшін де, одан кейін көрсетілетін ақпарат үшін де ауыстырылады.
Ескертпе: Функция дисплейдің жедел жадын өзгертпей орындалады.
Функцияны қатарынан 40 рет шақырсаңыз, координат бастапқы нүктеге оралады
clear();
Курсорды 0,0 мәніне орнату арқылы дисплейді тазалау.
Дисплейдегі ақпарат біржола жойылады.
Ескерту: көп уақыт алады.
артқы жарық();
Дисплейдің артқы жарығын қосыңыз.
noBacklight();
Дисплейдің артқы жарығын өшіріңіз.
Ескерту: Функция тек LiquidCrystal_I2C кітапханасында орындалады.
setBacklight(жалау );
Артқы жарықты басқару (noBacklight және артқы жарық функцияларының орнына).
Параметр:
  • жалау: true - қосылады, ал жалған - артқы жарықты өшіреді.
Ескерту: Функция тек LiquidCrystal_I2C кітапханасында орындалады.
/* Дисплейді басқару функцияларын бақылау үшін белгіні көрсетіңіз: */ lcd.cursor(0,0); // Курсорды дисплейдің ең жоғарғы бұрышына орнату (0-баған, 0-жол) lcd.print("iarduino.ru"); // "iarduino.ru" мәтінін көрсетіңіз (бірінші "i" әрпі "0,0" позициясында, ал соңғы "u" "10,0" позициясында, көрінбейтін курсор "11,0" позициясында болады ) // lcd.noDisplay(); // Дисплейді өшіру (дисплейден жазба жоғалады) lcd.display(); // Дисплейді қосыңыз (белгі дисплейде сол жерде пайда болады) lcd.scrollDisplayLeft(); // Баған координаттарын солға жылжытыңыз (дисплейде "arduino.ru" бірінші "i" әрпінсіз көрсетіледі, ол дисплейден асып кетеді, бірақ оның жедел жадында қалады) lcd.scrollDisplayRight(); // Баған координаттарын оңға жылжытыңыз (дисплейде "iarduino.ru" бастапқы көрсетілген жерде көрсетіледі) lcd.clear(); // Дисплейді өшіру (жазба дисплейден біржола жоғалады) lcd.noBacklight(); // Дисплейдің артқы жарығын өшіру lcd.backlight(); // дисплейдің СКД артқы жарығын қосу setBacklight(0); // дисплей СКД артқы жарығын өшіру setBacklight(1); // Дисплейдің артқы жарығын қосыңыз

Курсорды басқару функциялары:

setCursor(кол , қатар );
Курсорды көрсетілген орынға орнатады.
Параметр:
  • col:баған нөмірі (0-ден басталады).
  • қатар:жол нөмірі (0-ден бастап)
үй();
Курсорды 0,0 позициясына қойыңыз. setCursor(0,0) сияқты жұмыс істейді;
Ескерту: көп уақыт алады.
жыпылықтау();
Жыпылықтап тұрған курсорды қосыңыз.
Ескертпе: Курсор бүкіл таңба өрісін алады және ол бұрын орнатылған күйде шамамен 1 Гц жиілікте жыпылықтайды.
noBlink();
Жыпылықтап тұрған курсорды өшіріңіз.
Ескертпе: Курсор көрінбейтін болады, бірақ оның орны сақталады.
курсор();
Курсордың астын сызуды қосыңыз.
Ескертпе: Курсор астын сызу таңбасына өзгереді және ол бұрын орнатылған жерде орналасады.
noCursor();
Курсордың астын сызуды өшіріңіз.
Ескертпе: Курсор көрінбейтін болады, бірақ оның орны сақталады.
lcd.setCursor(0, 1); // Курсорды екінші жолдың бірінші таңбасына орнатыңыз (жолдар мен бағандарды нөмірлеу 0-ден басталады) lcd.home(); // Курсорды бірінші жолдың бірінші таңбасына орнату (lcd.setCursor(0,0); шақыру кезіндегідей) lcd.blink(); // Меңзерді көрінетін ету (курсордың орнында тіктөртбұрыш жыпылықтайды) lcd.noBlink(); // Курсорды көрінбейтін ету (жыпылықтаған төртбұрышты алып тастау) lcd.cursor(); // Курсорды көрінетін ету (меңзердің орнына астын сызу пайда болады) lcd.noCursor(); // Курсорды көрінбейтін ету (астын сызуды алып тастау) // Егер курсор таңба бар жерге түссе, онда бұл таңба жоғалмайды.

Бағыт және туралау функциялары:

leftToRight();
Әрбір жаңа таңбадан кейін курсор орны бір бағанды ​​оңға жылжыту керектігін көрсетеді.
Ескертпе: «abc» мәтіні көрсетілсе, дисплейде «abc» көрсетіледі және мәтін курсордың бастапқы орнының оң жағында болады.
(Әдеттегідей)
rightToLeft();
Әрбір жаңа таңбадан кейін курсор орны бір бағанды ​​солға жылжыту керектігін көрсетеді.
Ескертпе: «abc» мәтіні көрсетілсе, дисплейде «cba» көрсетіледі және мәтін курсордың бастапқы орнының сол жағында болады.
(Оңнан солға қарай жазу)
noAutoscroll();
Болашақта мәтін курсордың бастапқы орнынан солға туралану керектігін көрсетеді.
Ескерту: егер курсорды 10.0 позициясына қойып, мәтінді көрсетсеңіз, онда көрсетілген мәтіннің бірінші таңбасы осы күйде болады.
(Әдеттегідей)
autoscroll();
Болашақта мәтін курсордың бастапқы орнынан оң жаққа туралану керектігін көрсетеді.
Ескерту: егер курсорды 10.0 позициясына қойып, мәтінді көрсетсеңіз, онда курсор осы позицияда орналасады.
(Көрсетілген мәтінде қанша әріп болса, сонша рет scrollDisplayLeft функциясын шақырғандай дисплей координаттары солға жылжытылады)
lcd.leftToRight(); // Курсорды оңға жылжыту керек (Еуропалық жазудағы әдеттегідей) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Дисплейде біз көреміз: " ABC " ("A"-дан кейін курсор оңға жылжып, "B" көрсетілді, содан кейін курсор оңға жылжып, "C" көрсетілді) lcd.rightToLeft(); // Курсорды солға жылжытуды айт (Оңнан солға жазу сияқты) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Дисплейде біз мынаны көреміз: «CBA» («A» әрпінен кейін курсор солға жылжып, «B» көрсетілді, содан кейін курсор солға жылжып, «C» көрсетіледі) lcd.noAutoscroll(); // Солға туралауды орнату (әдеттегідей) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Дисплей көрсетіледі: "ABC" (әдеттегідей) lcd.autoscroll(); // Оңға туралауды орнату (Дисплей координаттары көрсетілген таңбалар саны бойынша солға жылжиды) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Дисплейде біз мынаны көреміз: " ABC " (Дисплей координаттары 3 таңба солға жылжытылады, өйткені әр таңбадан кейін scrollDisplayLeft функциясы шақырылады)

Мәтінді және таңбаны енгізу функциялары:

createChar(сан,массив);
Көрсетілген нөмірде дисплейдің CGRAM-ге теңшелетін таңбаны жазыңыз.
Орнатылған таңбаны қамтитын мәтінді (басып шығару функциясын пайдаланып) басып шығарғыңыз келсе, қиғаш сызықты және осы таңба жазылған санды көрсетіңіз: print("C\1MBO\2").
Параметр:
  • саны:символы жазылатын сан.
  • массив:жазылатын таңбаны көрсететін массив.
Ескерту: Массив бірнеше байттан тұрады, олардың саны символдағы жолдар санына тең. Байттың әрбір жиынтық биті жиынтық (көрсетілетін) таңба пикселіне сәйкес келеді.
басып шығару (мәтін);
Дисплей экранында мәтінді, белгілерді немесе сандарды көрсетіңіз.
Параметр:
  • мәтін:көрсету үшін таңба, сан немесе жол.
Ескерту: Синтаксис Serial класындағы аттас функцияға ұқсас.
#қосу // #include I2C автобусымен жұмыс істеу үшін кітапхананы қосыңыз // СКД дисплеймен жұмыс істеуге арналған кітапхананы I2C шинасы LiquidCrystal_I2C lcd(0x27,16,2) арқылы қосамыз; // Дисплей параметрлерін көрсете отырып, кітапхана объектісін жариялаңыз (I2C мекенжайы = 0x27, бағандар саны = 16, жолдар саны = 2) // uint8_t symbol_d = (0b00000, // "d" символының 1 жолы 0b00000, // "d" символының 2 жолы " 0b00110, // 3 таңба жолы "e" 0b01010, // 4 таңба жолы "e" 0b01010, // 5 таңба жолы "e" 0b01010, // 6 таңба жолы "e" 0b11111, // 7 таңбалы жол "e" "0b10001); // 8 символдық жол "d" Бүкіл массив бір жолда жазылуы мүмкін: uint8_t symbol_d=(0,0,6,10,10,10,31,17); // uint8_t symbol_i = (0b00000, // "және" символының 1-ші жолы 0b00000, // "және" символының 2-ші жолы 0b10001, // "және" символының 3-ші жолы 0b10011, // 4-ші жолы "және" символы 0b10101, // 5 "және" таңба жолы 0b11001, // 6 "және" таңба жолы 0b10001, // 7 "және" таңба жолы 0b00000); // 8-ші символ жолы «және» Бүкіл массив бір жолда жазылуы мүмкін: uint8_t symbol_i=(0,0,17,19,21,25,17,0); void setup()( // lcd.init(); // СКД дисплеймен жұмысты бастау lcd.backlight(); // СКД артқы жарығын қосу lcd.createChar(1,symbol_d); // Бірінші lcd таңбасын жүктеңіз дисплей жадына .createChar(2,symbol_i); // Екінші таңбаны дисплей жадына жүктеңіз lcd. clear(); // Экранды өшіріңіз. setCursor(0,0); // Курсорды ең жоғарғы жағына орнатыңыз corner lcd.print("Pa\ 1\2o"); // "Р", "a" , "o" таңбалары латын тілінде жазылған кезде "Radio" мәтінін көрсетіңіз, ) // және "e" таңбалары ", "және" олардың сандарын көрсете отырып, дисплей жадынан көрсетіледі // void loop()( // lcd.setCursor(0,1); lcd.print(" "); // lcd төменгі жолын толығымен өшіріңіз. setCursor(0,1); lcd.print("i"); lcd.print("arduino"); lcd.print(".ru"); // "i" "arduino" ".ru" мәтінін басып шығарыңыз in the bottom line delay(2000); // 2 секунд күтіңіз lcd.setCursor( 0,1); lcd.print(" "); // барлық төменгі жолды өшіріңіз lcd.setCursor(0,1); lcd.print (12.345); // 12.34 санын басып шығару (2 ондық таңбаны басып шығарады) delay(2000 ); // 2 секунд күтіңіз lcd.setCursor(0,1); lcd.pri nt(""); // барлық төменгі жолды өшіру lcd.setCursor(0,1); lcd.print(12, HEX); // 12 он алтылық кідіріс ретінде шығару (2000); // 2 секунд күтіңіз lcd.setCursor(0,1); lcd басып шығару(" "); // барлық төменгі жолды өшіру lcd.setCursor(0,1); lcd басып шығару(1); // 1 санының кідірісін шығару(2000); // 2 секунд күтіңіз)

HD44780 құрылғысындағы СКД экранындағы жұмыс сызығы.

Си тіліндегі жүгіру сызығы үшін «дайын шешім» іздеу еш нәтиже бермеді. Сондықтан мен мұны өзім істеуге тура келді.

Кодтың бұл «бөлігі» кез келген жерде және кез келген таңбалар кеңістігін пайдаланып, HD44780 контроллері немесе ұқсас СКД индикаторларында белгіні (оңнан солға қарай) көрсетуге мүмкіндік береді.

Бірінші ескеретін нәрсе, Си тілі жолдармен «тікелей» жұмыс істеуге мүмкіндік бермейді. Яғни, тағайындау операторының көмегімен таңбаны бір жолдан екіншісіне көшіру мүмкін емес ( = ) ... ол үшін арнайы функцияны пайдалану керек strncpy(). Жалпы айтқанда, Си тілінде жолдармен жұмыс істеу үшін бірнеше функциялар қолданылады. Өзін-өзі азаптаушыларда бұл функцияларды пайдалануға жеке тарау арналған. CV_AVR бойынша Help "e" бөлімінде жолдармен жұмыс істеу функцияларының сипаттамасы берілген «Жолдық функциялар». Бұл функциялардың прототиптері файлда string.h.

«...бастапқы жол...» - «орындалу» жолында көрсеткіңіз келетін таңбалар тізбегі;

«...көрсетілген таңбалар...» – шын мәнінде «сыртқы сызық».

Жүгіру сызығын ұйымдастыру үшін келесі алгоритм таңдалды:

1. Көрсетілген таңбалар оңнан солға жылжытылады. Төтенше сол жақ «жоғалған».

2. Ауыстырудан кейін бастапқы жолдан келесі таңба ең оң жақ таңбаға көшіріледі.

3. Бастапқы жолдың соңына жеткенде, бастапқы жолдың бірінші таңбасы келесі болады.

Таңбаларды ауыстыру үшін - ауыстырылатын ұяшық үшін таңба коды HD44780 экрандық жедел жадынан (DDRAM) оқылады және сол жақтағы ЖЖҚ ұяшығына жазылады.

HD44780 деректер парағына сәйкес, жоғарғы жолдың сол жақ таңбасы DDRAM мекенжайы 0x00 және төменгі жолдың сол жақ таңбасы 0x40. Экранның жедел жадына (және таңбалар генераторының ЖЖҚ-на емес) арнайы сілтеме жасау үшін RS биті 1-ге тең болуы қажет екенін есте ұстаған жөн (RS - мекенжай байтындағы жоғары бит, DataSheet қараңыз).

Нәтижесінде біз жоғарғы жолдың сол жағындағы екінші таңбаға «сілтеме жасау» үшін мекенжаймен «жұмыс істеу» керек екенін аламыз. 0x01 | 0x80 = 0x81.

HD44780 «ішкі мазмұнын» жазу және оқу функциялары кітапханада (прототиптер lcd.h).... сондықтан.. нақты бағдарлама:

/* CV_AVR үшін

Бұл мысалда орындалатын жол 16-биттік индикатордың төменгі жолының 8-ден (0xC7) 16-ға дейінгі биттермен көрсетіледі.

. ......

#қосу

unsigned char n_sim=1,m_end=43; //43 - мысалдағы жол ұзындығы
...........

beg_string()(
unsigned char i;

// тикерді ауыстыру

егер(beg_str)(
үшін(i=0;i<9;i++)lcd_write_byte(0xC7+i,lcd_read_byte(0xC8+i));
beg_str=0;

// келесі таңбаны ең оң жақ орынға жазыңыз

lcd_gotoxy(15,1);
lcd_putchar(ish_str);
if(++n_sim>m_end)n_sim=1;
}
}

Глоссарий:

n_sim – бастапқы жолдағы ағымдағы символдың орнына нұсқағыш;

m_end – бастапқы жолдағы символдардың жалпы саны;

beg_str- ауыстыруды қосу биті. Оның көмегімен сіз «жүгіру» жылдамдығын реттей аласыз;

ish_str - бастапқы жол.

Сірә, қолданыстағы C компиляторларының әрқайсысында HD44780-мен жұмыс істеуге арналған кітапхана функциялары бар. Сондықтан «сіздің» компиляторыңыз үшін бағдарламаны «қайта жасау» қиын болмайды.

Мен белгілі «HD44780.exe» утилитасының көмегімен бастапқы жолды «пісіремін». Оны пайдаланған кезде түсініктемелер жолдың ұзындығын көрсетеді: "/* Жолдың максималды ұзындығы: 43 байт */"

Мақала ұнады ма? Достарыңызбен бөлісіңіз!
Бұл мақала пайдалы болды ма?
Иә
Жоқ
Пікіріңізге рахмет!
Бірдеңе дұрыс болмады және сіздің дауысыңыз есептелмеді.
Рақмет сізге. Сіздің хабарламаңыз жіберілді
Мәтіннен қате таптыңыз ба?
Оны таңдаңыз, басыңыз Ctrl+Enterжәне біз оны түзетеміз!