SamPawno
Ремонт шлейфа дисплея Nokia 5110 84×48
#1 Дим » 17 июня 2019, 22:00
Adafruit_PCD8544 display = Adafruit_PCD8544 ( 3 , 4 , 5 , 6 , 7 );
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
static const unsigned char PROGMEM logo16_glcd_bmp [] =
< B00000001 , B00000000 ,
B00000101 , B01000000 ,
B00000011 , B10000000 ,
B00100001 , B00001000 ,
B11000001 , B00000110 ,
B00110001 , B00011000 ,
B01001101 , B01100100 ,
B00000011 , B10000000 ,
B00000011 , B10000000 ,
B01001101 , B01100100 ,
B00110001 , B00011000 ,
B11000001 , B00000110 ,
B00100001 , B00001000 ,
B00000011 , B10000000 ,
B00000101 , B01000000 ,
B00000001 , B00000000 >;
void setup () <
Serial . begin ( 9600 );
display . begin ();
display . cp437 ( true );
// инициализация выполнена
// вы можете изменить контраст вокруг, чтобы адаптировать дисплей
// для лучшего просмотра!
display . setContrast ( 50 );
display . display (); // показать заставку
delay ( 2000 );
display . clearDisplay (); // очищает экран и буфер
//goto metka; // russian font
// нарисовать один пиксель
display . drawPixel ( 10 , 10 , BLACK );
display . display ();
delay ( 2000 );
display . clearDisplay ();
//рисовать много линий
testdrawline ();
display . display ();
delay ( 2000 );
display . clearDisplay ();
// рисовать прямоугольники
testdrawrect ();
display . display ();
delay ( 2000 );
display . clearDisplay ();
//нарисовать несколько прямоугольников
testfillrect ();
display . display ();
delay ( 2000 );
display . clearDisplay ();
// нарисовать несколько кругов
testdrawcircle ();
display . display ();
delay ( 2000 );
display . clearDisplay ();
// нарисовать круг, радиус 10 пикселей
display . fillCircle ( display . width ()/ 2 , display . height ()/ 2 , 10 , BLACK );
display . display ();
delay ( 2000 );
display . clearDisplay ();
testdrawroundrect ();
delay ( 2000 );
display . clearDisplay ();
testfillroundrect ();
delay ( 2000 );
display . clearDisplay ();
testdrawtriangle ();
delay ( 2000 );
display . clearDisplay ();
testfilltriangle ();
delay ( 2000 );
display . clearDisplay ();
12 символов в шрифте
testdrawchar ();
display . display ();
delay ( 2000 );
display . clearDisplay ();
// тесты отображения текста
display . setTextSize ( 1 );
display . setTextColor ( BLACK );
display . setCursor ( 0 , 0 );
display . println ( «Hello, world!» );
display . setTextColor ( WHITE , BLACK ); //«перевернутый» текст
display . println ( 3.141592 );
display . setTextSize ( 2 );
display . setTextColor ( BLACK );
display .print( «0x» ); display . println ( 0xDEADBEEF , HEX );
display . display ();
delay ( 2000 );
//пример вращения
display . clearDisplay ();
display . setRotation ( 1 ); // повернуть на 90 градусов против часовой стрелки, также можно использовать значения 2 и 3, чтобы идти дальше.
display . setTextSize ( 1 );
display . setTextColor ( BLACK );
display . setCursor ( 0 , 0 );
display . println ( «Rotation» );
display . setTextSize ( 2 );
display . println ( «Example!» );
display . display ();
delay ( 2000 );
// вернуться обратно без вращения
display . setRotation ( 0 );
//metka:
// russian font
display . clearDisplay ();
display . setTextColor ( BLACK );
display . setCursor ( 0 , 0 );
display . setTextSize ( 1 );
display . println ( utf8rus ( «Шрифт 1» ));
display . setTextSize ( 2 );
display . println ( utf8rus ( «Шрифт2» ));
display . setTextSize ( 3 );
display . println ( utf8rus ( «Шр3» ));
display . display ();
delay ( 5000 );
// миниатюрный растровый дисплей
display . clearDisplay ();
display . drawBitmap ( 30 , 16 , logo16_glcd_bmp , 16 , 16 , 1 );
display . display ();
// invert the display
display . invertDisplay ( true );
delay ( 1000 );
display . invertDisplay ( false );
delay ( 1000 );
// нарисовать растровую иконку и анимировать движение
testdrawbitmap ( logo16_glcd_bmp , LOGO16_GLCD_WIDTH , LOGO16_GLCD_HEIGHT );
>
void testdrawbitmap ( const uint8_t * bitmap , uint8_t w , uint8_t h ) <
uint8_t icons [ NUMFLAKES ][ 3 ];
randomSeed ( 666 ); // какое бы семя
// инициализировать
for ( uint8_t f = 0 ; f NUMFLAKES ; f ++) <
icons [ f ][ XPOS ] = random ( display . width ());
icons [ f ][ YPOS ] = 0 ;
icons [ f ][ DELTAY ] = random ( 5 ) + 1 ;
Serial .print( «x: » );
Serial .print( icons [ f ][ XPOS ], DEC );
Serial .print( » y: » );
Serial .print( icons [ f ][ YPOS ], DEC );
Serial .print( » dy: » );
Serial . println ( icons [ f ][ DELTAY ], DEC );
>
while ( 1 ) <
// нарисовать каждый значок
for ( uint8_t f = 0 ; f NUMFLAKES ; f ++) <
display . drawBitmap ( icons [ f ][ XPOS ], icons [ f ][ YPOS ], logo16_glcd_bmp , w , h , BLACK );
>
display . display ();
delay ( 200 );
// затем стереть + переместить
for ( uint8_t f = 0 ; f NUMFLAKES ; f ++) <
display . drawBitmap ( icons [ f ][ XPOS ], icons [ f ][ YPOS ], logo16_glcd_bmp , w , h , WHITE );
//подвинь это
icons [ f ][ YPOS ] += icons [ f ][ DELTAY ];
//если его нет, реините
if ( icons [ f ][ YPOS ] > display . height ()) <
icons [ f ][ XPOS ] = random ( display . width ());
icons [ f ][ YPOS ] = 0 ;
icons [ f ][ DELTAY ] = random ( 5 ) + 1 ;
>
>
>
>
void testdrawchar ( void ) <
display . setTextSize ( 1 );
display . setTextColor ( BLACK );
display . setCursor ( 0 , 0 );
for ( uint8_t i = 0 ; i 168 ; i ++) <
if ( i == ‘\n’ ) continue ;
display . write ( i );
//if ((i > 0) && (i % 14 == 0))
//display.println();
>
display . display ();
>
void testdrawcircle ( void ) <
for ( int16_t i = 0 ; i display . height (); i += 2 ) <
display . drawCircle ( display . width ()/ 2 , display . height ()/ 2 , i , BLACK );
display . display ();
>
>
void testfillrect ( void ) <
uint8_t color = 1 ;
for ( int16_t i = 0 ; i display . height ()/ 2 ; i += 3 ) <
// alternate colors
display . fillRect ( i , i , display . width ()- i * 2 , display . height ()- i * 2 , color % 2 );
display . display ();
color ++;
>
>
void testdrawtriangle ( void ) <
for ( int16_t i = 0 ; i min ( display . width (), display . height ())/ 2 ; i += 5 ) <
display . drawTriangle ( display . width ()/ 2 , display . height ()/ 2 — i ,
display . width ()/ 2 — i , display . height ()/ 2 + i ,
display . width ()/ 2 + i , display . height ()/ 2 + i , BLACK );
display . display ();
>
>
void testfilltriangle ( void ) <
uint8_t color = BLACK ;
for ( int16_t i = min ( display . width (), display . height ())/ 2 ; i > 0 ; i -= 5 ) <
display . fillTriangle ( display . width ()/ 2 , display . height ()/ 2 — i ,
display . width ()/ 2 — i , display . height ()/ 2 + i ,
display . width ()/ 2 + i , display . height ()/ 2 + i , color );
if ( color == WHITE ) color = BLACK ;
else color = WHITE ;
display . display ();
>
>
void testdrawroundrect ( void ) <
for ( int16_t i = 0 ; i display . height ()/ 2 — 2 ; i += 2 ) <
display . drawRoundRect ( i , i , display . width ()- 2 * i , display . height ()- 2 * i , display . height ()/ 4 , BLACK );
display . display ();
>
>
void testfillroundrect ( void ) <
uint8_t color = BLACK ;
for ( int16_t i = 0 ; i display . height ()/ 2 — 2 ; i += 2 ) <
display . fillRoundRect ( i , i , display . width ()- 2 * i , display . height ()- 2 * i , display . height ()/ 4 , color );
if ( color == WHITE ) color = BLACK ;
else color = WHITE ;
display . display ();
>
>
void testdrawrect ( void ) <
for ( int16_t i = 0 ; i display . height ()/ 2 ; i += 2 ) <
display . drawRect ( i , i , display . width ()- 2 * i , display . height ()- 2 * i , BLACK );
display . display ();
>
>
void testdrawline () <
for ( int16_t i = 0 ; i display . width (); i += 4 ) <
display . drawLine ( 0 , 0 , i , display . height ()- 1 , BLACK );
display . display ();
>
for ( int16_t i = 0 ; i display . height (); i += 4 ) <
display . drawLine ( 0 , 0 , display . width ()- 1 , i , BLACK );
display . display ();
>
delay ( 250 );
display . clearDisplay ();
for ( int16_t i = 0 ; i display . width (); i += 4 ) <
display . drawLine ( 0 , display . height ()- 1 , i , 0 , BLACK );
display . display ();
>
for ( int8_t i = display . height ()- 1 ; i >= 0 ; i -= 4 ) <
display . drawLine ( 0 , display . height ()- 1 , display . width ()- 1 , i , BLACK );
display . display ();
>
delay ( 250 );
display . clearDisplay ();
for ( int16_t i = display . width ()- 1 ; i >= 0 ; i -= 4 ) <
display . drawLine ( display . width ()- 1 , display . height ()- 1 , i , 0 , BLACK );
display . display ();
>
for ( int16_t i = display . height ()- 1 ; i >= 0 ; i -= 4 ) <
display . drawLine ( display . width ()- 1 , display . height ()- 1 , 0 , i , BLACK );
display . display ();
>
delay ( 250 );
display . clearDisplay ();
for ( int16_t i = 0 ; i display . height (); i += 4 ) <
display . drawLine ( display . width ()- 1 , 0 , 0 , i , BLACK );
display . display ();
>
for ( int16_t i = 0 ; i display . width (); i += 4 ) <
display . drawLine ( display . width ()- 1 , 0 , i , display . height ()- 1 , BLACK );
display . display ();
>
delay ( 250 );
>
/* Перекодировать русские шрифты из UTF-8 в Windows-1251 */
String utf8rus ( String source )
<
int i , k ;
String target ;
unsigned char n ;
char m [ 2 ] = < '0' , '\0' >;
k = source . length (); i = 0 ;
while ( i k ) <
n = source [ i ]; i ++;
if ( n >= 0xC0 ) <
switch ( n ) <
case 0xD0 : <
n = source [ i ]; i ++;
if ( n == 0x81 ) < n = 0xA8 ; break ; >
if ( n >= 0x90 && n 0xBF ) n = n + 0x30 ;
break ;
>
case 0xD1 : <
n = source [ i ]; i ++;
if ( n == 0x91 ) < n = 0xB8 ; break ; >
if ( n >= 0x80 && n 0x8F ) n = n + 0x70 ;
break ;
>
>
>
m [ 0 ] = n ; target = target + String ( m );
>
return target ;
>
Источник
Обзор LCD дисплея Nokia 5110
Автор: Сергей · Опубликовано 26.12.2020 · Обновлено 25.12.2020
В предыдущих статьях рассказывал как вывести информацию на LCD1602, OLED и TFT дисплеи их часто можно встретить в различных проектах. В этой статье расскажу об еще одном дисплеи NOKIA 5110, который так же очень популярный. Главной особенность этого дисплея является способность выводить не только текст, но и графические данные.
Технические параметры:
► Контроллере PCD8544;
► Разрешение экрана: 84 x 48 точек;
► Размеры экрана: 36 х 24 мм;
► Напряжение питания логики: 2,7 – 3,3В;
► Габариты: 43,8 х 43,4 х 13,2 мм;
► Вес: 14 г.
Описание дисплея Nokia 5110
Дисплей Nokia 5110 управляется с помощью контроллера PCD8544 (производитель Philips). Контроллер управляет дисплеем с разрешением 84 × 48 пикселей, в качестве связи с микроконтроллером (arduino) используется интерфейс последовательной шины, аналогичный SPI. Согласно документации, чип PCD8544 работает диапазоне от 2,7 до 3,3 В в том числе и логическая часть. Таким образом, при подключении к пяти вольтной Arduino необходимо понизить логическое напряжение до 3В.
Назначение контактов.
► RST — Сброс дисплея, при логическом нуле происходит сброс изображения на дисплеи.
► CE — включение чипа. при логическом нуле чип активен.
► D/C — сообщение дисплею, являются ли данные команда или отображаемыми данными.
► DIN — вывод последовательных данных для интерфейса SPI.
► CLK — вывод последовательного тактового сигнала для интерфейса SPI.
► VCC — вывод питания для ЖК-дисплея.
► BL — управляет подсветкой дисплея. Чтобы контролировать его яркость, вы можете добавить потенциометр или подключить этот вывод к любому выводу Arduino с поддержкой ШИМ.
► GND — земля.
Подключение LCD дисплея Nokia 5110 к Arduino
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Графический LCD дисплей Nokia 5110 — 84×84 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Резистор 1 кОм, 0.125 Вт x 5 шт.
► Резистор 330 Ом, 0.125 Вт x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
Подключение:
Подключение не сложено и так как мы используем программный SPI, можно использовать любые цифровые контакты Arduino. В примере выводы CLK, DIN, DC, CE и RST от дисплея подключаем в выводам Arduino от 7 до 3. Так как дисплей не льзя подключать напрямую к Arduino, воспользуемся самым простым способом, добавим резисторы 10 кОм между выводами CLK, DIN, D/C и RST и резистор 1 кОм между контактами CE. А вывод подсветки (BL) подключен к 3,3 В через токоограничивающий резистор 330 Ом.
Установка библиотек:
Для работы с дисплеем Nokia 5110 необходимо установить две библиотеку «Adafruit PCD8544 Nokia 5110 LCD» и «Adafruit GFX» Чтобы установить библиотеки, перейдите в Скетч —> Подключить библиотеку —> Управление библиотеками.
В строке поиска введите «nokia», найдите библиотеку «Adafruit PCD8544 Nokia 5110 LCD» и установите данную библиотеку.
Теперь установим вторую библиотеку, вводим в поиск «Adafruit GFX» и устанавливаем «Adafruit GFX Library«
Программа:
Теперь запускаем среду разработку Arduino IDE и загружаем скетч в контроллер.
Источник