Easyelectronics.ru

Электроника для всех
Текущее время: 26 янв 2020, 04:36

Часовой пояс: 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
Сообщения: 3931
Руский изык мы знаем так жи харашо как и праграмирование.
Нужен оператор не 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
Сообщения: 3931
Мда. Ну и поскольку главнопродыбанный классовый спициалистъ так и не смог ничего предложить, придецца уж без него обходиться. Тяжело, но можно :)).
Как я писал ранее, дергание пинов 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
Сообщения: 2110
Откуда: Киев
Судя по описанию у вас дисплей, что-то типа ks0108 на который в сети 1000 и 1 библиотека на любой вкус и цвет ( например adafruit ks0108) . Начиная от самых простых, заканчиваю весьма навороченными.
Берите и пользуйтесь, зачем изобретать велосипед.


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


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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

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