[an error occurred while processing this directive]
Можно попробовать, конечно, но я не советую...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Al Volovich 10 июня 2003 г. 10:54
В ответ на: А АП6 зачем?Просто двуми регистрами не обойтись? отправлено sasha76 10 июня 2003 г. 09:12

Можно обойтись без регистров, а буфер нужен. Пример работы с принтером, отлаживал с LX-300, написан для Кейл С166.

#define PrnWidth LCDWidth //ширина поля вывода графика в пикселах
#define PrnHeight LCDHeight //высота
#define prOk 0
#define prErr 10
#define prNoPaper 20
#define peOk 0
#define peCancel 0xFFFF

const char InitPrn[] = {27,48,0}; //высота строки 1/8"
const char InitStr[] = {10,13,9,27,76,(LCDWidth*2)%256,(LCDWidth*2)/256,0};
//строка инициализации графической строки

uword PrintByte(ubyte Data) //выводит байт Data на принтер
{
LStr = 1; //настраиваем ноги
DLStr = 1;
DLErr = 0;
LPTOn=0;
DP3|=0x03FC;
P3 = (P3&0xFC00)|(Data << 2);
do{
if(LErr==0){
LPTOn = 1;
return prErr;
};
if(LPE==1){
LPTOn = 1;
return prNoPaper;
};
}while(LBusy==1);
LStr = 0;
_nop_();
LStr = 1;
LPTOn = 1;
return prOk;
}

uword PrintString(ubyte* str) //выводит на принтер строку
{
uword uuu = prOk;
while ((*str!=0)&&(uuu==prOk)){
uuu=PrintByte(*str);
str++;
}
return uuu;
}

uword PrintError(uword Errno)
{
uword uuu;
ClrScr();
if(Errno == prErr)PutString(3,3,"_иЁЎЄ  ЇаЁ-в_а ");//Ошибка принтера
if(Errno == prNoPaper)PutString(3,3,"__в Ўг┐ _Ё");//Нет бумаги
PutString(0,LCDHeight/8-1,"*:_в┐_-  #:_аR¤R<│Ёвм");//Отмена Продолжить
LCDRefresh();
while(1){
while((uuu=KeysWait())==kbNoOne);
if(uuu == kbEsc)return peCancel;
if(uuu == kbEnter)return peOk;
}
return 0;
}

uword PrintScreen(ubyte strcount)
//печатает содержимое strcount строк видеоОЗУ.
//Возвращает peCancel - прервать печать или peOk - все Ok
{
ubyte PrnRAM[LCDWidth*LCDHeight/8];
uword uuu, strings, bytes;

Video2Prn(PrnRAM); //копируем содержимое ВидеоОЗУ в буфер
while((uuu = PrintString(InitPrn))!=prOk) //инициализируем принтер
if (PrintError(uuu)==peCancel)return peCancel;

for(strings=0;strings while((uuu = PrintString(InitStr))!=prOk) //выводим в принтер заголовок графической строки
if (PrintError(uuu)==peCancel)return peCancel;

for(bytes=0;bytes while((uuu = PrintByte(PrnRAM[strings*LCDWidth+bytes/2]))!=prOk)
if (PrintError(uuu)==peCancel)return peCancel;
};

return peOk;
}

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

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru