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

Работа С Массивами На 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-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 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 пользователей онлайн

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

    • Мне показалось, что я ответил на Ваш вопрос... но видимо не убедительно... хорошо, беру такой LOGO! 12/24RC   (6ED1 052-1MD00-OBA5), последний раз на него питание подавали в году так эдак в 2010_м... достал его из закромов, подал питание и программа стартанула в штатном режиме... единственно как и писал ранее часы сброшены до заводской установки... надеюсь теперь Вас убедит то, что девайс если сохранил программу 14 лет, то особых поводов у него нет, чтобы её сбрасывать в дальнейшем. 
    • Точно не могу сказать, не разбирал я не разу Лого, по факту должна сохраниться. Много чего разбирал, не было проблем при рассоединении этажерок.
    • Это только по одному плечу? По второму плечу нормально?
    • а ответ на вопрос темы от Вас будет? Т.е. сохранится ли рабочая программа при разъединении верхней и нижней плат?  Потому как если ответ однозначно положительный, то этот геморрой с самопальным шнурком мне нафиг не нужен. 
    • Всем привет, комрады!  Пользуюсь данным усилителем чуть больше 13 лет, все устраивает. Питается от ТС-180-2. Понадобилось заменить этот трансформатор на другой поменьше, думаю на торе заказать, а какой именно по характеристикам - пытаюсь разобраться. Стыдно признаться, ни разу не смотрел какие напряжения, какие токи в усилителе... собрал - включил и забыл. Сейчас придется разбираться.  Правильно ли понимаю что общая мощность транса = токи и напряжения каждой лампы, + накалы?  Тогда судя по даташитам, 6н1п на два канала - (250в*0,0075мА)*2 + (6,3в*0,6А)=3,75Вт+ 3,8Вт=~7,5Вт.  А 6п14п=(250в*0,048А+250В*0,005А+6,3В*0,76А) * 2 = (12Вт+1,25Вт+4,8Вт ) * 2 лампы = 18Вт * 2  = 36Вт. Хотя две лампы 6п14п питаются от одной обмотки 6,3в.  Итого меньше 50 Вт, ну и с запасом небольшим 60-80Вт.  А вот как указать в заказе? Схема питается 275в, то есть вторичку делать 200в, а ток?  То есть две выходных лампы уже 100мА, запас если делать как правило 10-20%, то примерно 200в * 120мА ?  НУ с накалом тут проще) Задача в том что нужно как можно менее габаритный трансформатор, увы, ТС-180 не влезает в новую конструкцию. Ну и для понимания, сейчас начну усилитель для наушников собирать, пригодится.    
    • Лучше не надо.  Буфер добавляет всего 6 копеечных деталей а надëжность и мощность увеличит в разы, и даст работать даже с низкоомными наушниками. Даже 32 Ом наушники один ОУ из JRC4558 не потянет. 
    • Какова площадь поверхности данного радиатора?
×
×
  • Создать...