Проявилась интересная особенность, если заполнять экран целиком, т.е. с адреса 0 и до финиша, то все знаки ложаться как положено. Если с адреса 40, то тоже все замечательно. А если стартовать с адреса больше 40, начинаются чудеса. Символы, которые находятся за пределами позиции 63, пляшут загадочным образом.
Для пущей ясности, прикладываю фото и ему соответствующий код,
Код
u08 str[] = "01234567890123456789ABCDEFGHIJKLMNOPQRST"
"abcdefghijklmnopqrst*****-----+++++/////";
lcd.setAddress(0);
lcd.sendData(str, 80); //1
OS:Sleep(1000);
lcd.clear();
lcd.setAddress(40);
lcd.sendData(str, 40); //2
OS::Sleep(1000);
lcd.clear();
lcd.setAddress(50);
lcd.sendData(str, 30); //3
OS::Sleep(1000);
lcd.clear();
lcd.setAddress(60);
lcd.sendData(str, 20); //4
OS::Sleep(1000);
lcd.clear();
lcd.setAddress(40);
lcd.sendData(str, 40); //5
OS::Sleep(1000);
"abcdefghijklmnopqrst*****-----+++++/////";
lcd.setAddress(0);
lcd.sendData(str, 80); //1
OS:Sleep(1000);
lcd.clear();
lcd.setAddress(40);
lcd.sendData(str, 40); //2
OS::Sleep(1000);
lcd.clear();
lcd.setAddress(50);
lcd.sendData(str, 30); //3
OS::Sleep(1000);
lcd.clear();
lcd.setAddress(60);
lcd.sendData(str, 20); //4
OS::Sleep(1000);
lcd.clear();
lcd.setAddress(40);
lcd.sendData(str, 40); //5
OS::Sleep(1000);
Функция sendData() принимает указатель на строку и кол-во символов, необходимых для отображения
Нажмите для просмотра прикрепленного файла <-- 1 setAddress( 0); sendData(str, 80);
Нажмите для просмотра прикрепленного файла <-- 2 setAddress(40); sendData(str, 40);
Нажмите для просмотра прикрепленного файла <-- 3 setAddress(50); sendData(str, 30);
Нажмите для просмотра прикрепленного файла <-- 4 setAddress(60); sendData(str, 20);
Нажмите для просмотра прикрепленного файла <-- 5 setAddress(40); sendData(str, 40);
С одной стороны, один и тот же код ведет себя по разному, с другой, возможно, есть какой то нюанс.
Инициализация вот такая
Код
void LCD_HD44780::///////////////////////////////////////////////////////////////////
init(){
mutex->Lock();
ON(LCD_PIN_RS);
DRIVER(LCD_PIN_RS, OUT);
ON(LCD_PIN_STROB);
DRIVER(LCD_PIN_STROB, OUT);
mutex->Unlock();
OS::Sleep(200);
for(u08 i=0; i<3; ++i){
sendCommand(BIN8(00110000)); // Шина 8 бит
OS::Sleep(50);
}
clear(); // CLS
sendCommand(BIN8(00111000)); // Шина 8 бит, 2 строки
sendCommand(BIN8(00000110)); // Инкремент адреса. Экран не движется
sendCommand(BIN8(00001100)); // Включть дисплей (D=1)
clear(); // CLS
ON_LIGHT_LCD;
}
init(){
mutex->Lock();
ON(LCD_PIN_RS);
DRIVER(LCD_PIN_RS, OUT);
ON(LCD_PIN_STROB);
DRIVER(LCD_PIN_STROB, OUT);
mutex->Unlock();
OS::Sleep(200);
for(u08 i=0; i<3; ++i){
sendCommand(BIN8(00110000)); // Шина 8 бит
OS::Sleep(50);
}
clear(); // CLS
sendCommand(BIN8(00111000)); // Шина 8 бит, 2 строки
sendCommand(BIN8(00000110)); // Инкремент адреса. Экран не движется
sendCommand(BIN8(00001100)); // Включть дисплей (D=1)
clear(); // CLS
ON_LIGHT_LCD;
}