Easyelectronics.ru

Электроника для всех
Текущее время: 17 сен 2019, 01:38

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Немогу положить картинку на картинку втроя затирает.
СообщениеДобавлено: 15 авг 2019, 22:37 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 31 авг 2012, 16:52
Сообщения: 72
Откуда: Москва
И сново я со своими дурацкими вопросами.
Работаю с графическим МЭЛТом:
Из епрома по I2C заганяю картинку в массив из которого потом передаю в МЭЛТ.
Код:
uint8_t array[16][64]={0};

В картинки есть пустые места для цифр, там записаны 0. Туда по адресам кладу цифры.
С маленькими цифрами проблем нет они размером в одну строку,
а вот с большими возникла проблема они по размеру больше одной строки
и поэтому на этой строке находится часть ресунка а другая часть цифры.
Сразу мысль такая "оператор присваивания" вот как выглядит:
Код:
array[page][i] ^= LL_I2C_ReceiveData8(I2C1)
пробавал сложение так как картинка находится в младших битах а цифра в старших:
Код:
array[page][i] ^= LL_I2C_ReceiveData8(I2C1)
на некоторых кусках рисунок затирается или искажается.
Если что то F103, МТ-12864.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Немогу положить картинку на картинку втроя затирает.
СообщениеДобавлено: 15 авг 2019, 22:45 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3642
Руский изык мы знаем так жи харашо как и праграмирование.
Нужен оператор не XOR, а OR. Картинка читается в буфер, а поверх неё накладываются цифры через OR. Если картинка налезает на цифры, перед наложением цифры можно очистить часть картинки по AND маски.

PS. Кто там настаивал, что товарисчу нужен стопудово именно С++, ась? Ну, кто, сознавайтесь? А я посмотрю на вас, как вы будете товарисчу объяснять, в чем различие лог.операторов и что такое таблица истинности. Ну, где этот вечнозеленый спорщик, мм? Где он? Когда надо, хрен его найдешь, а когда не просят, так в каждой опе затычка.


Последний раз редактировалось BusMaster 15 авг 2019, 23:20, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Немогу положить картинку на картинку втроя затирает.
СообщениеДобавлено: 15 авг 2019, 22:51 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 31 авг 2012, 16:52
Сообщения: 72
Откуда: Москва
Я уже тупо перепробовал все операторы присваивания какие были.
Потому и полез сюда с вопросом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Немогу положить картинку на картинку втроя затирает.
СообщениеДобавлено: 16 авг 2019, 18:13 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3642
Мда. Ну и поскольку главнопродыбанный классовый спициалистъ так и не смог ничего предложить, придецца уж без него обходиться. Тяжело, но можно :)).
Как я писал ранее, дергание пинов E0, E1 - это всего лишь 2% работы с графическим дисплеем. Написать дергание Е - это тьфу, такая задача, которая не требует ну никаких затрат. А тут, как мы наблюдаем, проблемы покруче - "картинка портится от оператора присваивания", видишь ли :)))
Так вот. "Положить картинку на втроя картинку" - это по операции OR. Записывается она значком | . И запись |= это не "оператор присваивания". Это совмещенный логический оператор, равнозначный выражению a = a | b .

Что касается проблематики такого рода дисплеев.
Для графических функций наиболее удобно линейное представление массива дисплея. В том смысле, что координата x должна изменяться от 0 до 127, без разделения на первую и вторую половину экрана. Этим разделением пусть занимается функция вывода байтов в дисплей: x <= 63 - дергаем E0, иначе - E1. Вывод идет чуть медленнее, зато графические функции не страдают. И это обосновано. Обновление дисплея - один раз на кадр, а построение графических элементов - многократное в пределах кадра.
Таким образом, массив дисплея будет объявлен так: uint8_t gram[8][128]
С координатой x теперь всё понятно, дело за координатой y. Дисплей со страничной организацией, вертикально пиксели упакованы в байт по 8 пикселей. Таким образом, для вывода произвольной точки с координатами (x, y) нам понадобятся три переменных в координатах дисплея: координата x, номер страницы p и сдвиг внутри страницы s. Причем p и s вычисляются на ходу по координате y, и нет нужды хранить их отдельно. p = y / 8; s = y % 8.

По поводу вывода шрифта в подобном дисплее.
Это хорошо и легко, когда текстовая строка по высоте выровнена по началу страницы, а размер символа равен 8 или кратен 8 пикселям. А если нет, то дело хуже. Приходится сдвигать байты вниз на величину %8, да еще и маску переносить и подрезать по нижней границе символа.
Наиболее универсально и просто решается заполение пиксель-в-пиксель, когда берется пиксель из шрифта и переносится в пиксель буфера дисплея, со сдвигом координат начала символа.

В общем, как видите, украшательство дергания ногой типа E = 1 - это ссущая мелочь, на которую даже не стоит обращать внимание. Много внимания потребуют чисто графические задачи - как именно выводить растровые шрифты и растровые картинки - попиксельно или побайтно. Как рисовать векторные фигуры. Как производить наложение частей изображения. Как реализовать "всплывающие окна". Как реализовать GUI. Как реализовать управление и отображение посредством GUI. Воооо сколько всего. А вы - как дергать ногой в виде E = 1.
Да, и почему молчит классовый вечнозеленый спорщик? Он что, кроме дергания ногой больше ничего и не делал? Ай-ай. Ну я же говорил - вначале научитесь вообще писать. Эх, ща, когда уже нафик не нужно, выползет и снова разведет бестолковый спор о классах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Немогу положить картинку на картинку втроя затирает.
СообщениеДобавлено: 16 авг 2019, 19:08 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2015
Откуда: Киев
Судя по описанию у вас дисплей, что-то типа ks0108 на который в сети 1000 и 1 библиотека на любой вкус и цвет ( например adafruit ks0108) . Начиная от самых простых, заканчиваю весьма навороченными.
Берите и пользуйтесь, зачем изобретать велосипед.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: AVI-crak


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB