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

Работа С Массивами На Avr. Не Понимаю, Помогите Разобраться


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

Всем здравствуйте. Продолжаю осваивать МК AVR. Возникла задача выводить на семисегментный индикатор некоторые цифры. Для начала решил сделать простую программу, которая будет выводить цифры на двухразрядный семисегмент от 0 до 99.

Нужно использовать массивы и директиву «.db»

Что это такое и с какой стороны подойти, я не знаю.

Вот значения для моих семисегментов, а что дальше делать с этими .db ума не приложу…

array:
.db 0x03, 0x9F ;0,1
.db 0x25, 0x0D ;2,3
.db 0x99, 0x49 ;4,5
.db 0x41, 0x1F ;6,7
.db 0x01, 0x09 ;8,9

Подскажите где искать ответы

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

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

У тебя есть массив с меткой array. Теперь загружаешь начальный адрес массива в адресный регистр Z. Например так, ldi zl,(array<<1), ldi zh,(array<<1). Если тебе нужен элемент массива №3, то прибавляешь к адресу 3. Теперь можешь читать содержимое ячейки в регистр командой LPM. LPM R16,Z. Этот пример для AVR.

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

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

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

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

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

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

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

Добрый день. Экспериментирую с выводом текста на дисплей Nokia N82 в такой связке- Мега32+ LCD . разрулил вывод текста- инглиш и русский размером 8х8 пикселей. Но поскольку дисплей имеет разрешение 320х240 то текст получается слишком мелким. За сим вопрос: прошу ткнуть носом в ссылку с примером, или привести пример вывода текста большей размерности. Думаю, вариант с увеличением количества строк и столбцов и символе - имеет право на жизнь. Пишу на Си в AVRStudio4, вот моя функция вывода символа и строки символов. Здоровая критика - приветствуется.

void nlcd_Char(char c, unsigned int x, unsigned long int y, unsigned long fcolor, unsigned long bcolor)

{

int i;

int j;

unsigned int nCols; // количество столбцов !!! Все это указывается в первой строке файла с шрифтом !!!

unsigned int nRows; // количество строк

unsigned int nBytes;// количество байт

unsigned int PixelRow;

unsigned int Mask;

unsigned long Word0;

unsigned char *pFont;

unsigned char *pChar;

if (c>127) c=c-64; // Переносим символы кирилицы в начало второй

// половины таблицы (начиная с кода 0x80).

pFont = (unsigned char *)Nokia6610_fnt8x8; // получаем указатель на таблицу шрифтов, их может быть несколько- см. PDF

nCols = pgm_read_byte(pFont);

nRows = pgm_read_byte(pFont + 1);

nBytes = pgm_read_byte(pFont + 2);

pChar = pFont + (nBytes * (c - 0x1F));

for (i = 0; i<nCols; i++)

{

PixelRow = pgm_read_byte(pChar++);

Mask = 0x80;

for (j = 0; j < nRows; j += 1)

{

if ((PixelRow & Mask) == 0)

Word0 = bcolor;

else

Word0 = fcolor;

nlcdPixel( x+i,y-j, Word0);

Mask = Mask >> 1;

}

}

nlcd_SendByte_CMD(LCD_NOP); // Задержка

Вывод строки символов

void nlcd_Text(char *ptext, unsigned char x, unsigned char y,unsigned long fcolor, unsigned long bcolor)

{

while (*ptext != 0x00) // цикл- пока символ не равен нолю

{

nlcd_Char(*ptext++, x, y,fcolor,bcolor);

// LCDPutChar(*pString++, x, y, Size, fColor, bColor);

x=x+8;

if (y > 319) break;

}

}

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

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

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

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

Если вы знаете алгоритм прорисовки буквы, то вам не составит труда накатать шрифт иных размеров. Существуют даже програмки, где выбираешь размерность шрифта и по клеткам рисуешь букву, а прога компилит код в текстовик.

Сам составлял шрифты, поверьте это не сложно

В поисках работы..

Looking for job

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

Алгоритм известен, но вот программы-конвертеры Font-ов не корректно отображают массив с шрифтом свыше 10х12 А рисовать в клеточку весь инглиш + раша- это время которое можно было-бы провести с большей пользой)) В свое время - накатал с пяток шрифтов для Нокии 1202, 1100 и т.д. Вот и заморочился с увеличением шрифта 8х8 - вдвое. Так сказать, хочется обойтись малой кровью.

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

Допустим у вас 8-ми разрядный МК. Для вывода символа 8х8 вам потребуется описать 8 байт т.к.: Допустим, если взять листок в клетку, то 1 клетка = 1 пикселю = 1 биту. Т е 1 байт символа описывает 1 строчку. Этим объясняется кратность 8 всех шрифтов. Можно сделать символ 4х6 (4-ширина, 6-высота), т е каждый символ будет описан 3 байтами.

В вашем случае можно предположить, что необходим символ 8х12 (8 пикселей-ширина, 12 пикселей - высота). В итоге алгоритм программы перебирая каждый бит символа закрашивает пиксель на дисплее заданным вами цветом(если бит=1) или пропускает пиксель (если бит=0).

естественно 16 разрядным МК всё это будет шустрее. Сам юзал дисплей от nokia6280.

В поисках работы..

Looking for job

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

  • 3 месяца спустя...

To fuckir Хотя мой ответ и запоздал- все равно, спасибо. разобрался я с выводом шрифта размерностью более 8х8 пикселей, реализовал в одной функции вывод двух шрифтов- 8х8 и 8х16. Как говорится аппетит приходит во время еды)), захотелось вывести символ превышающий ширину в 8 пикселей. Мои размышления: при отрисовке, допустим символа 24 пиксела ширина и 32 пиксела высота, вероятно нужно изображение разбивать на части и выводить- по 1 байту в ширину и до полной отрисовки по высоте т.е.32 байта, затем по ширине 2-й байт изображения и до полной высоты - 32 байта , ну и так далее... Прошу подсказать правильность моих размышлений, или ошибочность... Может существует более простой алгоритм вывода шрифтов более 8 пикселей по ширине.

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

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

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

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

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

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

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

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

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

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

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