LCD драйвер - UC1601s

Светомузыка music color

Проекты для радио любителей.

LCD драйвер - UC1601s


Автор Гена Чернов.

Раздел обновлен!!!

Последние обновление на сайте http://illissi.com, Графическая библиотека для LCD драйвера UC1601s V2.0.1.



В настоящий момент можно приобрести на фирме Гамма-Украина несколько типов индикаторов на драйвере UC1601s.
RDX0048-GC, RDX0077-GS, RDX0154-GC, RDX0120-GC все они выполнены по технологии COG.


Справочные материалы
Описание драйвера оригинал
Русское описание (свободный перевод)


Внешний вид индикатора RDX0154-GC и подсветки к нему. Напряжение питания индикатора 3,3v.

Схема подключения


Графический индикатор хорош, когда для него есть инструмент, для работы.

Поэтому была написана библиотека для работы с индикатором. Библиотека написана с использование компилятора HI-TECH C v9.66. Включает в себя Знакогенератор полностью совместимый с кодировкой Windows. Теперь можно «просто» набирать текст незаботясь о совместимости кодировок. Библиотека состоит из 21 фунции которые включают в себя и функции работы с шиной I2C.

// для работы с I2C
void I2C_Open (void); // настройка MSSP модуля
void i2c_idle (void); // проверка на готовность I2C устройства к работе
void i2c_stop (void); // формирование стоп
char i2c_start (char adres, char C_D, char R_W); // адрес устройства и управление младшими битами
char i2c_restart (char adres, char C_D, char R_W);
char i2c_write (char data); //запись байта
char i2c_read_ack (void); //чтение с подтвеждением
char i2c_read_noack (void); //чтение без подтеждения

// для работы с индикатором
void int_LCD (void); // инициализация
void clear_LCD (void); // очиска всего дисплея
void curcorG_LCD (char X,char Y); // установка курсора

// вывод строк
void String_LCD(const char *str,char inv,char width,char height,char X,char Y); // , char строка, ширина, высота, центрирование (22 символа в строке)
void Stringp_LCD(const char *str,char inv,char width,char height);

// вывод символа или числа
void symbol_LCD (int cod,char tip,char inv,char shi,char vis);

// бегущая строка
void ticker_LCD (const char *str,char start,char ends,char Y); //с ПЗУ
void tickerB_LCD (char dlinok,char start,char Y); // с озу

// для работы с индикатором графические приметивы
void point (int tip, int X, int Y); // точка
void line(int tip, int x0, int y0, int x1, int y1); // линия
void rectangle (int ugl, int tip,int zal,int tipzal, int x0, int y0, int x1, int y1);//прямоугольник
void strip (int ugl,int tip,int tipzal, int x0, int y0, int sh, int vs, char vol);// линейный индикатор


Система координат графической библиотеки.
Для простоты система принята с нулем в вернем левом углу.
Все примитивы выводятся с точки привязки - верний левый угол.



Рисование точек
Для прорисовки использовался пример
for (a=0;a<400;a++) point (1, rand()%131, rand()%62);



Пример рисования линий.
Для рисования использовался алгоритм Брезенхема.
Для прорисовки использовался пример:
for (a=0;a<10;a++) line (1, rand()%131, rand()%50, rand()%131, rand()%50);
line( 2, 0, 51, 131, 51);
line( 7, 0, 54, 131, 54);
line( 4, 0, 57, 131, 57);
line( 6, 0, 60, 131, 60);



Рисование прямоугольников.
Для рисования использовался пример:
rectangle( 1,1,2,0, 0, 3, 131, 60);
//1-тип угла,2-тип бордюра,3-толщина бордюра,4-тип заливки,5/6-координаты вернего левого угла, ширина и высота.
rectangle( 0,0,0,3, 55, 10, 25, 25);
rectangle( 0,0,0,4, 70, 20, 25, 25);
rectangle( 0,0,0,7, 85, 30, 25, 25);
rectangle( 0,1,1,1, 10, 10, 25, 11);
rectangle( 0,1,1,2, 15, 15, 25, 11);
rectangle( 0,1,1,3, 20, 20, 25, 11);
rectangle( 0,1,1,4, 25, 25, 25, 11);
rectangle( 1,1,1,1, 55, 30, 25, 11);
rectangle( 1,1,1,2, 50, 35, 25, 11);
rectangle( 1,1,1,3, 45, 40, 25, 11);
rectangle( 1,1,1,4, 40, 45, 25, 11);
rectangle( 0,2,1,1, 100, 10, 25, 11);
rectangle( 0,1,1,1, 100, 24, 25, 11);
rectangle( 1,1,3,1, 100, 38, 25, 20);
rectangle( 1,6,1,0, 5, 40, 26, 15);
rectangle( 0,1,1,0, 53, 22, 30, 30);



Индикатор загрузки, линейный индикатор…
Для рисования использовался пример:
strip (0,1,3,10,11,110,10,70);
String_LCD (" Индикатор - 70%",0,0,0,-1,1);
String_LCD ("Значение 0-100%",0,0,0,-1,25);
String_LCD ("Размеры и положение",0,0,0,-1,33);
String_LCD ("произвольные",0,0,0,-1,41);



Прорисовка символов и строк.
Можно прорисовывать как отдельный символ (цифру), так и строку. Вывод строк может непосредственно или символьного массива. Символы могут выводиться в прямом так и в инверсном изображении. Поддерживается автоматическая центровка строки на индикаторе.
Бегущая строка она представляет собой упрощенный вариант вывода строк, так как такие функции должны потреблять мало ресурсов контроллера. За один вызов она выводит 1 символ в окно. Определено 2 функции для вывода строк из ПЗУ программ и из ОЗУ для индикации динамических данных.

Пример прорисовки:
String_LCD ("Привет мир!",1,0,0,-1,1);
String_LCD ("АБВГабвгABCDabcd012",0,0,0,-1,10);
String_LCD ("!@#$%^&*()+-*/",0,0,0,-1,18);
String_LCD ("2шир ",0,1,0,10,26);
Stringp_LCD ("3шир",0,2,0);
String_LCD ("4шир",0,4,0,15,34);
String_LCD ("45.6",0,2,1,-1,45);



Демонстрация



Файлы для загрузки

Схема подключения индикатора к контроллеру и библиотека с демопрограммой на Си HITECH v 9.66.

Библиотека и демонстрационный пример
Схема подключения индикатора для тестирования


Версия библиотеки для работы с компилятором HI-TECH Software PICC-18 v9.80.

Библиотека и демонстрационный пример HI-TECH Software PICC-18 v9.80

Причина обновления
компилятор  HI-TECH Software PICC-18 v9.80 некорректно компилирует выражение типов (циклический сдвиг "по кругу", для 32 битных чисел)

   
mask=(mask << 1)|(mask >> 31); где mask тип -  unsigned long (32 бита)

обойти это можно разбив это выражение на три части:
   
mask1=(mask << 1);
    mask2=(mask >> 31);
    mask=mask1 | mask2;


Последняя версия корректно работает и на компиляторе версии 9.66.


Все вопросы на форуме сети d-lan раздел Электроника или E-mail: gchernov@mail.ru


 


Украина, Днепропетровск