- 16x2 матричен LCD контролер IC HD44780:
- Показване на персонализиран символ на 16x2 LCD:
- Програмиране и работно обяснение:
- Връзки на вериги и тестване:
В нашия предишен урок научихме как да свързваме 16 * 2 LCD с PIC микроконтролер. Препоръчваме ви да преминете през него, преди да продължите, ако сте начинаещ в PIC микроконтролера. Преди това ние също научихме основите на PIC, използвайки мигаща LED програма и таймери в PIC Microcontroller. Тук можете да проверите всички уроци по Изучаване на PIC микроконтролери, използващи MPLABX и XC8 компилатор.
В този урок нека го направим по-интересен, като създадем свои собствени персонализирани символи и ги покажем на нашия LCD екран с помощта на PIC16F877A PIC микроконтролер. Също така има някои предварително дефинирани най-често използвани персонализирани символи, дадени от самата интегрална схема HD44780A, ще видим и как можем да ги използваме. Както беше обяснено в предишния ни урок, на LCD дисплея има вграден контролер Hitachi HD44780, който ни помага да показваме символи. Всеки символ, който показваме, вече е предварително дефиниран в ROM на HD44780 IC. Ще научим за LCD контролера IC HD44780, преди да покажем символа на LCD.
16x2 матричен LCD контролер IC HD44780:
За да покажем персонализиран знак, трябва по някакъв начин да кажем на IC, че как ще изглежда персонализираният знак. За целта трябва да знаем за трите вида спомени, които се намират в интегралната схема на LCD контролера HD44780:
ROM за генератор на символи (CGROM): Това е паметта само за четене, която, както беше казано по-рано, съдържа всички модели на символите, предварително дефинирани вътре в нея. Този ROM ще се различава от всеки тип интерфейсна интегрална схема, а някои може да имат някои предварително дефинирани персонализирани символи със себе си.
Показване на RAM за данни (DDRAM): Това е памет с произволен достъп. Всеки път, когато показваме символ, неговият модел ще бъде извлечен от CGROM и прехвърлен в DDRAM и след това ще бъде поставен на екрана. Казано по-просто, DDRAM ще има шаблоните на всички символи, които в момента се показват на LCD екрана. По този начин за всеки цикъл IC не трябва да извлича данни от CGROM и помага за получаване на кратка честота на актуализация
Генератор на символи RAM (CGRAM): Това също е памет с произволен достъп, така че можем да записваме и четем данни от нея. Както подсказва името, тази памет ще бъде тази, която може да се използва за генериране на персонализиран символ. Трябва да формираме шаблон за героя и да го запишем в CGRAM, този шаблон може да бъде прочетен и показан на екрана, когато е необходимо.
Сега, тъй като получихме основно разбиране за видовете памет, присъстващи в интерфейса IC на HD44780. Нека да разгледаме неговия лист с данни, за да разберем малко повече.
Както подсказва таблицата с данни, HD44780 IC е предоставил като 8 местоположения за съхранение на нашите персонализирани модели в CGRAM, също вдясно можем да видим, че има някои предварително дефинирани символи, които също могат да бъдат показани на нашия LCD екран. Нека видим как можем да го направим.
Показване на персонализиран символ на 16x2 LCD:
За да покажем персонализиран знак, първо трябва да генерираме шаблон за него и след това да го запишем в CGRAM. Тъй като вече разполагаме с библиотечните функции, би трябвало да е лесно да се направи това с някои прости команди. Тук е библиотеката за LCD функции, но тук сме копирали всички библиотечни функции в самата програма, така че няма нужда да включваме този заглавен файл в нашата програма. Също така проверете тази статия за основната работа на LCD и неговите Pinouts.
Първата стъпка е да се генерира шаблон или персонализиран знак. Както знаем, всеки знак е комбинация от 5 * 8 точки. Трябва да изберем коя точка (пиксел) трябва да отиде високо и коя да остане ниска. Просто нарисувайте квадратче отдолу и засенчете регионите според вашия характер. Моят герой тук е мъж на клечка (надявам се да изглежда като такъв). Веднъж засенчени, просто напишете еквивалентната двоична стойност на всеки байт, както е показано по-долу.
Просто поставете „1“ върху сенчестата област и „0“ върху несенчената област за всеки байт и това е, че нашият персонализиран шаблон е готов. По същия начин направих 8 персонализирани кода на шаблони за нашите 8 пространства памет, които го представят CGROM. Те са изброени в таблицата по-долу.
S.NO: |
Персонализиран характер |
Код на модела |
1 |
|
0b01110, 0b01110, 0b00100, 0b01110, 0b10101, 0b00100, 0b01010, 0b01010 |
2 |
|
0b00000, 0b00000, 0b01010, 0b00100, 0b00100, 0b10001, 0b01110, 0b00000 |
3 |
|
0b00100, 0b01110, 0b11111, 0b11111, 0b01110, 0b01110, 0b01010, 0b01010 |
4 |
|
0b01110, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
5 |
|
0b01110, 0b10000, 0b10000, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
6 |
|
0b00000, 0b10001, 0b01010, 0b10001, 0b00100, 0b01110, 0b10001, 0b00000 |
7 |
|
0b00000, 0b00000, 0b01010, 0b10101, 0b10001, 0b01110, 0b00100, 0b00000 |
8 |
|
0b11111, 0b11111, 0b10101, 0b11011, 0b11011, 0b11111, 0b10001, 0b11111 |
Забележка: Не е задължително да се зареждат всички 8 места, предвидени в CGRAM.
Програмиране и работно обяснение:
Сега нашите кодове на шаблони са готови, просто трябва да ги заредим в CGRAM на LCD и да ги покажем с помощта на PIC микроконтролер. За да ги заредим в CGRAM, можем да формираме 5 * 8 масив от елементи и да заредим всеки байт с помощта на „ for loop “. Масивът от код на шаблон е показан по-долу:
const unsigned short Custom_Char5x8 = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010, // Код за пространство на паметта на CGRAM 1 0b00000,0b00000,0b01010,0b00100,0b00100,0b10001,0b01110,0b00, // CGRAM пространство на паметта 2 0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010, // Код за пространство на паметта CGRAM 3 0b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00000AM, код за CGRAM пространство 4 0b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000, // Код за пространство на паметта CGRAM 5 0b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000, // Код за пространство памет CGRAM 6 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000, // Код за пространство на паметта на CGRAM 7 0b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // Код за пространство за памет CGRAM 8};
Всяко пространство в паметта е заредено със своя уважаван модел на символи. За да заредите този модел в HD44780 IC, трябва да се посочи техническият лист на HD44780, но само командни редове могат да се използват за задаване на адреса на CGRAM
// *** Заредете персонализиран char в CGROM *** ////// Lcd_Cmd (0x04); // Задаване на CGRAM адрес Lcd_Cmd (0x00); //.. задаване на CGRAM адрес за (i = 0; i <= 63; i ++) Lcd_Print_Char (Custom_Char5x8); Lcd_Cmd (0); // Връщане към начало Lcd_Cmd (2); //.. връщане към начало // *** Зареждане на персонализиран знак завършен *** //////
Тук, в цикъла ' for' всяка двоична стойност се зарежда в CGROM. След като шаблонът бъде зареден, персонализираните символи могат да се покажат, като просто се извика местоположението на шаблона, като се използва функцията void Lcd_Print_Char (char data), както е показано по-долу.
Lcd_Print_Char (0); // Показване на персонализиран символ 0 Lcd_Print_Char (1); // Показване на персонализиран символ 1 Lcd_Print_Char (2); // Показване на персонализиран символ 2 Lcd_Print_Char (3); // Показване на персонализиран символ 3 Lcd_Print_Char (4); // Показване на персонализиран символ 4 Lcd_Print_Char (5); // Показване на персонализиран символ 5 Lcd_Print_Char (6); // Показване на персонализиран символ 6 Lcd_Print_Char (7); // Показване на персонализиран символ 7
Печат на предварително определен специален знак:
IC HD44780 има някои предварително дефинирани специални символи, съхранени в DDROM. Тези символи могат да бъдат директно отпечатани на екрана, като се позовават на неговата двоична стойност в листа с данни.
Например: Двоичната стойност на символа "ALPHA" е 0b11100000. Как да се получи това може да се разбере от фигурата по-долу, по същия начин можете да получите стойност за всеки специален знак, който е предварително дефиниран в IC.
След като двоичната стойност е известна, съответният знак може да бъде отпечатан на екрана, като просто използвате функцията void Lcd_Print_Char (char data), както е показано по-долу, Lcd_Print_Char (0b11100000); // двоична стойност на алфа от лист с данни
В пълния код на този проект е даден по-долу в раздел кодекс, проверете също и подробно видео обяснение в края на този урок.
Връзки на вериги и тестване:
Този проект няма никакви допълнителни хардуерни изисквания, ние просто използвахме същите връзки от предишния урок за взаимодействие с LCD и използвахме същата платка, която създадохме в урок за мигане на LED. Както винаги нека симулираме програмата, използвайки Proteus, за да проверим резултата си.
След като симулацията работи, както се очаква, позволява директно изгаряне на кода в нашата хардуерна настройка. Резултатът от програмата трябва да бъде нещо подобно:
Така че можете да покажете всеки персонализиран символ на 16x2 LCD, използвайки микроконтролера PIC с компилатор MPLABX и XC8. Също така проверете нашата пълна серия за обучение PIC Microcontroller Learning тук.