Подключение дисплея от nokia3310 к pic16f628A (часть 2)

Написание программы.

Дисплей nokia 3310
Дисплей nokia 3310
Результат работы функции проверки дисплея.

В предыдущей статье был описан сам дисплей и его подключение к микроконтроллеру.

Был выбран микроконтроллер PIC16F628A , который содержит 2К памяти, демонстрационный проект занимает около 91% flash памяти.

Подключение:

  • RES# – RA1
  • CS# – RB4
  • D/C – RB5
  • SDI – RB6
  • CLK – RB7

Сам проект написан на C и использовался компилятор — HI-TECH 9.70 .

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

Функции для работы с дисплеем в текстовом режиме:

  • lcd_init() – инициализация дисплея
  • lcd_clear() – очистка дисплея
  • lcd_test() – функция проверки дисплея (заполняет весь экран символами)
  • lcd_putch(char) – функция вывода символа размером 5х8
  • lcd_puts(const char *s) – вывод строки при помощи функции lcd_putch(char)
  • lcd_putch_big(int width, int height ,char) – функция вывода большого символа на экран, позволяет выводить символы, растянутые в 2,4,8 раза от стандартных символов 5х8, кратность задаётся отдельно по ширине и высоте
  • lcd_putch_beauty(char) – функция вывода символов размером 10х16 точек, требуется дополнительный массив шрифтов
  • lcd_gotoxy(int X, int Y) – переход к символу расположенному в Y строке, на X позиции

Также для работы понадобятся следующие дефайны:

//	логические операции
#define SetBit(x,y) (x|=(1< <y))
#define ClrBit(x,y) (x&=~(1<<y))
#define ToggleBit(x,y) (x^=(1<<y))
#define TestBit(x,y) (x&(1<<y))
//	Назначение выводов контроллера
#define LCD_CLK		RB7
#define	LCD_DATA	RB6
#define	LCD_DC		RB5
#define	LCD_CE		RB4
#define LCD_TRIS()	TRISB &= 0x00
#define	LCD_RESET	RA1
//    Режимы
#define    LCD_TCMD 0
#define    LCD_TDATA 1

И две глобальные переменные расположения курсора:

unsigned char X,Y;

Дисплей от ноки 3310 является графическим и сам не содержит библиотеки символов в отличие от знакогенерирующих. Полный массив символов размером 5х8 занимает 1/3 — 1/2 памяти используемого контроллера (PIC16F628A).
Можно воспользоваться готовыми массивами символов 5х8:

  • Цифровые и спец + латинские символы
  • Цифровые и спец + латинские + русские символы

А можно сгенерировать свой массив символов с помощью специальной программы – символьный генератор.

Для демонстрации возможностей дисплея и данной библиотеки была написана небольшая демонстрационная прошивка, которая по очереди отображает 4 страницы:
сразу после включения запускает функцию проверки дисплея, которая заполняет весь дисплей символами (как на первой фотографии), далее выводит букву «A» различных размеров, потом демонстрирует разрешение дисплея и в заключении информация о демки.

Демка Демка
Демка Демка
Демка

Ниже приведён сам проект, который содержит полный набор символов (5×8) и функций приведённых выше.

Скачать исходник

9 комментариев на « Подключение дисплея от nokia3310 к pic16f628A (часть 2)»

  1. dimension пишет 30.01.2012 в 21:19 #

    Очень интересно! Хороший сайт!
    Правда очень хочется ознакомиться с принципами подключения данного ЖКИ к пику на ассемблере!

  2. Alex_EXE пишет 30.01.2012 в 22:15 #

    На асме предпочитаю не писать, нечем помочь не могу.

  3. dimension пишет 05.02.2012 в 20:50 #

    То есть Вы начинали писать свои проекты сразу на Си?
    Не было промежуточных стадий на ассемблере?

  4. Alex_EXE пишет 05.02.2012 в 21:30 #

    Ну почему, первые две мои программы были на асме 🙂 (мигание светиками).
    В то время уже знал Си, решил на нём и начать писать.

  5. rexxer пишет 18.09.2012 в 16:47 #

    привет
    поставил такой же компилятор
    попытался скомпилить picc —chip=pic16f688 3310.c
    ругается на lvalue в #define LCD_TRIS() TRISB &= 0x00
    вернее ниже, где она вызывается
    что не так?

  6. rexxer пишет 18.09.2012 в 16:49 #

    мне нужно просто проверить дисплей на 16ф688

  7. Alex_EXE пишет 18.09.2012 в 18:39 #

    Можете исключить из кода все упоминания LCD_TRIS()

  8. Михаил пишет 05.12.2012 в 17:46 #

    Проверил код с конфигурацией под PIC16F877А- все работает!! Отлично!! Спасибо большое!!!Теперь бы разобраться как можно картинку вывести, может подскажете?

  9. Михаил пишет 05.12.2012 в 18:05 #

    Разобрался!!! Просто, нужно внимательно смотреть ваши труды!!)
    Большое спасибо!!!

Комментарии RSS

Оставьте отзыв