Понеділок, 20.11.2017, 23:52
Приветствую Вас Гість | RSS

Radiomanoff+

Меню сайта
Форма входа
Календарь
«  Листопад 2017  »
ПнВтСрЧтПтСбНд
  12345
6789101112
13141516171819
20212223242526
27282930

LCD дисплей 128x64 (ST7920) - u8glib,SPI,AVRStudio,руссификация

ST7920 - u8glib,SPI,AVRStudio,руссификация
 
 
Недавно мной на одном интернет-аукционе был куплен лот "LCD дисплей графический 128x64 точки с голубой подсветкой белыми символами. Контроллер - ST7920".В сети нашлась библиотека u8glib свободно распостраняемая по GNU-лицензии - https://code.google.com/p/u8glib/wiki/avr.Имеются варианты библиотеки для Arduino,ARM,меня же интересовал вариант U8glib for AVR ,поскольку планировалось использование AVRStudio 4,19.
 
В качестве микоконтролера использована Atmega328 (а точнее плата Arduino Pro Mini),кварц 16МГц.Подключал по SPI тремя проводами.Практически все заявленые авторами библиотеки функции поверил,вот практические примеры:
 
  //u8g_DrawBox(&u8g, 3,21,20,10);//заполненный пикселями прямоугольник (x,y,длина,высота)
 
  //u8g_DrawFrame(&u8g, 0,18,26,16);//незаштрихованный прямоугольник
 
  //u8g_DrawCircle(&u8g, 120,6,5,U8G_DRAW_ALL);//нарисовать полную окружность (x,y,radius)
                                           
  //u8g_DrawDisc(&u8g, 110,6,5,U8G_DRAW_ALL); //нарисовать полную окружность заполненyю пикселями
                                            //u8g_DrawDisk(&u8g, x, y, rad, [options])
 
  //u8g_DrawEllipse(&u8g,82,6,8,4,U8G_DRAW_ALL);//нарисовать элипс
 
  //u8g_DrawFilledEllipse(&u8g,92,6,8,4,U8G_DRAW_ALL);//нарисовать элипс заполненный пикселями
 
  //u8g_DrawHLine(&u8g,0,14,128);//нарисовать линию (x,y,длина)
 
  //u8g_DrawLine(&u8g,20,16,108,16);//нарисовать линию (начало x,y - конец x,y)
   
  //u8g_DrawRFrame(&u8g, 28,18,26,16,5);//прямоугольниу с закругленными краями (x,y,h,l,radius)
 
  //u8g_DrawTriangle(&u8g,56,18,65,26,56,34);//треугольник
 
  //u8g_DrawVLine(&u8g,67,18,16);//нарисовать вертикальную линию (x,y,высота)
 
  //void u8g_DrawXBM(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, const uint8_t *bitmap)
 
  //u8g_int_t u8g_getFontLineSpacing ( u8g_t * u8g ) - межстрочный интервал
 
Меня интересовала еще "руссификация" дисплея.В библиотеке имеется кириличный шрифт - u8g_font_unifont_0_8. 
Оказалось скорей всего ,есть ошибки в самом шрифте,высвечивается символ из этого шрифта который находится в таблице над тем символом который я пишу в исходнике.
 
 
Даю полное описание соответствий символов:
 
  u8g_DrawStr(&u8g, 0, 12, "\260\261Ііґ\265\266\267ё№є\273јЅѕї");  //выводит текст АБВГДЕЖЗИЙКЛМНОП
 
  u8g_DrawStr(&u8g, 0, 25, "АБВГДЕЖЗИЙКЛМНОП");  //выводит текст РСТУФХЦЧШЩЪЫЬЄЮЯ
 
  u8g_DrawStr(&u8g, 0, 38, "РСТУФХЦЧШЩЪЫЬЭЮЯ");  //выводит текст абвгдежзийклмноп
 
  u8g_DrawStr(&u8g, 0, 50, "абвгдежзийклмноп");  //выводит текст рстуфхцчшщъыьэюя
 
  u8g_DrawStr(&u8g, 13, 64, "Hello World!!!");  //выводит текст на английском,здесь буквы соответствуют
 
 
http://yadi.sk/d/1EuM3dLkJcHoa - пример "Hello World" (AVR Studio 4.19).
 
http://yadi.sk/d/wiBZG5m3K623z - пример "Русский алфавит" (AVR Studio 4.19).
 
Следующим шагом моих експерементов было - вывод переменой на екран LCD.
В AVR Studio это оказалось довольно муторным делом.Дело в том что специальной функции для вывода переменой в библиотеке нет - https://code.google.com/p/u8glib/wiki/userreference .Мне же хотелось подключить часы реального времени на DS1307. Пообщавшись там же на форуме, выяснилось, что нужно применять функцию sprintf :
 
- sprintf(str, "%02d:%02d", h, m); where str is the string, h hour and m minutes.
 
Простой пример Atmega328 + DS1307+LCD(st7920)
 
 
 
http://yadi.sk/d/vmicCa8nKGnVW - файл проекта для AVR Studio 4.19,добавлено еще день недели(цифрой).
 
LCD подключен по SPI тремя проводами.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Архив записей
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0