Библиотека за показване на символи, базирана на HD44780
Бих искал да представя на вашето внимание моята собствена библиотека за работа с широко разпространени символни дисплеи, базирани на контролера HD44780.
Фиг.1 HD44780 базиран на контролер дисплей (2 реда X 16 знака).Библиотеката е написана на C#, в Atmel Studio 6.2. Библиотеката се състои от два файла: HD44780_Config.h и HD44780.c. Първият файл е заглавен файл и той всъщност е включен във вашия проект в процес на разработка с помощта на директивата #include "HD44780_Config.h". Освен това в този файл ние предписваме всички първоначални настройки, от които се нуждаем. Ето всъщност изходния код на този хедър - конфигурационен файл:
Този макрос определя как искате да свържете вашия дисплей към микроконтролера - 4-жилен (Data_Length 0) или 8-жилен (Data_Length 1).
Фиг.2 Схеми за свързване на дисплея към MKа) 8-жилен б) 4-жилен
Ако изберете 4-жилен, след това малко по малко запишете портовете на MK, към които са свързани линиите на дисплея към този макрос:
Например, където PORT_bus_4 е името на MCU порта, към който е свързана линията на DB4 дисплей. Подобно с битовия запис на порта: PIN_bus е битовият номер на порта, към който е свързана линията на DB4 дисплей.
Ако изберете 8-жилен, след това малко по малко запишете портовете на MK, към които са свързани линиите на дисплея към този макрос:
Тук всичко е същото, само има повече жици. Защо такива трудности, ще попитате? Отговорът е прост - благодарение на това можете да свържете линиите на дисплея абсолютно произволно на всички портове на MK, към които искате и чиито крака ще бъдат свободни. Просто често се случва, че когато проектирате устройство, не е възможно да запазите цял порт абсолютно свободен. Често се сблъсквах с товапроблем и го реши по този начин. Тук не сте обвързани с конкретни крака на MK, какви числа пишете и имената на портовете в горните макроси за настройка, вашият дисплей ще работи по тези линии на микроконтролера.
Останалите макроси и функции, мисля, няма да създадат трудности при използване, тъй като тяхното описание е дадено директно в изходния код на заглавния файл. Единствената функция, на която бих искал да обърна допълнително внимание, е функцията за запис на потребителски символи в CGRAM паметта, които не са в ASCI таблицата:
LCD_UserSymbolsWrite(uchar Addr, uchar *данни);
И така, малко се отклоних от темата. Писане на потребителски символи на дисплея. - За да опростя тази задача, в допълнение към библиотеката написах проста програма:
Фиг.3 Външен вид на програмата за рисуване на потребителски знациСините квадрати съответстват на неактивираните пиксели на сегмента на дисплея. С щракване на мишката тези пиксели могат да се превключват между видими и невидими. Програмата изчислява стойностите на байтовете данни и автоматично създава готов масив от един символ Symbol[8], състоящ се от осем байта. След като приключите с рисуването на вашия символ, копирайте целия масив във вашия проект и го натиснете в паметта на дисплея с функцията LCD_UserSymbolsWrite по следния начин:
&Symbol[0] - указател към нулевия (началния) елемент на масива с данни за сегмента.
Пример за използване е приложен към статията, там можете да видите конкретно тялото на програмата + има проект в Proteus.
Фиг.4 Външен вид на програмата за рисуване на потребителски символи с готовия резултат Фиг. 5 и 6 Илюстрация на работаКато цяло всичко изглежда така. Ако нещо не е ясно, прочетететук: http://cxem.net/mc/book52.php.