[an error occurred while processing this directive]
|
При работе вылезла проблема такая: когда пытаюсь установить курсор в позицию в нижнем правом углу, он этого не делает. То есть если адрес > 0x60, то он устанавливается по адресу 0х60. При этом если выводить целиком строку, то в те "недоступные" для установки курсора позиции символы выводятся нормально. Мыкался я мыкался, и нашел решение, мягко говоря, нетрадиционным способом: если нужно поставить курсор в позицию > 0x60, то я ставлю курсор в позицию 0х60, а потом сдвигами курсора перегоняю его куда мне надо. Сталкивался ли кто-нибудь с такой проблемой, и как ее решали?
Тексты функции установки курсора:
Та, которая работает по всем адресам не более 0х60 нормально, а после 0х60 не устанавливает курсор почему-то:
GotoXY(ubyte col, ubyte line) //перемещает курсор в указанную позицию 0,0 - левый верх
{
if(line&0x01)col+=0x40;
if(line&0x02)col+=LCDCol;LCDRS=0;
LCDRW=0;
LCDEn=1;
OutPort=SetDDRAM|col;
LCDEn=0;
while(BusyLCD()==1);
}
GotoXY(ubyte col, ubyte line) //перемещает курсор в указанную позицию 0,0 - левый верх
{
if(line&0x01)col+=0x40;
if(line&0x02)col+=LCDCol;
if(col>0x60){
line = col-0x60;
col = 0x60;
}else line = 0xFF;//Признак того, что коррекцию правого нижнего угла делать не нужноLCDRS=0;
LCDRW=0;
LCDEn=1;
OutPort=SetDDRAM|col;
LCDEn=0;
while(BusyLCD()==1);if(line==0xFF)return;//если целевая позиция <60 - выход
while(line!=0){//сдвигаем курсор до нужной позиции
InstructionLCD(CursorShift|Shift_RL);
while(BusyLCD()==1);
line--;
}
}
E-mail: info@telesys.ru