8-900-374-94-44
[email protected]
Slide Image
Меню

Дисплей 3310 nokia – Библиотека для работы с дисплеем Nokia 3310

Ещё один метод подключения LCD от Nokia 3310 / Технологии / Сообщество EasyElectronics.ru

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


Итак, есть дисплей, как он продавался, на подложке в металлическом кожухе.

Вместо контактов на стекле напыление, к нему прижимаются позолоченые контакты, отдельно установленные на пластмассовой приспособе. Подразумевается, что корпус прижмёт подложку к плате, контакты подпружинятся и настанет профит (на фото ряд контактов над динамиком).

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

Аккуратно вынимаем из подложки дисплей и ряд кнтактов. И за то, и за другое грязными руками лучше не касаться, ибо протереть не повредив напыление на дисплее крайне сложно, растворителями пользоваться нельзя. Поэтому хвататься только за боковые края дисплея.
Перед тем как продолжить измерьте сопротивление между контактами дисплея. Мультиметр должен показать сопротивление в несколько мегаом между всеми, иначе дисплей не исправен и не запустится.

Далее, разбираем ряд контактов, их все надо снять с пластмасски. На фото хорошо видна их форма, а то что они немного пружинят — мы счас и используем. Берём зубочистку, отрезаем кончик так, чтобы его диаметр стал равен (или чуть меньше) широкой части внутреннего пространства контакта. Надеваем контакт на зубочистку и сдвигаем его так, чтобы она оказалась в узкой части. Таким образом контакт в месте соединения его половинок раздвинется. Не переусердствуйте, а то он погнётся.
Теперь ответственный момент: надеваем контакт прямо на дисплей в месте где нет напыления. Можно и на напыление, когда приноровитесь. Если прям вообще не надевается, обрежте ещё немного зубочистку и повторите с начала. Надевайте аккуратно, большое усилие там не нужно, контакт сам распружинится и наденется. При слишком большом усилии может отколоться стекло, что может привести к порче дисплея.
После того как контакт наделся, его можно аккуратно той же зубочисткой пододвинуть на место, где напыление.
Если приглядеться, видно, что на контроллере дисплея чёрная наклейка. Я её не снимал, контакты надевал прямо на неё.

Повторяем 8 раз. Спешка тут ни к чему, на всё уходит около 15 минут, если первый раз.

После установки всех контактов снова меряем их мультиметром. За одно следим, чтобы они стояли ровно и небыло межконтактного замыкания.
Следующим этапом заливаем контакты двухкомпонентным клеем. Поксипол или момент подойдут. Эпоксидка — может быть, но она схватывается долго. Я заливал снизу, чтобы подпаиваться сверху.

После того как клей схватился, залуживаем контакты сверху и подпаиваемся.
Результат можно видеть в начале топика.
А как крепить теперь дисплей, спросите вы? А я буду крепить на толстую двустороннюю липкую ленту 3М или скотч для крепления зеркал к кафелю.

Софтверная часть работы с дисплеем в статье тут.

PS В процессе отработки технологии было убито два дисплея :(. Один раскололся, когда надевал контакты, второй, когда прижимал дисплей к плате проволокой. Ещё два прекрасно работают.

PPS Ещё один момент, про питание. Немного поэксперементировал с ним и вот что выяснил. Дисплей может питаться и от 3,3 и от 5 вольт. При этом, видимо, автоматически меняется контрастность.
Если ею управлять программно, то при питании 3,3 вольта максимум контрастности приходится на значение 96 и на выходе Vout диплея будет напряжение 8,6 вольт. Увеличение напряжения до 5 вольт к увеличению контрастности не приводит. Если подать 5 вольт, то максимум контрастности при значении 127, и на выходе Vout диплея будет напряжение 9,6 вольт. Уменьшение напряжения напрямую влияет на контрастность и на напряжение на выходе Vout.

we.easyelectronics.ru

Плата расширения для PBII с дисплеем nokia 3310 / Pinboard / Сообщество EasyElectronics.ru

Получил отладочную плату Pinboard II от Di Halt'а. Поигрался, решил приделать к ней дисплей от нокии 3310. Благо, на PBII есть разъём для расширения. И, в духе пинбоарда, постарался сделать плату расширения максимально универсальной. Получилось, как мне кажется, неплохо. Хотя и не соответствует концепции краевого модуля, ну да надеюсь, Ди мне это простит 🙂

Модуль я хотел сделать удобным сразу для нескольких задач. Это и эксперименты с самим дисплеем, и удобный способ проверить дисплей без пайки, и в качестве отладочного устройства отображения. Конечно, в комплекте с PBII уже идёт 16х2 символьный дисплей, вполне удобный для отладки. Но мне он не нравится. Ассоциируется с таксофонами времён моего детства, когда они стали цифровыми, с картами. Графический дисплей симпатичнее. При этом дисплей от 3310 ничуть не сложнее в использовании, не считая разве что необходимости в таблице символов.

Модуль, в зависимости от задачи, можно использовать в разных вариантах подключения.

Вариант 1.

Цепляемся на разъём краевого модуля правой стороной. Штатный дисплей, разумеется, придётся снять. Модуль питается от CPU PWR2, задавая уровень в 3.3В. Также задействуются линии MOSI, MISO, SCK, SS2. С дисплеем можно работать сразу после подключения, больше никаких перемычек не требуется. Левой стороной модуль опирается на 7-сегментик, но для надежности можно привинтить стойку, на пинбоарде там свободное место.

Вариант 2.

Цепляемся на разъём краевого модуля левой стороной. Аналогично первому варианту, только модуль висит справа, делая доступным 7-сегментник, шкалу светодиодов. По подключаемым линиям всё абсолютно одинаково. Для прочности модуль можно привинтить слева к штатной стойке и/или приделать ножки справа.

Вариант 3.


Цепляемся на разъем штатного дисплея. Модуль питается от Main Power (джампер LCD PWR ON должен быть установлен) через собственный стабилизатор на 3.3 вольта. Задействуются линии RS, R/W, E, D0, D1, так что их надо подключать к процессорному модулю проводками. Зато краевой разъём остаётся полностью свободным для других плат расширения. Правой стороной модуль опирается на штатную пластиковую стойку.

Вариант 4.
Ну и конечно, модуль можно использовать отдельно от pinboard'а, подключив его проводками. При желании, один разъём можно напаять на верхнюю сторону, для удобства. Или можно разъём для третьего варианта продублировать вверх.

Если какой-либо из вариантов использования не требуется, плату можно укоротить ножницами. Например, отрезав левую часть платы, станет невозможен третий вариант подключения, зато во втором можно будет использовать совместно со штатным дисплеем.

Сброс дисплея.
Для упрощения подключения к краевому разъёму (варианты 1 и 2), чтобы не тянуть отдельный проводок для линии Reset дисплея, начальный импульс сброса производится конденсатором при включении питания. В дальнейшем она подтягивается к питанию. Но, при необходимости, линией Reset дисплея можно управлять через штырёк слева от дисплея. В третьем варианте можно подключить RS к пину контроллера вместе с остальными линиями.

Подсветка.

Дисплей подсвечивается четырьмя smd-светодиодами, впаиваемыми на нижнюю сторону платы вверх ногами в отверстия. Диоды желательно взять поярче и на небольшое прямое напряжение. Питаются они от 3.3В. Включается подсветка джампером справа от дисплея. Вместо джампера на нижний пин можно посадить прямое управление подсветкой и/или запитать её от другого источника. Например, для плавного управления подсветкой ШИМом. На нижнюю часть подложки желательно наклеить кусочек фольги, чтобы свет от диодов отражался в сторону дисплея и не светил в глаза.

Управление.
Для работы с модулем можно использовать любую библиотеку для n3310. Например, библиотеку от XANDER'а. Есть только один нюанс. При работе аппаратного SPI в меге 16, невозможно использовать MISO/PB6 на выход. А линия MISO используется для пина D/C дисплея, выбирающего режим команды/данные. Так что на процессорном модуле нужно соединить выход MISO с любой свободной ножкой микроконтроллера. При программном SPI, как и при подключении через дисплейный разъём, проблем нет. Линию E-SS2-SCE можно вешать хоть на SS процессора, хоть на любой другой пин.

Плата.

Плата получилась двусторонней, но достаточно простой в приготовлении. Дорожки широкие, переходных отверстий не так много. Главное при сборке не забыть все штыри припаять с обеих сторон! Если конечно не заказывать плату с металлизацией. Дисплей крепится вместе с подложкой, лишнюю её часть, клавиатуру, можно отпилить, хотя модуль встаёт и с ней в любом варианте включения. Закрепляется проволокой в отверстия платы, которая припаивается или приматывается с обратной стороны платы. Если нужно по быстрому проверить дисплей, его можно и не крепить, просто слегка прижать. За счёт центрирующего отверстия под штырёк на подложке и подпружиненных контактов дисплея, это не составляет трудностей.


Схемы нет, плата слишком простая, рисовалась прямо в Sprint Layout'е. Разводка в аттаче.

we.easyelectronics.ru

Доработка контактов китайского дисплея Nokia 3310

РадиоКот >Лаборатория >Радиолюбительские технологии >

Доработка контактов китайского дисплея Nokia 3310

Сидя на работе и размышляя о надежности узлов самодельных электронных устройств, решил проверить широко распространенный дисплей Nokia 3310, а точнее, его китайский клон. Уже давно не давала покоя его колодка контактов, хлипкая и не внушающая доверия. В оригинальном дисплее она приклеена к стеклу и достаточно надежна. Другое дело, что оригиналов сейчас не найдешь, либо цены на них сравнительно высоки.
Для выравнивания колодки у китайца её нужно сильно прижимать к печатной плате будущего устройства. Однако, при появлении зазоров, возможно пропадание контакта между дисплеем и колодкой. Разбираем дисплей для анализа:

Китайцы разместили колодку в подложке следующим образом. Контакты немного возвышаются над подложкой.

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

Крутим колодку в руках, переворачиваем её и ставим обратно в подложку. В иных экземплярах она с некоторым усилием встает в отверстие.

Устанавливаем дисплей:

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

Файлы:
Китайский дисплей Nokia 3310

Все вопросы в Форум.


Как вам эта статья?

Заработало ли это устройство у вас?

www.radiokot.ru

Цифровой термометр из дисплея от Nokia 3310

Стабилизатор напряжения на 5в- 7805 или 78L05 или же аналогичный КРЕН Два электролитических конденсатора 47 mF на 16В Три резистора номиналом 4,7 кОм Три стабилитрона на напряжение 5,1 вольт, импорт или советские - не имеет значения Два транзистора кт 315 Один транзистор кт 361 Пять резисторов номиналом 1 кОм И два светодиода (какого цвета, значения не имеет: один служит для индикации питания, второй горит только в режиме программирования)

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

Для облегчения изготовления была нарисована печатная плата для программатора, которая показана на рисунке 2:

Также выложена сама печатная плата в формате *.lay. Скачать файл program.lay

Файлы в этом формате открываются программой Sprint Layout 4.

+5v MCLR PGD PGC GND

Это выводы для подключение к контроллеру.

В нашем случае


+5v - 1 ножка микроконтроллера
MCLR - 4 ножка микроконтроллера
PGD - 7 ножка микроконтроллера
PGC - 6 ножка микроконтроллера
GND - 8 ножка микроконтроллера

Подключение программатора к COM - порту компьютера: Pin Name Dir Description 1 CD Carrier Detect 2 RXD Receive Data 3 TXD Transmit Data 4 DTR Data Terminal Ready 5 GND System Ground 6 DSR Data Set Ready 7 RTS Request to Send 8 CTS Clear to Send 9 RI Ring Indicator Цифры - это соответственно номера контактов COM-порта, согласно указанной выше схемы.

Ну, вроде, разобрались. Программатор должен работать сразу после сборки, и никакой дополнительной настройки и отладки не потребуется.

Программировать можно двумя способами:

1. Записать программу до впаивания контроллера в плату, то есть к панельке для контроллера припаять проводки.

2. Запрограммировать контроллер уже в самой плате (так называемое внутрисхемное программирование).

Как по мне, проще 1-й вариант.

Далее приступим к плате самого термометра

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

Распайка контактов дисплея есть на рисунке "Распайка дисплея":


Распайка дисплея

Для быстрой и качественной распайки выводов дисплея я сначала чистил выводы обычным ластиком до того момента, пока позолота не слазила, далее немного флюса или канифоли и спокойно, но быстро и качественно припаивал шлейф.


Принципиальная схема термометра

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


Монтажная схема термометра

Есть печатная плата в формате .Lay. Скачать termopic.lay

После того как плата готова, можно приступить к программированию контроллера.

Программирование контроллера

В этом тоже ничего сложного нет.

Нам понадобится только программа WinPic800. Скачать WinPic800 с нашего сайта.

В настройках программы нужно указать несколько параметров:

Указать, что мы используем JDM-Programmer Указать COM порт, к которому подключен Ваш программатор Снять флаг с пункта "Blocade configuration" Далее напротив пункта DATA поставить флаг в поле -INV-

Нагляднее можно посмотреть на рисунке "Настройка программатора".


Настройка программатора

В программе необходимо выбрать тип кристалла, который программируем, в нашем случае это 12F629, и после загрузить файл прошивки. Скачать файл прошивки.

Из настроек изменить только то, что показано на рисунке - установка фьюзов.


Установка фьюзов

И далее нажать на кнопку "Program All"

Затем подождать, пока не появится сообщение о том, что прошито успешно…

Настоятельно рекомендую контроллер в плату не впаивать, на то есть различные причины. Самая простая - это перепрошивка пика.

Осталось только подпаять дисплей.

Если все собрано правильно, то после подачи напряжения на экране появится изображение.

Джампер на плате предназначен для изменения режима отображения информации, в вернем положении джампера выводится инверсия изображения, а в нижнем положении - не инвертированное.

Минимальное напряжение, при котором у меня запустился термометр, это 2,2 вольта. Меньше пик работать не будет. Потребление данного термометра составляет максимум 0.6, максимум - 0.8 мА без подсветки. Таким образом, в качестве источника питания можно подключить литиевую батарею типа той, что стоит в биосе вашей материнской платы. Также возможно подключить в качестве источника питания два NI-MH аккумулятора емкостью 800 мА, тогда время автономной круглосуточной работы будет полтора месяца, или же использовать аккумулятор от той же Nokia 3310, как поступил я...

ВНИМАНИЕ !!! +5 вольт, которые есть на молексе компьютера, ИСПОЛЬЗОВАТЬ НЕЛЬЗЯ !!!! Этого не выдержит дисплей термометра. НЕОБХОДИМО ЗАПИТЫВАТЬ УСТРОЙСТВО НАПРЯЖЕНИЕМ МАКСИМУМ 3,7- 3,8 ВОЛЬТ !!!! Для получения необходимого напряжения идеально подходит стабилизатор LD1117. Он не является дефицитом, и я встречал его на платах винчестеров фирмы Samsung (кажется, на 40 GB моделях).

Ради интереса я зажал термодатчик между двумя пальцами, результат оправдал все мои надежды: показания термометра составили 35,6 °C, если учесть тот факт, что температура кожи рук не есть 36,6, то ему можно вполне доверять... Кстати, по поводу скорости обновления. На глаз изменения показаний происходят где-то раз в секунду. Несомненно, это медленнее, чем у терморезисторов, но зато данное устройство не нужно долго и уморительно калибровать...

Надеюсь, после такого подробного инструктажа все желающие смогут повторить данную конструкцию.

Подключение других LCD дисплеев, не Nokia 3310

Вопрос автору: Вот, например, тебе бы сказали, сделай точно такой же термометр, но задействуй при этом телефон Самсунг или Мотороллу и т.д. Что бы ты делал?

Ответ: Я бы заплатил программисту за то, чтобы он мне написал прошивку, далее я бы подогнал это под схему и выложил бы прошивку и схему. Цены на написание прошивок у нас от 10$ up to 50$.

Вопрос автору: А можно подключить не Nokia 3310, а например Nokia 8310 ?

Ответ: К приведенной в статье схеме и прошивке - нет! ТОЛЬКО 3310! Другие не подойдут, так как у них другой контроллер дисплея. Даже от 3410 не подходит.

Вопрос автору: На каком языке программирования пишется прошивка?

Ответ: На ассемблере или на С.

Обсудить статью на форуме

Рейтинг (голосов):8.72(95)



Личная моддинг коллекция

www.modding.ru

Дисплей Nokia 5110 – подключение к микроконтроллеру | RadioLaba.ru

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

              #include <P16F628A.INC>

              LIST        p=16F628A    

              __CONFIG    H'3F18'           ;Конфигурация микроконтроллера

                                              

              errorlevel  -302              ;не выводить сообщения с ошибкой 302 в листинге

 

Sec           equ         0020h             ;вспомогательные регистры счета

Sec1          equ         0021h             ;

Sec2          equ         0022h             ;

nomer         equ         0023h             ;регистр хранения кода ascii символа

scetbit       equ         0024h             ;регистр счета кол-ва бит  

perem         equ         0025h             ;вспомогательный регистр передачи байта по spi              

temp          equ         0026h             ;вспомогательный регистр счета

tmp_tab       equ         0027h             ;регистр хранения номера таблицы

              

#DEFINE       res_lcd     PORTB,0           ;присвоение названий линиям ввода-вывода

#DEFINE       cs          PORTB,1           ;для работы с LCD дисплеем Nоkiа 5110

#DEFINE       dat_com     PORTB,2           ;

#DEFINE       sdata       PORTB,3           ;

#DEFINE       sclk        PORTB,4           ;

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

              org         0000h             ;начать выполнение программы с адреса 0000h

              goto        Start             ;переход на метку Start

          

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Основная программа

                                            

Start         movlw       b'00010011'       ;установка значений выходных защелок порта B    

              movwf       PORTB             ;

              

              movlw       b'00000111'       ;выключение компараторов

              movwf       CMCON             ;

 

              bsf         STATUS,RP0        ;выбрать 1-й банк    

              movlw       b'11100000'       ;настройка линий ввода\вывода порта B      

              movwf       TRISB             ;RB0,RB1 - на вход, остальные на выход                  

              bcf         STATUS,RP0        ;выбрать 0-й банк

                          

              call        init_lcd          ;вызов подпрограммы инициализации дисплея

              call        clear_lcd         ;вызов подпрограммы очистки дисплея

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

              movlw       '"'               ;вывод текста ("RadioLaba.ru")

              call        viv_symb          ;

              movlw       'R'               ;

              call        viv_symb          ;

              movlw       'a'               ;

              call        viv_symb          ;

              movlw       'd'               ;

              call        viv_symb          ;

              movlw       'i'               ;

              call        viv_symb          ;

              movlw       'o'               ;

              call        viv_symb          ;

              movlw       'L'               ;

              call        viv_symb          ;

              movlw       'a'               ;

              call        viv_symb          ;

              movlw       'b'               ;

              call        viv_symb          ;

              movlw       'a'               ;

              call        viv_symb          ;

              movlw       '.'               ;

              call        viv_symb          ;

              movlw       'r'               ;

              call        viv_symb          ;

              movlw       'u'               ;

              call        viv_symb          ;

              movlw       '"'               ;

              call        viv_symb          ;

              call        paus1s            ;пауза 1 сек

 

              call        ust_cur_2         ;установка курсора на начало 2-ой строки

              movlw       ' '               ;вывод текста ( Тестовый код)

              call        viv_symb          ;

              movlw       'Т'               ;

              call        viv_symb          ;

              movlw       'е'               ;

              call        viv_symb          ;

              movlw       'с'               ;

              call        viv_symb          ;

              movlw       'т'               ;

              call        viv_symb          ;

              movlw       'о'               ;

              call        viv_symb          ;

              movlw       'в'               ;

              call        viv_symb          ;

              movlw       'ы'               ;

              call        viv_symb          ;

              movlw       'й'               ;

              call        viv_symb          ;

              movlw       ' '               ;

              call        viv_symb          ;

              movlw       'К'               ;

              call        viv_symb          ;

              movlw       'о'               ;

              call        viv_symb          ;

              movlw       'д'               ;

              call        viv_symb          ;

              call        paus1s            ;пауза 1 сек

 

              call        ust_cur_3         ;установка курсора на начало 3-й строки

              movlw       ' '               ;вывод текста (  *Дисплей*)

              call        viv_symb          ;

              movlw       ' '               ;

              call        viv_symb          ;

              movlw       '*'               ;

              call        viv_symb          ;

              movlw       'Д'               ;

              call        viv_symb          ;

              movlw       'и'               ;

              call        viv_symb          ;

              movlw       'с'               ;

              call        viv_symb          ;

              movlw       'п'               ;

              call        viv_symb          ;

              movlw       'л'               ;

              call        viv_symb          ;

              movlw       'е'               ;

              call        viv_symb          ;

              movlw       'й'               ;

              call        viv_symb          ;

              movlw       '*'               ;

              call        viv_symb          ;

              call        paus1s            ;пауза 1 сек

 

              call        ust_cur_4         ;установка курсора на начало 4-й строки

              movlw       ' '               ;вывод текста (  Nоkiа 5110)

              call        viv_symb          ;

              movlw       ' '               ;

              call        viv_symb          ;

              movlw       'N'               ;

              call        viv_symb          ;

              movlw       'o'               ;

              call        viv_symb          ;

              movlw       'k'               ;

              call        viv_symb          ;

              movlw       'i'               ;

              call        viv_symb          ;

              movlw       'a'               ;

              call        viv_symb          ;

              movlw       ' '               ;

              call        viv_symb          ;

              movlw       '5'               ;

              call        viv_symb          ;

              movlw       '1'               ;

              call        viv_symb          ;

              movlw       '1'               ;

              call        viv_symb          ;

              movlw       '0'               ;

              call        viv_symb          ;

              call        paus1s            ;пауза 1 сек

 

              call        ust_cur_5         ;установка курсора на начало 5-й строки

              movlw       ' '               ;вывод текста (  Контроллер)

              call        viv_symb          ;

              movlw       ' '               ;

              call        viv_symb          ;

              movlw       'К'               ;

              call        viv_symb          ;

              movlw       'о'               ;

              call        viv_symb          ;

              movlw       'н'               ;

              call        viv_symb          ;

              movlw       'т'               ;

              call        viv_symb          ;

              movlw       'р'               ;

              call        viv_symb          ;

              movlw       'о'               ;

              call        viv_symb          ;

              movlw       'л'               ;

              call        viv_symb          ;

              movlw       'л'               ;

              call        viv_symb          ;

              movlw       'е'               ;

              call        viv_symb          ;

              movlw       'р'               ;

              call        viv_symb          ;

              call        paus1s            ;пауза 1 сек

 

              call        ust_cur_6         ;установка курсора на начало 6-й строки

              movlw       ' '               ;вывод текста (  РIС16F628А)

              call        viv_symb          ;

              movlw       ' '               ;

              call        viv_symb          ;

              movlw       'P'               ;

              call        viv_symb          ;

              movlw       'I'               ;

              call        viv_symb          ;

              movlw       'C'               ;

              call        viv_symb          ;

              movlw       '1'               ;

              call        viv_symb          ;

              movlw       '6'               ;

              call        viv_symb          ;

              movlw       'F'               ;

              call        viv_symb          ;

              movlw       '6'               ;

              call        viv_symb          ;

              movlw       '2'               ;

              call        viv_symb          ;

              movlw       '8'               ;

              call        viv_symb          ;

              movlw       'A'               ;

              call        viv_symb          ;

met_1         nop                           ;зацикливание программы

              goto        met_1             ;

                  

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

init_lcd      bcf        res_lcd            ;подпрограмма инициализации дисплея        

              movlw      .200               ;выдача лог.0 на линию RST: сброс дисплея

              movwf      scetbit            ;пауза 0,6 мс

in_1          decfsz     scetbit,F          ;

              goto       in_1               ;

              bsf        res_lcd            ;          

                          

              movlw      0x21               ;включить контроллер дисплея, горизонт.адресация, расширенный набор команд

              call       sendispcom         ;

              movlw      0x13               ;установка смещения напряжения Bias 1:48

              call       sendispcom         ;

              movlw      0x04               ;установка температурного коэффициента 0

              call       sendispcom         ;

              movlw      0xC1               ;установка контрастности (значение 0x65)

              call       sendispcom         ;

              movlw      0x20               ;стандартный набор команд

              call       sendispcom         ;

              movlw      0x0C               ;установка - нормальный режим работы

              call       sendispcom         ;

              return                        ;выход

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

ust_cur_1     movlw       0x40              ;установка курсор в позицию Y0

              call        sendispcom

              goto        ust

ust_cur_2     movlw       0x41              ;установка курсор в позицию Y1

              call        sendispcom

              goto        ust

ust_cur_3     movlw       0x42              ;установка курсор в позицию Y2

              call        sendispcom

              goto        ust

ust_cur_4     movlw       0x43              ;установка курсор в позицию Y3

              call        sendispcom

              goto        ust

ust_cur_5     movlw       0x44              ;установка курсор в позицию Y4

              call        sendispcom

              goto        ust

ust_cur_6     movlw       0x45              ;установка курсор в позицию Y5

              call        sendispcom

ust           movlw       0x80              ;установка курсор в позицию X0

              call        sendispcom

              return

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

clear_lcd     movlw      0x40               ;подпрограмма очистки дисплея

              call       sendispcom         ;установка курсор в позицию Y0

              movlw      0x80              

              call       sendispcom         ;установка курсор в позицию X0

              movlw      .6                 ;запись счетчика, значение 504

              movwf      Sec1

povt4         movlw      .84

              movwf      Sec

povt3         movlw      .0

              call       sendispdat         ;отправка значения 0x00 на дисплея

              decfsz     Sec,F              ;значение отправляется 504 раза

              goto       povt3              ;для очистки дисплея

              decfsz     Sec1,F            

              goto       povt4

              return

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

sendispcom    movwf      perem              ;подпрограмма отправки команды/данных на дисплей

              bcf        dat_com

              goto       povt1

sendispdat    movwf      perem

              bsf        dat_com

povt1         movlw      .8

              movwf      scetbit

              bcf        cs

povt2         bcf        sclk

              btfsc      perem,7

              bsf        sdata

              btfss      perem,7

              bcf        sdata

              bsf        sclk                                  

              rlf        perem,F

              decfsz     scetbit,F            

              goto       povt2

              bsf        cs

              return

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

viv_symb      movwf       nomer             ;подпрограмма вывода символа на дисплей

              movlw       .32               ;

              subwf       nomer,W           ;

              btfss       STATUS,C          ;

              return                        ;значение символа менее 32: выход из подпрограммы

 

              movf        nomer,W

              sublw       .82

              btfss       STATUS,C

              goto        viv_symb_1        ;значение символа более 82: переход на метку viv_symb_1

              movlw       .32               ;значение символа более 31 и менее 83: символ в таблице tab_symb_1

              subwf       nomer,F           ;вычитание числа 32 из ASCII кода символа, получаем

              movlw       .1                ;преобразованное значение символа

              movwf       tmp_tab           ;запись номера таблицы (1) в регистр tmp_tab

              goto        symb_lcd

 

viv_symb_1    movf        nomer,W

              sublw       .126

              btfss       STATUS,C

              goto        viv_symb_2        ;значение символа более 126: переход на метку viv_symb_2

              movlw       .83               ;значение символа более 82 и менее 128: символ в таблице tab_symb_2

              subwf       nomer,F           ;вычитание числа 83 из ASCII кода символа, получаем

              movlw       .2                ;преобразованное значение символа

              movwf       tmp_tab           ;запись номера таблицы (2) в регистр tmp_tab

              goto        symb_lcd

 

viv_symb_2    movf        nomer,W

              sublw       .191

              btfss       STATUS,C

              goto        viv_symb_3        ;значение символа более 191: переход на метку viv_symb_3

 

              movlw       .176              ;проверка регистра nomer на совпадение с числом 176

              xorwf       nomer,W           ;176 - ascii код символа размерности температры, угла

              btfss       STATUS,Z

              return                        ;значение не совпадает: выход из подпрограммы

              movlw       .13               ;значение символа равно 176, символ размерности температуры, угла

              movwf       nomer             ;устанавливаем вручную преобраз. значение символа

              movlw       .4

              movwf       tmp_tab           ;запись номера таблицы (4) в регистр tmp_tab

              goto        symb_lcd

 

viv_symb_3    movf        nomer,W

              sublw       .242

              btfss       STATUS,C

              goto        viv_symb_4        ;значение символа более 242: переход на метку viv_symb_4

              movlw       .192              ;значение символа более 191 и менее 243: символ в таблице tab_symb_3

              subwf       nomer,F           ;вычитание числа 192 из ASCII кода символа, получаем

              movlw       .3                ;преобразованное значение символа

              movwf       tmp_tab           ;запись номера таблицы (3) в регистр tmp_tab

              goto        symb_lcd

 

viv_symb_4    movlw       .243              ;значение символа более 242: символ в таблице tab_symb_4

              subwf       nomer,F

              movlw       .4

              movwf       tmp_tab           ;запись номера таблицы (4) в регистр tmp_tab

              

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

symb_lcd      movf        nomer,W           ;умножение преобразованного значения символа на 5

              addwf       nomer,F

              addwf       nomer,F

              addwf       nomer,F

              addwf       nomer,F

              movlw       .5

              movwf       temp              ;запись счетчика для вывода 5 байт символа

 

symb_1        movlw       .1                ;определение ранее записанного номера талицы

              xorwf       tmp_tab,W         ;для вызова соответствующей таблицы

              btfss       STATUS,Z

              goto        symb_m1

              call        tab_symb_1

              goto        symb_2

symb_m1       movlw       .2

              xorwf       tmp_tab,W

              btfss       STATUS,Z

              goto        symb_m2

              call        tab_symb_2

              goto        symb_2  

symb_m2       movlw       .3

              xorwf       tmp_tab,W

              btfss       STATUS,Z

              goto        symb_m3

              call        tab_symb_3

              goto        symb_2  

symb_m3       call        tab_symb_4

              

symb_2        call        sendispdat        ;вывод байта символа на дисплей

              incf        nomer,F

              decfsz      temp,F

              goto        symb_1

              movlw       .0                

              call        sendispdat        ;вывод пустого столбца (0x00) разделителя символов

              return

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

tab_symb_1    movlw       high tab1         ;таблица данных содержащая байты символов

              movwf       PCLATH            ;спецзнаки, цифры 0-9, латинские символы A-R

              movf        nomer,W           ;

              addlw       low tab1          ;

              btfsc       STATUS,C          ;

              incf        PCLATH,F          ;

              movf        nomer,W           ;

              addwf       PCL,F  

                                                  

tab1          dt 0x00, 0x00, 0x00, 0x00, 0x00; (пробел) значение ASCII кода 32

              dt 0x00, 0x00, 0x5F, 0x00, 0x00; !

              dt 0x00, 0x07, 0x00, 0x07, 0x00; "

              dt 0x14, 0x7F, 0x14, 0x7F, 0x14; #

              dt 0x24, 0x2A, 0x7F, 0x2A, 0x12; $

              dt 0x23, 0x13, 0x08, 0x64, 0x62; %

              dt 0x36, 0x49, 0x55, 0x22, 0x50; &

              dt 0x00, 0x05, 0x03, 0x00, 0x00; '

              dt 0x00, 0x1C, 0x22, 0x41, 0x00; (

              dt 0x00, 0x41, 0x22, 0x1C, 0x00; )

              dt 0x08, 0x2A, 0x1C, 0x2A, 0x08; *

              dt 0x08, 0x08, 0x3E, 0x08, 0x08; +

              dt 0x00, 0x50, 0x30, 0x00, 0x00; ,

              dt 0x08, 0x08, 0x08, 0x08, 0x08; -

              dt 0x00, 0x60, 0x60, 0x00, 0x00; .

              dt 0x20, 0x10, 0x08, 0x04, 0x02; /

              dt 0x3E, 0x51, 0x49, 0x45, 0x3E; 0

              dt 0x00, 0x42, 0x7F, 0x40, 0x00; 1

              dt 0x42, 0x61, 0x51, 0x49, 0x46; 2

                 ..........................

                 ..........................

                 ..........................

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

radiolaba.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *