Перейти к содержанию

Дисплей На Контроллере St7920


apolon1919

Рекомендуемые сообщения

5397e31c5f8e6a8b9501d7312c16a63b.png

Видите вот тут появились пиксели, квадрат вокруг надписи

sony.jpg

А у меня не появляются

По идее - что мега что тини - разницы не должно быть... т.к. в програме нет никаких задействованных аппаратных ресурсов...

кроме умножения!

Которое я переделал вот так

mul Temp, Temp1
push Data

push Temp1

mov Data, Temp1

mul1:

add Temp, Data ;Умножаем.

dec Temp1

cpi Temp1, 0

brne mul1

pop Temp1

pop Data

Изменено пользователем apolon1919
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов 62
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Я написал функции, перемещения дисплея вправо влево, перемещения курсора, очистка, возврат. Все работает. Но я просто не могу понять остальное

Начну по порядку о том что я не понял

1. Как переместить курсор вниз? Бежать вправо пока не попадешь ниже?

2. Как изменять шрифт?

3. Что такое REVERSE? когда делаю у меня на экране все исчезает!

4. Что такое расширенные функции?

5. Если это графический дисплей, каков принцип рисования на нем?

6. Не ясно что такое SCROLL

7. Не могу понять что такое CGRAM, DDRAM и ICOMRAM

Объясните пожалуйста наглядно, мне трудновато все это представить

.equ PCom = PORTD

.equ PW = PORTB

.def Temp = R16

.def Temp1 = R17

.def Data = R18

.equ RS = 2

.equ E = 0

.equ RW = 1

; Для функции LCD8_MACRO_SET_SR

.equ SET_SR = 1

.equ SR = 0

; Для функции LCD8_MACRO_SET_FUNCTION

.equ SET_FUNCT = 5

.equ BIT_8 = 4

.equ EXT_FUNC = 2

.equ GRAPH_DISP_ON = 1

; Для функции LCD8_MACRO_SET_DISPLAY_STATUS

.equ SET_DISPLAY = 3

.equ BLINC_CURSOR = 0

.equ CURSOR_ON = 1

.equ DISPLAY_ON = 2

; Для функции LCD8_MACRO_ENTRY_MODE_SET

.equ ENTRY_MODE = 2

.equ ENTRY_ID = 1

.equ ENTRY_S = 0

.MACRO LCD8_MACRO_SET_SR

LCD8_MACRO_OUT_COMMAND @0

.ENDM

.MACRO LCD8_MACRO_ENTRY_MODE_SET

LCD8_MACRO_OUT_COMMAND @0

.ENDM

.MACRO LCD8_MACRO_SET_FUNCTION

LCD8_MACRO_OUT_COMMAND @0

.ENDM

.MACRO LCD8_MACRO_SET_DISPLAY_STATUS

LCD8_MACRO_OUT_COMMAND @0

.ENDM

; Переместить дисплей вправо

.MACRO LCD8_MACRO_DISPLAY_RIGHT

LCD8_MACRO_OUT_COMMAND 0b00011100

.ENDM

; Переместить дисплей влево

.MACRO LCD8_MACRO_DISPLAY_LIFT

LCD8_MACRO_OUT_COMMAND 0b00011000

.ENDM

; Отчистить экран

.MACRO LCD8_MACRO_CLEAR

LCD8_MACRO_OUT_COMMAND 0b00000001

.ENDM

; Переместить курсор и дисплэй в начало

.MACRO LCD8_MACRO_HOME

LCD8_MACRO_OUT_COMMAND 0b00000010

.ENDM

; Переместить курсов вправо

.MACRO LCD8_MACRO_CURSOR_RIGHT

LCD8_MACRO_OUT_COMMAND 0b00010100

.ENDM

; Переместить курсор влево

.MACRO LCD8_MACRO_CURSOR_LIFT

LCD8_MACRO_OUT_COMMAND 0b00010000

.ENDM

; Отправить команду

.MACRO LCD8_MACRO_OUT_COMMAND ; 1 параметр - команда

ldi Data, @0

rcall LCD12864_CommandOut

.ENDM

; Отправить данные

.MACRO LCD8_MACRO_OUT_DATA ; 1 параметр - данные

ldi Data, @0

rcall LCD12864_DataOut

.ENDM

; Задержка

.MACRO LCD8_MACRO_DELAY ; 1 параметр количество задержик, 2 параметр, количество микросекунд в задержки

ldi Temp, @0

ldi Temp1, @1

rcall Delay

.ENDM

LCD12864_DataOut:

sbi PCom, RS ;RS=1;

LCD8_MACRO_DELAY 1, 1

sbi PCom, E ;E=1.

out PW, Data ;Вывод данных.

LCD8_MACRO_DELAY 1, 1

cbi PCom, E ;RS=0, E=0.

cbi Pcom, RS

LCD8_MACRO_DELAY 1, 50

rcall Delay

ret

LCD12864_CommandOut: ;Вывод команды на индикатор.

cbi PCom, E ;E=0 и RS.

cbi PCom, RS

cbi PCom, RW

LCD8_MACRO_DELAY 1, 1

sbi PCom, E ;E=1.

out PW, Data ;Посылаем данные.

LCD8_MACRO_DELAY 1, 1

cbi PCom, E ;E=0

LCD8_MACRO_DELAY 1, 50

rcall Delay

ret

LCD12864_Init: ;Инициализация дисплея.

LCD8_MACRO_DELAY 1, 50

LCD8_MACRO_SET_FUNCTION (1<<SET_FUNCT) | (1<<BIT_8) ;Вывод команды.

LCD8_MACRO_DELAY 1, 120

LCD8_MACRO_SET_DISPLAY_STATUS (1<< SET_DISPLAY) | (1<<BLINC_CURSOR) | (1<<CURSOR_ON) | (1<<DISPLAY_ON)

LCD8_MACRO_DELAY 1, 50

LCD8_MACRO_SET_FUNCTION (1<<SET_FUNCT) | (1<<BIT_8) ;Вывод команды.

LCD8_MACRO_DELAY 1, 120

LCD8_MACRO_CLEAR ;Вывод команды.

LCD8_MACRO_DELAY 1, 20

LCD8_MACRO_ENTRY_MODE_SET (1<<ENTRY_MODE)

LCD8_MACRO_DELAY 1, 20

ret

Delay:

push Temp ;Сохраняем младшую задержку в ОЗУ.

ES0:

dec Temp ;- задержка.

cpi Temp, 0 ;Закончилась?

brne ES0 ;Нет - еще раз.

pop Temp ;Да? Восстановить здержку.

dec Temp1 ;Отнять от "количества задержик" разряда.

cpi Temp1, 0 ;Количество задержик = 0?

brne Delay

ret

Изменено пользователем apolon1919
Ссылка на комментарий
Поделиться на другие сайты

Хочу поработать с ICON RAM

Делаю такой код

LCD8_MACRO_SET_FUNCTION (1<<SET_FUNCT) | (1<<BIT_8) | (1<<EXT_FUNC) ; Устанавливаю расширеный функционал и 8 бит

LCD8_MACRO_SET_SR (1<<SET_SR) | (1<<SR); Устанавливаю SR = 1

LCD8_MACRO_OUT_COMMAND 0b01000000 ; Устанавливаю нулевой адрес IRAM

;LCD8_MACRO_OUT_DATA 0x7 ; Устанавливаю Higher byte

LCD8_MACRO_OUT_DATA 0x19 ; Устанавливаю Lower byte

LCD8_MACRO_SET_FUNCTION (1<<SET_FUNCT) | (1<<BIT_8)

LCD8_MACRO_OUT_DATA 'P'

LCD8_MACRO_OUT_DATA 'F'

LCD8_MACRO_SET_DISPLAY_STATUS (1<< SET_DISPLAY) | (1<<CURSOR_ON) | (1<<DISPLAY_ON)

Не пойму почему иконки рисуются без Higher byte???

Изменено пользователем apolon1919
Ссылка на комментарий
Поделиться на другие сайты

Объясните пожалуйста наглядно, мне трудновато все это представить

Хе... это вы к кому обращаетесь?

Я например, тока графический файл научился выводить на дисплей... и то не сам а с примера :)...

Ну а как я понял с этими дисплеями работали раз два и обчелся... наверное все методом тыка придется усваивать :).....

И я так чувствую что у вас это быстрее всех получится :).....

Я потихоньку хочу перевести тот примерчик на Си, ну и тоже начну разбиратся с теми же вопросами, которые возникли у вас... только на Си конечно...

А вообще то меня больше интересует графический режим...

Я хочу работать с этим дисплеем следующим образом - выделить в RAM графический буфер (помоему 1кб надо), с ним работать, а дисплей периодически рефрешить этими данными... Может быть для этой цели придется освоить STM32...

Изменено пользователем shads
Ссылка на комментарий
Поделиться на другие сайты

Ну а как я понял с этими дисплеями работали раз два и обчелся...

А какие тогда популярные дисплеи?

Я потихоньку хочу перевести тот примерчик на Си,

Пример который вы показатели на том сайте крайне замудренный и не доделанный.... если честно главный файл та вобще как попало оформлен...

Ссылка на комментарий
Поделиться на другие сайты

А какие тогда популярные дисплеи?
Популярны дисплеи на чипах ks0108 фирмы Samsung
Пример который вы показатели на том сайте крайне замудренный и не доделанный.... если честно главный файл та вобще как попало оформлен...
Ну да, есть чуть чуть... Правда в главном файле там в основном процедура распаковывания на дисплей упакованной картинки...

Оформлено действительно кривовато... даже сложно определить где что начинается и где что кончается :)...

Ну это уже так сказать вопросы искусства... не у всех это чувство на высоте :).....

Да парни. Беда! Только на Си с работой графического дисплея и разбираться... А чего уж STM32, а не Intel 4-ядерный?
Элементарно Ватсон..... у меня есть:

ATtiny13A - 30шт.

ATmega8A - 100шт.

STM32F100C8T6B - 10шт.

Вы бы на чем сделали? С учетом того что необходим видеобуфер в RAM размером 1Кб.....

Ну а насчет Си... я не понял... что именно вам не понравилось?.....

Изменено пользователем shads
Ссылка на комментарий
Поделиться на другие сайты

На Си можно использовать дисплей (при условии наличия четкой и отлаженной библиотеки, хотя "универсальность" тут не помошник в быстродействии). При этом вы так и не поймете "как работает дисплей" на самом деле. Для этого с ним нужно поработать на самом низком уровне.Я бы сделал на Atmega8, в крайнем случае Atmega16. Само наличие у вас STM не оправдывает необходимость его применения в таком простом вопросе. Пока вы еще и с ним разберетесь, эти дисплеи снимут с производства, как Siemens C35.

Ссылка на комментарий
Поделиться на другие сайты

Уважаемый Геннадий... я считаю что в последнем вашем сообщении, вы по всем пунктам не правы...

На Си можно использовать дисплей (при условии наличия четкой и отлаженной библиотеки.....).
Есть такая библиотека - https://code.google.com/p/u8glib

И еще не вижу логики... если по вашему на си нельзя без библиотеки, то на асме можно? Как это понимать?

А если по вашему на асме можно без библиотеки... то почему на Си нельзя?

При этом вы так и не поймете "как работает дисплей" на самом деле.
А даташит для чего? Или вы думаете что даташиты могут читать только те кто пишет на асме?
Для этого с ним нужно поработать на самом низком уровне.
Си прекрасно позволяет работать на самом низком уровне... Не понятно в чем проблема.....
Я бы сделал на Atmega8, в крайнем случае Atmega16.
Вы не очень внимательно прочитали мою хотелку по использованию дисплея. Я хочу работать с ним через промежуточный буфер в SRAM размером в 1 Кб (ну хочу я так, это долго объяснять зачем, как нить увидете примерчик – поймете зачем)...

И у мега8 и у мега16 предложенных вами – всего по 1 кб RAM-а... Подходит только мега32 или выше... Ну или STM-ка которая у меня есть в наличии, у нее 8 Кб RAM-а.

Само наличие у вас STM не оправдывает необходимость его применения в таком простом вопросе.
А в чем STM настолько особенный, что должны быть какие то особые требования для его применения?.....

Кто-то вообще использует только STM! И знать не желает, что такое AVR...

Кстати, упомянутый контроллер помоему самый младший из STM32... и стоит так же как обычная мега...

Так какие такие особенности у STM, ради которых должны быть какие-то особенные условия для его применения?...

Пока вы еще и с ним разберетесь, эти дисплеи снимут с производства, как Siemens C35.
Уже почти разобрались :)...

Ну а даже если и снимут, то что?... не разберемся со следующим?.....

Ссылка на комментарий
Поделиться на другие сайты

Чуствуются нотки обиды. Давайте без этого.

И еще не вижу логики... если по вашему на си нельзя без библиотеки, то на асме можно? Как это понимать?

А если по вашему на асме можно без библиотеки... то почему на Си нельзя?

Можно, чем он и ценится.

И на Си можно, но тогда, на мой взгляд, вся его "прелесть" улетучится.

А даташит для чего? Или вы думаете что даташиты могут читать только те кто пишет на асме?

Си прекрасно позволяет работать на самом низком уровне... Не понятно в чем проблема.....

Нет конечно, но для полного понимания прочитанного, лучше пройти этап "закрепления знаний" методом практики. А тут уже лучше "ручками, ручками...", а не тупо LCD_Init и ломать голову - "почему не работает?".

Вы не очень внимательно прочитали мою хотелку по использованию дисплея. Я хочу работать с ним через промежуточный буфер в SRAM размером в 1 Кб (ну хочу я так, это долго объяснять зачем, как нить увидете примерчик – поймете зачем)...

Хотелку то я понял, но не понял ЗАЧЕМ это нужно. Или вы видео-плеер собрались написАть?

А в чем STM настолько особенный, что должны быть какие то особые требования для его применения?.....

Так какие такие особенности у STM, ради которых должны быть какие-то особенные условия для его применения?...

Здесь все просто. Это как... "в кузове КАМАЗА возить один кирпич" только потому, что места в кузове много.

Ссылка на комментарий
Поделиться на другие сайты

Думаю, что AVR в цене вопроса и практичности выигрывает , для примера atmega 8 стоит 0.8$ , attiny2.. 0.4$ , а stm32f... самый из доступных минимум 2$ , но есть исключение это stm8 , тут самый доступный всего 0.36$

Изменено пользователем losyara

Денег нет, но вы держитесь за намордники.

Ссылка на комментарий
Поделиться на другие сайты

Вот написал библиотеку, еще не полную, но теперь работает как по 8 битной шине так и по SPI

.equ PCom = PORTD

.equ PW = PORTB

.def Temp = R16

.def Temp1 = R17

.def Data = R18

.equ SERIAL = 0 ; Если установленна то работает по последовательному порту,

; Что бы сделать паралельный порт 8/4 бита удалите дериктиву

; Управляющие порты для 8 битной передачи данных

.equ RS = 2

.equ E = 0

.equ RW = 1

; Управляющие порты для последовательной передачи данных

.equ SID = 1 ; RW

.equ CS = 2 ; RS

.equ SCLK = 0; E

; Для функции LCD8_MACRO_SET_SR

.equ SET_SR = 1

.equ SR = 0

; Для функции LCD8_MACRO_SET_FUNCTION

.equ SET_FUNCT = 5

.equ BIT_8 = 4

.equ EXT_FUNC = 2

.equ GRAPH_DISP_ON = 1

; Для функции LCD8_MACRO_SET_DISPLAY_STATUS

.equ SET_DISPLAY = 3

.equ BLINC_CURSOR = 0

.equ CURSOR_ON = 1

.equ DISPLAY_ON = 2

; Для функции LCD8_MACRO_ENTRY_MODE_SET

.equ ENTRY_MODE = 2

.equ ENTRY_ID = 1

.equ ENTRY_S = 0

.MACRO LCD8_MACRO_SET_SR

LCD8_MACRO_OUT_COMMAND @0

.ENDM

.MACRO LCD8_MACRO_ENTRY_MODE_SET

LCD8_MACRO_OUT_COMMAND @0

.ENDM

.MACRO LCD8_MACRO_SET_FUNCTION

LCD8_MACRO_OUT_COMMAND @0

.ENDM

.MACRO LCD8_MACRO_SET_DISPLAY_STATUS

LCD8_MACRO_OUT_COMMAND @0

.ENDM

; Переместить дисплей вправо

.MACRO LCD8_MACRO_DISPLAY_RIGHT

LCD8_MACRO_OUT_COMMAND 0b00011100

.ENDM

; Переместить дисплей влево

.MACRO LCD8_MACRO_DISPLAY_LIFT

LCD8_MACRO_OUT_COMMAND 0b00011000

.ENDM

; Отчистить экран

.MACRO LCD8_MACRO_CLEAR

LCD8_MACRO_OUT_COMMAND 0b00000001

.ENDM

; Переместить курсор и дисплэй в начало

.MACRO LCD8_MACRO_HOME

LCD8_MACRO_OUT_COMMAND 0b00000010

.ENDM

; Переместить курсов вправо

.MACRO LCD8_MACRO_CURSOR_RIGHT

LCD8_MACRO_OUT_COMMAND 0b00010100

.ENDM

; Переместить курсор влево

.MACRO LCD8_MACRO_CURSOR_LIFT

LCD8_MACRO_OUT_COMMAND 0b00010000

.ENDM

; Отправить команду

.MACRO LCD8_MACRO_OUT_COMMAND ; 1 параметр - команда

ldi Data, @0

rcall LCD12864_CommandOut

.ENDM

; Отправить данные

.MACRO LCD8_MACRO_OUT_DATA ; 1 параметр - данные

ldi Data, @0

rcall LCD12864_DataOut

.ENDM

; Задержка

.MACRO LCD8_MACRO_DELAY ; 1 параметр количество задержек, 2 параметр, количество микросекунд в задержки

ldi Temp, @0

ldi Temp1, @1

rcall Delay

.ENDM

; Записывает строку из памяти программы

.MACRO LCD8_MACRO_OUT_STRING ; 1 параметр метка строки из памяти программы, 2 параметр количества символов

ldi ZL, low(@0*2)

ldi ZH, high(@0*2)

ldi temp1, @1

rcall lcd8_out_string

.ENDM

lcd8_out_string:

for1:

lpm Temp, Z+

cpi Temp1, 0

breq exit1

dec Temp1

push Temp1

mov Data, Temp

rcall LCD12864_DataOut

pop Temp1

rjmp for1

exit1:

ret

/*************************************

Функции отправки команды и данных по паралельному порту 8 бит

LCD12864_CommandOut - Отправляет команду

LCD12864_DataOut - Отправляет данные

**************************************/

.ifndef SERIAL

LCD12864_DataOut:

sbi PCom, RS ;RS=1;

LCD8_MACRO_DELAY 1, 1

sbi PCom, E ;E=1.

out PW, Data ;Вывод данных.

LCD8_MACRO_DELAY 1, 1

cbi PCom, E ;RS=0, E=0.

cbi Pcom, RS

LCD8_MACRO_DELAY 1, 50

rcall Delay

ret

LCD12864_CommandOut: ;Вывод команды на индикатор.

cbi PCom, E ;E=0 и RS.

cbi PCom, RS

cbi PCom, RW

LCD8_MACRO_DELAY 1, 1

sbi PCom, E ;E=1.

out PW, Data ;Посылаем данные.

LCD8_MACRO_DELAY 1, 1

cbi PCom, E ;E=0

LCD8_MACRO_DELAY 1, 50

rcall Delay

ret

.endif

/*************************************

Функции отправки команды и данных по последовательному порту

LCD12864_CommandOut - Отправляет команду

LCD12864_DataOut - Отправляет данные

**************************************/

.ifdef SERIAL

LCD12864_CommandOut:

ldi r20, 0

rjmp command

LCD12864_DataOut:

ldi r20, 1

command:

LCD8_MACRO_DELAY 1, 1

sbi PCom, CS

sbi PCom, SID

rcall strob ; 1

rcall strob ; 1

rcall strob ; 1

rcall strob ; 1

rcall strob ; 1

cbi PCom, SID ; rw = 0

rcall strob

cbi PCom, SID ; rs = 0

cpi r20, 0

breq command1

sbi PCom, SID ; rs = 1

command1:

rcall strob

cbi PCom, SID ; 0

rcall strob

ldi r20, 8

for_send_data:

cpi r20, 0

breq stop_send_data

cpi r20, 4

brne no_strob

cbi PCom, SID

rcall strob

rcall strob

rcall strob

rcall strob

no_strob:

dec r20

rol Data

brcs send_bit_1

cbi PCom, SID ; Данные 0 бит

rcall strob

rjmp for_send_data

send_bit_1:

sbi PCom, SID ; Данные 1 бит

rcall strob

rjmp for_send_data

stop_send_data:

cbi PCom, SID

rcall strob

rcall strob

rcall strob

rcall strob

cbi PCom, SID

cbi PCom, CS

ret

strob:

LCD8_MACRO_DELAY 1, 1

sbi PCom, SCLK

LCD8_MACRO_DELAY 1, 1

cbi PCom, SCLK

LCD8_MACRO_DELAY 1, 1

ret

.endif

;******************************************************

LCD12864_Init: ;Инициализация дисплея.

LCD8_MACRO_DELAY 1, 50

LCD8_MACRO_SET_FUNCTION (1<<SET_FUNCT) ;Вывод команды.

LCD8_MACRO_DELAY 1, 120

LCD8_MACRO_SET_DISPLAY_STATUS (1<< SET_DISPLAY) | (1<<CURSOR_ON) | (1<<DISPLAY_ON) | (1<<BLINC_CURSOR)

LCD8_MACRO_DELAY 1, 50

LCD8_MACRO_SET_FUNCTION (1<<SET_FUNCT) ;Вывод команды.

LCD8_MACRO_DELAY 1, 120

LCD8_MACRO_CLEAR ;Вывод команды.

LCD8_MACRO_DELAY 1, 20

LCD8_MACRO_ENTRY_MODE_SET (1<<ENTRY_MODE)

LCD8_MACRO_DELAY 1, 50

LCD8_MACRO_SET_FUNCTION (1<<SET_FUNCT) ;Вывод команды.

LCD8_MACRO_DELAY 1, 120

ret

Delay:

push Temp ;Сохраняем младшую задержку в ОЗУ.

ES0:

dec Temp ;- задержка.

cpi Temp, 0 ;Закончилась?

brne ES0 ;Нет - еще раз.

pop Temp ;Да? Восстановить здержку.

dec Temp1 ;Отнять от "количества задержек" разряда.

cpi Temp1, 0 ;Количество задержек = 0?

brne Delay

ret

; Функция перемещения курсора по дисплею

LCD12864_mov_cursor: ; r16 - x ; r17 - y

push r16

push r17

push r18

cpi r17, 0

breq exet5

cpi r17, 1

breq one

cpi r17, 2

breq two

cpi r17, 3

breq three

one:

ldi r17, 16

add r16, r17

rjmp exet5

two:

ldi r17, 8

add r16, r17

rjmp exet5

three:

ldi r17, 24

add r16, r17

exet5:

ldi Data, 0b10000000

add Data, r16

rcall LCD12864_CommandOut

pop r18

pop r17

pop r16

ret

Изменено пользователем apolon1919
Ссылка на комментарий
Поделиться на другие сайты

неа, я графический режим не юзал, а в текстовом разницы нет.

Завтра заюзаю графический режим + напишу детальное описания библиотеки

Ссылка на комментарий
Поделиться на другие сайты

Вобщем дописал описание

LCD дисплей на контроллере ST7920 (LCD12864)

Для использования последовательного (SPI) режима передачи данных установите дерективу SERIAL

Для использования 8 битной передачи данных удалите дерективу SERIAL

Описание функций

LCD12864_DataOut - отправляет данные на дисплей, данные должны находится в регистре Data

LCD12864_CommandOut - отправляет команду на дисплей, команда должна находится в регистре Data

LCD12864_out_string - Отправляет строку из Flash памяти программы, имеет 2 параметра,

1 - это указатель на строку который должен хранится в регистре Z

2 - это количество передаваемых символов, должен находится в регистре Temp1

LCD12864_mov_cursor - Устанавливает положения курсора на дисплее, и имеет 2 параметра координаты X и Y

1 - это X координата, передается в регистре r16

2 - это Y координата, передается в регистре r17

Описание макросов

LCD8_MACRO_SET_SR - Устанавливает параметры SR

(1<<SET_SR) - Обязательный параметр

(1<<SR) - Устанавливает значение SR в 1

LCD8_MACRO_ENTRY_MODE_SET - ENTRY MODE

(1<<ENTRY_MODE) - Обязательный параметр

(1<<ENTRY_ID)

(1<<ENTRY_S)

LCD8_MACRO_SET_FUNCTION - Устанавливает свойства функций

(1<<SET_FUNCT) - Обязательный параметр

(1<<BIT_8) - Устанавливается если используется 8 битная шина

(1<<EXT_FUNC) - Использовать набор расширеных функций

(1<<GRAPH_DISP_ON) - Включает графический дисплей

LCD8_MACRO_SET_DISPLAY_STATUS - Устанавливает статуст дисплея

(1<<SET_DISPLAY) - Обязательный параметр

(1<<BLINC_CURSOR) - Мигать курсорам

(1<<CURSOR_ON) - Показывать курсор

(1<<DISPLAY_ON) - Включить дисплей

LCD8_MACRO_MOV_CURSOR - Переместить курсор в нужную координату дисплэя

1 Параметр это X

2 параметр это Y

LCD8_MACRO_DISPLAY_RIGHT - Переместить дисплей вправо

LCD8_MACRO_DISPLAY_LIFT - Переместить дисплей влево

LCD8_MACRO_CLEAR - Отчистить экран

LCD8_MACRO_HOME - Переместить курсор и дисплэй в начало

LCD8_MACRO_CURSOR_RIGHT - Переместить курсор вправо

LCD8_MACRO_CURSOR_LIFT - Переместить курсор влево

LCD8_MACRO_OUT_COMMAND - Отправить команду

1 параметр - команда

LCD8_MACRO_OUT_DATA - Отправить данные

1 параметр - данные

LCD8_MACRO_DELAY - Задержка в микросекундах

1 параметр количество задержек

2 параметр, количество микросекунд в задержки

LCD8_MACRO_OUT_STRING - Записывает строку из памяти программы

1 параметр метка строки из памяти программы

2 параметр количества символов

А вот ссылка на код http://pastebin.com/AWjWkR1q

LCD12864_Driver.rar

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Всем привет.

Тоже "юзаю" дисплей st7920.Библиотека u8glib ,компилятор AVR Studio 4.19, МК Atmega328.Текст, графические примитивы, монохромные изображения формата XBM - все работает.

Занимаюсь "руссификацией". Здесь https://code.google....ontgroupunifont имеются два кириличных шрифта - u8g_font_unifont_0_8 ; u8g_font_unifont_8_9. Использую - u8g_font_unifont_0_8, на дисплей текст выводится неправильно,но просматривается закономерность : высвечивается символ из этого шрифта который находится в таблице над тем символом который я пишу в исходнике.

u8g_font_unifont_0_8.png

То-есть если написаать слово "привет" как "ЯаШТХв" на экране высветится правильно.Не пойму,что это ошибка в шрифте,аль чего?

Изменено пользователем rastamanoff
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...