Когда телефоны были большими, а экранчики в них маленькие, протоколы общения между ними были очень просты. Учитывая цену на них сейчас, использовать такие дисплеи в своих проектах одно удовольствие. Например, у себя в городе приобрел дисплей от 3310 всего за 55 руб.
Это монохромный дисплей разрешением 48х84 пикселя, с контроллером PCD8544 поддерживающий последовательный интерфейс связи. Для работы дисплея требуется напряжение питания 3,3В и конденсатор 4,7мкФ. Распиновка контактов:
Дисплей идет в сборе с клавиатурой и динамиком, поэтому для универсальности отрезал все лишнее и собрал вот такой модуль:
Библиотеку для работы с дисплеем в Bascom-AVR взял отсюда. Эта библиотека позволяет выводить цифровую, текстовую и графическую информацию. Для подготовки картинок нашел замечательную программу FastLCD, которая шла под компилятор FastAVR, но после небольшой доработки выходного файла изображения, можно использовать с этой библиотекой. Для примера подготовил картинку в формате BMP разрешением 48 на 84 пикселя, картинка должна быть монохромной:
В программе создаем или загружаем уже подготовленный BMP-файл. Главное сначала создать новое изображение с нужным разрешением, так как по дефолту загружается поле 128х64 пикселей.
После создания изображения, перегоняем его в массив данных для библиотеки, кнопкой BAS. Получаем следующий код:
Который необходимо привести к такому виду (перед каждой строчкой ставим Data):
data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h80 data &hE0,&hF8,&hF8,&hF8,&hF0,&hC0,&h00,&h00 data &h08,&h08,&h18,&h38,&hF8,&hF8,&hF8,&hF8 data &hF8,&h08,&h08,&h00,&h00,&h00,&h00,&h00 data &h00,&h08,&h08,&hF8,&hF8,&h78,&h18,&h08 data &h08,&h00,&h08,&h08,&hD8,&hF8,&hF8,&hF8 data &hF8,&h78,&h08,&h08,&h08,&h08,&h18,&hF8 data &hF8,&hF0,&hF0,&hE0,&h00,&h00,&h00,&h00 data &h88,&h88,&h88,&h88,&h88,&h88,&h88,&h88 data &hF8,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&hC0,&hF0,&h3E,&h0F data &h01,&h03,&h0F,&h3F,&hFF,&hFF,&hFE,&hF8 data &hE0,&h00,&h00,&h00,&h01,&h07,&h1F,&hFF data &hFF,&hFF,&hFC,&hF0,&h80,&h00,&h00,&h00 data &hC0,&hF8,&h1F,&h07,&h01,&h00,&h00,&h00 data &h00,&h00,&h80,&hF8,&hFF,&hFF,&hFF,&h7F data &h27,&h60,&hE0,&hE0,&hF0,&hF8,&hDC,&h1F data &h0F,&h0F,&h07,&h01,&h00,&h00,&h00,&h00 data &h78,&h44,&h44,&h44,&h44,&h78,&h50,&h48 data &h44,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h80,&h80 data &hC0,&hE0,&hF8,&hFE,&hC7,&h81,&h81,&h01 data &h01,&h01,&h01,&h01,&h81,&h87,&hFF,&hFF data &hFF,&hFF,&hFC,&hE0,&hC0,&h80,&h80,&h00 data &h03,&h1F,&h7F,&hFF,&hFF,&hFE,&h7C,&h0F data &h03,&h00,&h00,&h00,&h00,&h80,&h80,&h80 data &hC0,&hF8,&hFF,&hFF,&hFF,&hFF,&hCF,&h80 data &h80,&h00,&h01,&h07,&h1F,&h7F,&hFF,&hFF data &hFC,&hF0,&hC0,&h80,&h80,&h00,&h00,&h00 data &h7C,&h04,&h08,&h08,&h10,&h20,&h20,&h40 data &h7D,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h08,&h08,&hF8,&hF8 data &hF8,&h08,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h18 data &h18,&h18,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 data &h3E,&h22,&h22,&h22,&h22,&h22,&h22,&h22 data &h3E,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&hF8,&hFC data &hFE,&h07,&h01,&h81,&hF1,&hFF,&hFF,&h1F data &h00,&h00,&h78,&hFC,&hFE,&h93,&h11,&h19 data &h0F,&h8F,&h46,&h80,&h8E,&h9E,&h1F,&h39 data &hF9,&hF3,&hE3,&h03,&h01,&hE1,&hFF,&hFF data &h1F,&h00,&h00,&h00,&hF8,&hFC,&hFE,&h07 data &h03,&h01,&hE1,&hFE,&hFF,&h1F,&h01,&h01 data &h81,&hFF,&hFF,&h7F,&h06,&h02,&hF1,&hFF data &hFF,&h1E,&h00,&h00,&h00,&h00,&h00,&h00 data &h9F,&h90,&h90,&h90,&h90,&h90,&h90,&h90 data &h9F,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h01 data &h01,&h01,&h01,&h00,&h00,&h01,&h01,&h01 data &h01,&h00,&h00,&h00,&h01,&h01,&h01,&h01 data &h01,&h00,&h00,&h00,&h01,&h01,&h01,&h01 data &h01,&h00,&h00,&h00,&h00,&h00,&h01,&h01 data &h01,&h01,&h00,&h00,&h0C,&h1D,&h19,&h11 data &h19,&h1F,&h0F,&h07,&h01,&h00,&h00,&h00 data &h01,&h01,&h01,&h00,&h00,&h00,&h00,&h01 data &h01,&h01,&h01,&h00,&h00,&h00,&h00,&h00 data &h10,&h10,&h10,&h10,&h10,&h10,&h10,&h10 data &h1F,&h00,&h00,&h00
Теперь копируем подготовленный массив в файл 3310bmp1.bas Компилируем и наблюдаем следующую картину:
А вот как это выглядит вживую:
Дисплей позволяет выводить информацию как в нормальном отображении:
Так и в инверсном:
Исходники хорошо комментированы, поэтому проблем с выводом информации на дисплей возникнуть не должно. Файлы проекта можно скачать ниже:
я получил 5 строк смещенных относительно друг друга. без мусора. как быть дальше не пойму. только начал вникать. наверно , как я понял нужно прописывать для каждой строки отдельно установку первого пикселя. с кем можно в личке пообщаться? ткните носом где смотреть.спасибо
Да синим маркером поперек, видимо на складе для себя пометку делают... С отображением текста и цифр удалось,а вот при выводе своей картинки всё так же рассыпается: Инициализация: вводим строки не с 0 до 5, а с 1 до 6 В подпрограмме очистки ввел 'For D3310pixelloop = 0 To 711 вместо For D3310pixelloop = 0 To 503 Sub D3310reset D3310re = 0 Waitus 250 D3310re = 1 End Sub
Sub D3310init D3310ce = 0 'Display data input enable D3310dc = 0 'Command mode D3310commandout &H21 'Перевод LCD в режим внешних команд.Расширенный режим команды, горизонтальное расположение D3310commandout &H45 ' Для китайского D3310commandout &HC8 'Middle contrast D3310commandout &H06 'Temperature setting D3310commandout &H14 'Bias 1:48 //как ни странно это контрастность по умолчанию 13 D3310commandout &H20 'Normal command mode, horizontal addressing D3310commandout &H0C 'Uninverted Screen D3310ce = 1 'Display data input disable End Sub
Не могу понять почему картинки выводит криво, в каком месте библиотеки копаться может кто знает?
Синим маркером пречеркнут в самую точку, в С дисплей китайский вроде победили я думаю и в Bascome можно...осталась пока полоса вверху в пиксел, читаю дальше по форумам. Пока инициализация имеет вот такой вот вид:
я вот сейчас раскрутил старый оригинальный nokia 3310 и вытащил экран из него. на железке слева вверху выдавлено nokia. вот этот дисплей сразу заработал как надо. жаль, что это последний оригинальный экран.
(а на купленных мной китайцах на всех 5ти экранах еще и маркером синяя полоска, и рыжая квадратная наклеечка прямо на экран)
а вот мой китаец никак не хочет затирать нижнюю строку... текст выводится.. картинка съезжает.... изменение в исходнике 503 на 711 не помогло... чудеса
Верхняя строка съедается, в общем картинка как бы сдвинута вверх. Пробовал вставлять D3310commandout &H7F ' первая строка на пиксель ниже Но тогда не помещается шрифт Х4,съедается нижняя строка...
Sub D3310init D3310ce = 0 'Display data input enable D3310dc = 0 'Command mode D3310commandout &H21 'Extended command mode, horizontal addressing D3310commandout &HC8 'Middle contrast D3310commandout &H06 'Temperature setting D3310commandout &H13 'Bias 1:48 D3310commandout &H7F ' Для китайского D3310commandout &H20 'Normal command mode, horizontal addressing D3310commandout &H0C 'Uninverted Screen D3310ce = 1 'Display data input disable End Sub
а верхняя строка нормально отображается, на своем месте? Может адрсация не првильная-не хватает на последнюю строку в файле библиотеки 3310end есть строка
А мне все же попался дисплей китайский при выводе картинки кракозябры, при выводе текста нижняя строка не отображается...никак его не победить, не подскажите? фото http://files.mail.ru/JUTJM4?t=1
Я пробовал подключать LCD 3310 к ATmega8L - всё работает. Пробовал подключить к ATmega64L (код изменил под микруху и запрограммировал), но на экран ничего не показывает. Не могу понять что ни так, подключал к ногам (PA0-PA4), после не удачи подключал к (PB0-PB4), но тоже не помогло. Может нужно каким-то другим ногам подключать или в чём-то другом проблема (всё компоненты рабочие и прошивка изменена правильно в PROTEUS работает)?