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 редакторында арнайы кітапхана бар сұйық кристал. Кітапхананы қосу үшін бағдарламамыздың бірінші жолы ретінде келесі өрнекті жазамыз: #include3. Сағатты бағдарламалаңыз
Енді дисплей дәл жұмыс істеп тұр, қарапайым құрылғымызды нағыз электронды сағатқа айналдыруға тырысайық. Назар аударыңыз!Уақытты көрсету үшін бізге «Уақыт» кітапханасы қажет. Егер ол әлі орнатылмаған болса, мұрағатты сілтемеден жүктеп алуға болады. Оны енгізейік: #include- year() - бізге жылды қайтарады;
- month() - ай;
- day() - күн;
- сағат() - сағат;
- minute() - минутты қайтарады;
- second() - екінші.
Сәлем Жігіттер. Бүгін біз 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);} // Түсіндірме:
|
I2C интерфейсімен (көк) |
#қосу #қосу LiquidCrystal_I2C lcd(0x27немесе 0x3F, 16 , 2); жарамсыз орнату()( lcd.init(); } // Түсіндірме: |
LCD1602 I2C - таңбаларды көрсету (16x02 таңба), I2C интерфейсімен (жасыл) |
#қосу #қосу LiquidCrystal_I2C lcd(0x27немесе 0x3F, 16 , 2); жарамсыз орнату()( lcd.init(); } // Түсіндірме: |
LCD2004 - таңбалық дисплей (20x04 таңба), параллель интерфейсі бар (көк) |
#қосу LiquidCrystal lcd(2 , 3 , 4 , 5 , 6 , 7[ , 8 , 9 , 10 , 11 ]); жарамсыз орнату()( lcd.begin(20 , 4);} // Түсіндірме: // Егер 8 деректер шинасы сымы пайдаланылса, олардың барлығын көрсетіңіз |
LCD2004 I2C - таңбаларды көрсету (20x04 таңба), I2C интерфейсімен (көк) |
#қосу #қосу LiquidCrystal_I2C lcd(0x27немесе 0x3F, 20 , 4); жарамсыз орнату()( lcd.init(); } // Түсіндірме: |
№1 Мысал
I2C шинасы арқылы қосылған LCD1602 дисплейінде жазуды көрсетеміз. LCD2004 дисплейімен жұмыс істеу үшін 3-жолды LiquidCrystal_I2C lcd(0x27,20,4) етіп өзгерту керек;
#қосу
№2 Мысал
Біз жазуды 4-биттік параллель шинасы арқылы қосылған LCD1602 дисплейінде көрсетеміз. LCD2004 дисплейімен жұмыс істеу үшін 5-жолды lcd.begin(20, 4) етіп өзгерту керек;
#қосу
№3 Мысал
I2C шинасы арқылы қосылған LCD1602 дисплейінде «Орыс тілі» деген жазуды көрсетеміз:
#қосу
№4 Мысал
I2C шинасы арқылы қосылған LCD1602 дисплейінде іске қосылғаннан кейін өткен уақытты көрсетеміз:
#қосу
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 шинасы үшін: |
Параметр:
|
// 4 сымды параллельді шина үшін: #қосу сұйық кристал LCD(Р.С , Е , D4 , D5 , D6 , D7 ); жарамсыз орнату()( lcd.begin(кол , қатар ); } |
Параметр:
|
// 8 сымды параллельді шина үшін: #қосу сұйық кристал LCD(Р.С , Е , D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 ); жарамсыз орнату()( lcd.begin(кол , қатар ); } |
|
БАСТА(кол ,
қатар ,
);
Экран өлшемдері мен таңбалары бар инициализацияны көрсету. |
Параметр:
|
Басқару функцияларын көрсету:
көрсету(); Дисплейді noDisplay функциясымен өшіргеннен кейін қосады. |
Ескертпе: Функция жылдам және дисплейдің жедел жадына өзгеріссіз орындалады. |
noDisplay(); Дисплейді өшіреді. Дисплей функциясы шақырылғанға дейін дисплейдегі деректер көрсетілмейді, бірақ ол ЖЖҚ жадынан өшірілмейді және дисплей функциясы шақырылғаннан кейін ол қайтадан көрсетіледі. |
Ескертпе: Функция жылдам және дисплейдің жедел жадына өзгеріссіз орындалады. |
scrollDisplayLeft(); Дисплей координаттарын бір бағанды солға жылжытады. |
|
scrollDisplayRight(); Дисплей координаттарын бір бағанды оңға жылжытады. Бұл функцияның тұрақты шақыруы орындалатын жолдың әсерін жасайды. Координаттар дисплейдегі ақпарат үшін де, одан кейін көрсетілетін ақпарат үшін де ауыстырылады. |
Ескертпе: Функция дисплейдің жедел жадын өзгертпей орындалады. Функцияны қатарынан 40 рет шақырсаңыз, координат бастапқы нүктеге оралады |
clear(); Курсорды 0,0 мәніне орнату арқылы дисплейді тазалау. Дисплейдегі ақпарат біржола жойылады. |
Ескерту: көп уақыт алады. |
артқы жарық(); Дисплейдің артқы жарығын қосыңыз. |
|
noBacklight(); Дисплейдің артқы жарығын өшіріңіз. |
Ескерту: Функция тек LiquidCrystal_I2C кітапханасында орындалады. |
setBacklight(жалау );
Артқы жарықты басқару (noBacklight және артқы жарық функцияларының орнына). |
Параметр:
|
Курсорды басқару функциялары:
setCursor(кол ,
қатар );
Курсорды көрсетілген орынға орнатады. |
Параметр:
|
үй(); Курсорды 0,0 позициясына қойыңыз. setCursor(0,0) сияқты жұмыс істейді; |
Ескерту: көп уақыт алады. |
жыпылықтау(); Жыпылықтап тұрған курсорды қосыңыз. |
Ескертпе: Курсор бүкіл таңба өрісін алады және ол бұрын орнатылған күйде шамамен 1 Гц жиілікте жыпылықтайды. |
noBlink(); Жыпылықтап тұрған курсорды өшіріңіз. |
Ескертпе: Курсор көрінбейтін болады, бірақ оның орны сақталады. |
курсор(); Курсордың астын сызуды қосыңыз. |
Ескертпе: Курсор астын сызу таңбасына өзгереді және ол бұрын орнатылған жерде орналасады. |
noCursor(); Курсордың астын сызуды өшіріңіз. |
Ескертпе: Курсор көрінбейтін болады, бірақ оның орны сақталады. |
Бағыт және туралау функциялары:
leftToRight(); Әрбір жаңа таңбадан кейін курсор орны бір бағанды оңға жылжыту керектігін көрсетеді. |
Ескертпе: «abc» мәтіні көрсетілсе, дисплейде «abc» көрсетіледі және мәтін курсордың бастапқы орнының оң жағында болады. (Әдеттегідей) |
rightToLeft(); Әрбір жаңа таңбадан кейін курсор орны бір бағанды солға жылжыту керектігін көрсетеді. |
Ескертпе: «abc» мәтіні көрсетілсе, дисплейде «cba» көрсетіледі және мәтін курсордың бастапқы орнының сол жағында болады. (Оңнан солға қарай жазу) |
noAutoscroll(); Болашақта мәтін курсордың бастапқы орнынан солға туралану керектігін көрсетеді. |
Ескерту: егер курсорды 10.0 позициясына қойып, мәтінді көрсетсеңіз, онда көрсетілген мәтіннің бірінші таңбасы осы күйде болады. (Әдеттегідей) |
autoscroll(); Болашақта мәтін курсордың бастапқы орнынан оң жаққа туралану керектігін көрсетеді. |
Ескерту: егер курсорды 10.0 позициясына қойып, мәтінді көрсетсеңіз, онда курсор осы позицияда орналасады. (Көрсетілген мәтінде қанша әріп болса, сонша рет scrollDisplayLeft функциясын шақырғандай дисплей координаттары солға жылжытылады) |
Мәтінді және таңбаны енгізу функциялары:
createChar(сан,массив); Көрсетілген нөмірде дисплейдің CGRAM-ге теңшелетін таңбаны жазыңыз. Орнатылған таңбаны қамтитын мәтінді (басып шығару функциясын пайдаланып) басып шығарғыңыз келсе, қиғаш сызықты және осы таңба жазылған санды көрсетіңіз: print("C\1MBO\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()( // тикерді ауыстыру егер(beg_str)( // келесі таңбаны ең оң жақ орынға жазыңыз lcd_gotoxy(15,1); |
Глоссарий: n_sim – бастапқы жолдағы ағымдағы символдың орнына нұсқағыш; m_end – бастапқы жолдағы символдардың жалпы саны; beg_str- ауыстыруды қосу биті. Оның көмегімен сіз «жүгіру» жылдамдығын реттей аласыз; ish_str - бастапқы жол. |
Сірә, қолданыстағы C компиляторларының әрқайсысында HD44780-мен жұмыс істеуге арналған кітапхана функциялары бар. Сондықтан «сіздің» компиляторыңыз үшін бағдарламаны «қайта жасау» қиын болмайды.
Мен белгілі «HD44780.exe» утилитасының көмегімен бастапқы жолды «пісіремін». Оны пайдаланған кезде түсініктемелер жолдың ұзындығын көрсетеді: "/* Жолдың максималды ұзындығы: 43 байт */"