Главная » Статьи » Проекты

Интерфейс QWERTY-клавиатуры для TFT дисплея на контроллере ILI9325

 Уже давно у меня лежит TFT дисплей на контроллере ILI9325, разрешением 240х320 пикселей, купленный на ebay. Вот такой

 Прелестью такого дисплея является большой размер (хотя по нынешним меркам уже не очень) и имеющаяся на борту резистивная сенсорная панель, которая позволяет собирать на его основе весьма интересные устройства. Примером может служить вот этот проект. Особых идей куда применить свой дисплей у меня тогда не было и я отложил его, что называется, в долгий ящик. Но время летит и вот очередь дошла и до него.  

 Для одной из моих задумок понадобился интерфейс ввода текста, проще говоря нужна была полнораскладная клавиатура, позволяющая вводить любой текст.  С результатом моих трудов я сейчас вас и познакомлю.

 Начнем со схемы. Этот дисплей поддерживает 8-и и 16-и битное подключение. Для более шустрого отображения данных, был выбран 16-и битный режим. Чтобы для начала хотя бы запустить дисплей и проверить его работоспособность собрал вот такую схему с микроконтроллером ATMega128A и минимальной обвязкой.

 

  Питание схемы строго в диапазоне 2,8 - 3,3 вольта.  Кварцевый резонатор у меня применен на 11,0592 МГц, но рекомендую ставить с максимально возможной частотой. От этого напрямую зависит скорость отображения данных на дисплее.

  Вытравленная платка под дисплей вышла двухсторонней, на ней у меня еще стоят подстроечный резистор и пара дополнительных разъемов. В схеме их нет, так они пока нам не нужны, заложил на будущее.

 

 

 

  В схеме, как я уже писал, применен микроконтроллер ATMega128A, с использованием библиотек дисплея и клавиатуры у него остается меньше половины программной памяти (не более 35%), поэтому для больших проектов лучше сразу закладывать камень с 256 кб флэша. 

  Теперь немного о программной части. Клавиатура реализована в виде подключаемой библиотеки keyboard ILI9325.inc в которой находится подпрограмма Send. При переходе на эту подпрограмму отобразится клавиатура и появится возможность набрать текст. По возвращении набранный текст будет  храниться в текстовой переменной Text.

  Для примера привожу тестовый код

$regfile = "M128def.dat"
$crystal = 11059200
'$crystal = 16000000
$hwstack = 1024
$swstack = 1024
$framesize = 524


'-------------------Touchscreen--------------------------------------------
Dim Touchx As Word
Dim Touchy As Word
Dim Tasteneu As Byte
Dim X_dout As Byte
X_dout = &H90
Dim Y_dout As Byte
Y_dout = &HD0


Clock Alias Porte.6                                         ' Clock Pin
Cst Alias Porte.3                                           ' CS Pin
Dout Alias Porte.2                                          ' Din Pin
Din Alias Pine.5                                            ' Dout Pin

Config Din = Input
Config Clock = Output
Config Cst = Output
Config Dout = Output

Config Pine.= Input                                       'флаг нажатия на тач
Porte.= 1
touch_irq alias Pine.4

Dim X_str As String * 6
Dim Y_str As String * 6

Dim X As Word                                                'координаты нажатия на тач
Dim Y As Word



'---------------------------lCD Pin Configuration ---------------------------------
Config Porta = Output : Data_disp_low Alias Porta           'DB0 - DB7
Config Portc = Output : Data_disp_high Alias Portc          'DB8 - DB15
Rs_disp Alias Portf.: Config Rs_disp = Output             'Command/Data pin
Wr_disp Alias Portf.: Config Wr_disp = Output             'Write pin
Res_disp Alias Portf.: Config Res_disp = Output           'Reset pin
Res_disp = 1



dim text as String*30          'вводимый текст
text=" "
dim sss as byte                'длина вводимого текста
dim ssx as Byte                'длина строки -1 символ (для редактирования)


dim Shft as Byte               'флаг шифта
shft=0                         '0=шифт отпущен; 1=шифт зажат

dim smbl as byte               'дополнительные символы
smbl=0                         '0=стандартные символы; 1=дополнительные символы

dim rmng as Byte               'количество оставшихся символов для ввода
dim rmng_str as String*2       'количество в текстовом формате для вывода




'-----------------------подключаем библиотеку дисплея  --------------------------------------
Config Submode = New : $include "ILI9325 16bit library.inc"


Display_init                                                ' Initialize Display
Lcd_clear White




gosub redraw                                           'отрисовываем главное окно

'-----------------------------Основная программа--------------------------------

Do


'обработка нажатий на тачскрин
if touch_irq=then                                    'если нажатие на тачскрин
 gosub read_touch                                      'обрабатываем нажатие и узнаем координаты
  If x>35 And x<280 and y>100 and y<117 then           'если нажали на бокс вводимого текста
    gosub send                                         'уходим на подпрограммму набора текста
    gosub redraw                                       'отрисовываем окно
  end if
end if


loop

End



'-------------------------------------------------------------------------------
$include "keyboard ILI9325.inc"  'подключаем файл с клавиатурой



'отрисовка главного окна
redraw:

Lcd_clear White                                       'очистка дисплея
Lcd_box 35 , 100 , 280 , 117 , Black                  'нарисум бокс для ввода текста


Restore Color8x8
Lcd_text_color text , 37 , 105 , Black , White        'выводим набранный текст

return

 

  Результатом работы программы будет нарисованный посередине дисплея прямоугольник. В главном цикле программы идет постоянное сканирование ножки Touch_irq. При нажатии на тачскрин на этой ножке появляется низкий уровень. Если нажать по области внутри прямоугольника произойдет переход в подпрограмму Send и отрисовка клавиатуры.

  Чтобы лучше понять как происходит отображение тех или иных элементов на экране, советую ознакомится с тестовой программой, показывающей возможности библиотеки дисплея. Основная статья здесь, там же есть и демонстрационное видео.

 

 Вот такая вот клавиатура в итоге получилась.

   

 

 И для наглядности записал видео работы программы.

 

Библиотека и тестовый код

Печатная плата (DipTrace)

Ссылка где приобретался дисплей

 

 

Категория: Проекты | Добавлено: 19.03.2016
Просмотров: 3470 | Комментарии: 12 | Рейтинг: 5.0/8
Всего комментариев: 12
12 marss70   (22.05.2016 22:15)
Спасибо! У меня заработало. А есть ли у кого код для работы с дисплеем на чипе ILI9341? http://ru.aliexpress.com/item....ouch
Чип интересен, что может работать в трёх режимах: SPI(2.2 inch), параллель 8bit(2.4 inch) и 16bit(3.2 inch).

+1   Спам
11 max   (13.05.2016 14:30)
BASCOM-AVR

10 v32301   (13.05.2016 00:13)
Можно для новичков объяснить, в какой программной среде писался код? Или проще говоря, чем проект открыть? Может я прочитал не внимательно, но что-то я ничего не нашел в статье. Спасибо.

0  
9 exersizze   (24.03.2016 08:32)
Пока не копал в этом направлении, но вроде как библиотека поддерживает загрузку картинок по spi

8 kestrel   (23.03.2016 22:12)
а как насчет вывода на дисплей картинок с sd карты?

0  
7 exersizze   (23.03.2016 10:27)
Будет самое то. Можно еще вот такую плату переходник заодно взять, чтобы ничего не допаивать http://m.ebay.com/itm....=SEARCH

6 sherman   (23.03.2016 00:14)
Класс! Тоже заказал такой дисплей, буду экспериментировать. А что если взять к нему вот такую платку?
ru.aliexpress.com/item/Freeshipping-Mega-2560-R3-Mega2560-REV3-ATmega2560-16AU-Board-USB-Cable-compatibl e-for-arduino-Mega-2560/32459620617.html?spm=2114.30010708.3.1.bDSQbb&ws_ab_test=searchweb201556_0,searchweb201602_1_10036_10035_10034_507_10020_10001_ 10002_10017_10010_10005_10011_10006_10003_10021_10004_10022_10009_10007_10008_100 18_10019,searchweb201603_6&btsid=f4410411-de5e-45c0-a9d3-d6fd26d68fa4

0  
5 exersizze   (21.03.2016 21:24)
>>>Прикольно
ага)

4 max   (21.03.2016 19:46)
Прикольно.

3 Toddy123   (21.03.2016 18:59)
Спасибо вам! Я люблю ваш сайт, тут много интересного. Я тут почти каждый день сижу_)).

2 Scorpushka   (21.03.2016 15:38)
СПАСИБО!

1 kestrel   (21.03.2016 14:35)
Отлично, спасибо за статью нашел для себя новые программные решения

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






   EasyEDA:  бесплатный редактор схем

   ✓ Создание схем
   ✓ Возможность симуляции
   ✓ Быстрое создание печатных плат
   ✓ Интуитивно понятный интерфейс

   Нарисуй свою схему прямо сейчас!
   Изготовление печатных плат   https://easyeda.com/order
авторизация
Логин:
Пароль:
Комментарии
Сетевой диммер 220V на микроконтроллере
09.12.2016 - vakulyuk:
Спасибо) Я принцип действия понял, а вот откуда взялась именно цифра 195 не поня...
Сетевой диммер 220V на микроконтроллере
09.12.2016 - exersizze:
pchela5, ну так это в военное, а у нас в мирное время все примерно)) Наше...
Сетевой диммер 220V на микроконтроллере
09.12.2016 - pchela5:
> Полуволна в нашей электросети по времени длится примерно 10 мс

...
Сетевой диммер 220V на микроконтроллере
09.12.2016 - exersizze:
Чтобы понять откуда взялась цифра 195 надо сначала въехать в принцип работы: ког...
Сетевой диммер 220V на микроконтроллере
09.12.2016 - vakulyuk:
А почему минимальный накал при 195? Насколько минимум можно занизить Wt?
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
08.12.2016 - exersizze:
yorx выдалось немного свободного времени, проверил в симуляторе. Проблема...
Логгер температуры 2.0
05.12.2016 - Evgeny6873:
Хотел повторить схему и долго ждал дисплей, два раза заказывал с Китая, пришел. ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
01.12.2016 - yorx:
Доброго времени суток, exersizze попробовал Ваш код все равно не работает как на...
Помни об усадке!
30.11.2016 - pchela5:
Автомобильные никакие не лезут?


Лучшие цены на 3D принтеры
успей сделать себе подарок к Новому Году! ;)


Prusa i3

Prusa i3 от 12500 р.



Rostoсk

Rostock от 15000 р.