Размер шрифта:
Технические характеристики LCD Nokia3310:
Play

Технические характеристики LCD Nokia3310:

- Напряжение питания 2,7 – 3,3 В- Встроенный контроллер Philips PCD8544- Интерфейс SPI - Размер дисплея 38х35 мм- Размер активной области 30х22 мм- Разрешение 84х48 пикселей- Диапазон рабочих температур –27…+70 0С

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

Распиновка LCD Nokia3310

Программная часть

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

void LCDInit(void)

void LCDClear(void) Полностью очищает дисплей.

void LCDStr(unsigned char x, unsigned char row, unsigned char *dataPtr )

Пример:LCDStr(0, 2, “lcd Nokia3310” );

Related items
  • Библиотека для опроса кнопок
  • Работа с SD картой. Воспроизведение wav файла. Ч3
  • Работа с SD картой. Подключение к микроконтроллеру. Ч1
  • AVR315: Использование TWI модуля в качестве ведущего I2C устройства
  • ATtiny10. Самый маленький микроконтроллер AVR
Comments

Итого, как я понимаю, в любом случае выводить придётся "посимвольно" - по 8 бит, причем начиная с ординаты, кратной восьми. Так?

в самой 3310 как я вижу весь текст имеет высоту 8 пикселей, но выводится он с произвольных точек (ордината не обязательно кратна восьми). Интересно, как сделано? надо даташит PCF8814 покурить, может там есть чего.

Я так понимаю что библиотека с буфером это как будто двойная буферизация в видеокарте - рисуем в нашем буфере, потом делаем апдейт аля SwapBuffers(). Так? А данные разые быстро передадутся? (у меня дисплей от 1100, там не SPI а чё-то другое, но принцип вроде похож)

и еще вопрос - сейчас Data Write именно _присваивает_ текущему байту заданное значение. А нет ли способов вместо присваивания делать, скажем, операции "И", "ИЛИ"? типа операции |= и &=

Всё же смотрю на мобилу, катаюсь по менюшкам и не могу понять - как же происходит вывод текста на экран в точку с координатами, некратными восьми.

А, я рановато обрадовался. Режимы вывода "И", "ИЛИ", "искл.ИЛИ" только для этой библиотеки. А я думал это вшито в драйвер дисплея.

Короче говоря, если возиться с дисплеем на низком уровне (ну или писать библиотеку самому с нуля) - то рисовать на нём можно ТОЛЬКО столбиками по 8 бит, затирая то что уже нарисовано под этим столбиком. Других способов рисования драйвер дисплея не предусматривает . Я правильно понял?

Решил тоже поиграться с таким дисплеем. Но видимо мне какой-то косячный попался.

Во-первых, разрешение у него 37х84 :oВо-вторых, столбики не по восемь точек идут, а вот так: 1 столбик на 4 точки, 5 столбов по 6 точек и 1 по 3. И когда я посылаю первую строку байтов, точки выводятся только под действием последних 4-х бит.

Это чё за хрень такая? Так и должно быть или я чё-то не так настроил? :-?

Не, кажись общитался :oops: . Высота всё-таки 48 пикселей. Проблема вот в чём. Посылаю допустим в память 0b00001111 84 раза, при этом с начала экрана выводится строка шириной 1 пикс (а должно по идее 4 пикселя и четыре пробела). Следующие строки идут нормально (по восемь пикселей). Ну и в последней строке остаётся только 3 пикселя. Короче говоря, получился сдвиг на 3 пикселя вверх, о причинах которого мне и хотелось бы узнать.

>Дисплей точно от Nokia3310? Скорее всего. Брал тут http://shop.siriust.ru/product_info.php/products_id/382

Большое спасибо за ссылку - пригодится.

Но тема все таки все еще актуальна (по ссылке проект с экраном от Nokia 1100, он даже выглядит немного иначе).

а как выводить дополнительные фонты?

вопрос снимается, я плохо код посмотрел :-)

PashGan Подскажи, как изменить контраст?Пишу дажеLCDInit(); LCDContrast(0x0 0); LCDClear(); LCDStr(0, 0, "Курсова робота");

но никаких изменений,?

Пожалуйста, объясните, где первая нога? Во всём интернете ни одной картинки и ни одного слова про это!

Вот дисплей: смотрю на него. На экран. Лично у меня он сзади чем-то закрыт: непрозрачный. Если б я мог насквозь видеть, то б эти 8 ног были сверху и рядом с правой (если продолжать смотреть на экран, а не на ноги) был б такой пластмассовый выступ.

я подключал как то дисплей от нокиа 1100 (на сириусте всего 50 руб стоит) - но у меня возникла проблема с контактами дисплея которые наклеены на стекло - при попытке подпаятся к ним - дисплей просто потом не работал (вернее сначала работал, потом работал если прижать контакты, а потом уже нифига не работал (ну может изредка).. извел я 3 или 4 дисплея и забросил эту идею..

может быть ктото придумал что нить дельное с подключением таких дисплеев ? чтобы и не паяться и контакт был надежный?

плохо себе эту процедуру представляю.. расстояние между выводами маленькое..- капли клея обязательно где нить расползутся и замкнут :-(

никто никаких колодок не делал (или может покупал где нить) для подобных дисплеев?

а какая разница сколько бит в строке ?сами процедуры не сильно отличаются.. Code: void LCD_pixel (unsigned char x, unsigned char y, unsigned char mode) < // вывод пиксела

if ((x<128)&&(y<64)) > точки я думаю понятно как рисовать..это для экрана 128 на 64 точки, поставьте свои размеры и вперед..правда конечно буфер экрана нужен ! без него никак при графикеа для линий смотрите в интернете алгоритм Брезенхейма - он есть для линий и для дуг..в принципе для линий я и на СИ и на Асме писал - действительно не сложный и быстрыйвот на си Code: void LCD_line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, char mode) < // процедура рисования линииsigned char dx, dy, sx, sy;unsigned char x, y, mdx, mdy, l;

if (mdx>=mdy) LCD_pixel(x,y,mode); x=x+sx; l--; > > else LCD_pixel(x,y,mode); y=y+sy; l--; > >> текст тоже можно написать процедуру чтобы выводить с точностью до пиксела.. причем символы не рисовать по точкам, а именно выводить верхнюю\нижнюю часть. К сожалению код сюда уже не уместился.

Ну и вот вывод текста с точностью до пиксела Code: void LCD_char(unsigned char ch, unsigned char mode) < // Вывод символаconst unsigned char *fontpointer;

if (mode==2) mode=lcd_blink; // если нужно отображать в режиме мерцания - то берем значение инверсии из lcd_blink

unsigned char lcd_YP=7- (lcd_Y & 0x07); // битовая позиция символа в байте unsigned char lcd_YC=(lcd_Y & 0xF8)/8; // байтовая позиция символа на экране

for (unsigned char x=0; x<6; x++)

lcd_buff[lcd_YC*128+lcd_X]=lcd_buff[lcd_YC*128+lcd_X] | (temp<<(7-lcd_YP)); // печать верхней части символа

if (lcd_YP<7) lcd_buff[(lcd_YC+1)*128+lcd_X]=lcd_buff[(lcd_YC+1)*128+lcd_X] | (temp>>(lcd_YP+1)); // печать нижней части символа

О! За Брезенхейма отдельный респект!А по поводу 84 бит, это фишка этого дисплея.Я хотел использовать без обработки формат XBM(который фактически является массивом на Си и его можно просто инклудить), еще его особенность что если длина строки не кратна 8ми то бит добивается нулями.А тут у экрана 84 бита на строку, а в XBM 88 бит на строку и чтобы вывести все приходится при новой строке явно указывать ее номер. Еще чудес добавляет то, что вывод 1ого байта это вывод колонки из 8ми пикселей. Я с компа привык к нормальной построчной адресации. Тут такого нет. Вот и хочется написать обертку чтобы было. И сделать свою демку с графикой. А если упрусь в возможности контроллера, то возьму покруче, но это уже MSP430-ый офтоп.Кстати вывод я только что переделал на вертикальную адресацию и там стало все хорошо ибо теперь по длине картинки 48бит.

ПС. Знаю что немного путано(

Pashgan приветствую. Решил сделать термометр с выводом комнатной и уличной температуры с использованием данного дисплея. Купил три дисплея (китайских)-зап орол два из них :cry: Кое как подключился к одному. Заметил что в последних 3-4 строках какой то мусор. вот мой код Code: #include <mega8.h>#include "driver_nokia3310.h"

void main( void ) Вот что получаю

Вопрос: откуда берется надпись "Pashgan"?Почему вместо counterProg получаю какую то муть и как увеличить контрастность дисплея?И можно ли убрать мусор из последних строк?

hawk то что у тебя мусор в последней строке это потому что дисплей китайский, а по поводу твоего кода объяснить не могу (потому что сам в си не силен) но подсказать как решить эту проблему могу.Я поступил следующим образомФункция sprintf стандартной библиотеки stdio.hsprintf – функция для вывода форматированных данных в строку.

Code: #include <mega8.h>#include <stdio.h>#include "driver_nokia3310.h" // использую lcd от siemens c55 unsigned char array[6]; unsigned char temp;

void main( void )

📎📎📎📎📎📎📎📎📎📎