[an error occurred while processing this directive]
Повторить несколько раз(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено misyachniy 01 февраля 2006 г. 18:11
В ответ на: Подскажите процедуру увеличения матричного шрифта отправлено <font color=gray>zummer</font> 01 февраля 2006 г. 16:50


Для термопринтера:
Повторение в строке(уширение):
//------------------------------------------
void ShiftOneByte(u08 b, u08 scale )
{
u08 i;
u08 m;
i=0x80;

while (i>0)
{
if ((b & i)==0) bit_off (DATA); // установить значение бита
else bit_on (DATA);
m=scale;
while (m > 0) // повторить m раз
{
bit_on (CLK);
bit_off (CLK);
m--;
}
i>>=1;
}
}
//-----------------------------------------

А это вывод строки в масштабе.
Повторение строк в двух строчках
sY=SY; // масштаб по вертикали
while (sY-- > 0)

//------------------------------------------
void PrintString_P (const char *p, u08 SX, u08 SY) // печать строки из Flash
{
u08 b; //байт для выталкивания в буфер головки
u08 column; // текущий символ для отображения. 0-признак конца строки
u08 line; // счетчик линий в символе, от 8 до 0 так как исходный шрифт 8x8
u16 index; // Смещение указателя в массиве шрифтов
u08 sX, sY; // счетчик масштаба ширины и высоты
const char *StoredP; // ячейка для хранения указателя на начало строки
u08 mod, curmod;

// подсчитаем число символов в строке
StoredP=p;
column=1;
index=0;
while (column!=0) // собственно идем по строке
{
column=PRG_RDB(StoredP++); // считали очередной байт для отображения
index++;
}

mod=(LengthHeadBuffer/(8*SX)-index);// число пробелов которыми нужно добить строку

line=0;
StoredP=p;
while (line++ < 8) // 8 раз пройтись по строке
{
sY=SY; // масштаб по вертикали
while (sY-- > 0)
{
column=1;
p=StoredP;
while (column!=0) // собственно идем по строке
{
column=PRG_RDB(p++); // считали очередной байт для отображения
if (column>127)
column=win2dos(column);

index=8*column; // указали на начало символа
b = PRG_RDB(&FontTable[index + line -1]);
sX=SX;
ShiftOneByte(b, sX);
}

// вытолкали одну линию строки добиваем пробелами
bit_off (DATA);
curmod=mod;
while (curmod-- > 0) ShiftOneByte(0x00, sX);
PrintOneLine();
}// while (sY-- > 0)
} // while (line++ <8)
}


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru