реклама на сайте
подробности

 
 
> Знатоки HD44780, Подскажите, это мой косяк или дисплей в топку
Sirko
сообщение Nov 23 2010, 23:10
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



Имеется LCD 4х20, соединение 8 бит, вывод "RW" - не задействован.
Проявилась интересная особенность, если заполнять экран целиком, т.е. с адреса 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);


Функция 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;
}

Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 00:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.0263 секунд с 7
ELECTRONIX ©2004-2016