[an error occurred while processing this directive]
|
Для термопринтера:
Повторение в строке(уширение):
//------------------------------------------
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: info@telesys.ru