Главная » Статьи » Проекты |
Уже давно у меня лежит 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.4 = Input 'флаг нажатия на тач Porte.4 = 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.4 : Config Rs_disp = Output 'Command/Data pin Wr_disp Alias Portf.5 : Config Wr_disp = Output 'Write pin Res_disp Alias Portf.6 : 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=0 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)
| |
Просмотров: 16717 | Комментарии: 14 | Рейтинг: 5.0/8 |
Всего комментариев: 14 | ||||||||||
| ||||||||||
Проекты [46] |
Как подключить [32] |
Инструменты [3] |
Полезная информация [18] |
Объявления [3] |