Главная » Arduino
Призовой фонд
на октябрь 2020 г.
1. 1500 руб
Сайт Паяльник
2. Тестер компонентов MG328
Сайт Паяльник
3. 150 руб.
От пользователей


Плата NodeMcu V3 на основе микроконтроллера ESP8266 со встроенным Wi-fi

Netduino: Взаимодействие с символьным ЖК-дисплеем

Жидкокристаллические дисплеи (LCD) являются отличным выбором устройства вывода для отображения буквенно-цифирных символов в реальном времени. Они также очень полезны, если вашему проекту требуется интерактивный пользовательский интерфейс для ввода данных. Кроме того, они недороги, потребляют меньше энергии, чем светодиодные дисплеи, и дают вашему проекту более профессиональный вид . Сегодня мы рассмотрим, как взаимодействовать с символьным ЖК-дисплеем на основе HD44780 с Netduino для отображения буквенно-цифирных символов. Для уточнения технических деталей контроллера HD44780, пожалуйста, прочитайте его даташит, а также пример взаимодействия с ним с chipKit.

NetduinoIndexPageTopBanner.png

Сборка схемы и теория

Правильное соединение очень просто. ЖК-дисплей работает в 4-битном режиме, поэтому контакты с 7 по 10 (D0-D3) ЖК-дисплея не используются. Четыре наиболее значимых бита данных, D4-D7 (контакты с 12 по 14), получают ЖК данные/команды с портов ввода/вывода Netduino 7, 5, 3 и 1 соответственно. Кроме того, сигнальные линии Register Select (R/S) и Enable (E)  LCD идут к портам ввода/вывода Netduino 11 и 9  соответственно. Контакты LCD 1, 2, 3, 4, 15 и 16 относятся к источнику питания, регулировке контрастности и светодиодной подсветке дисплея, и они  подключаться правильно, как показано ниже. Чтобы понять, как работает ЖК, я должен указать на другой документ, где это объясняется лучше. В статье Взаимодействие с символьным ЖК-дисплем, Raj  рассказывает о связи в 4-битном режиме, и он также рассказывает об основах ЖК-драйвера HD44780. Для получения дополнительной технической информации см. Hitachi HD44780U (LCD-II) даташит.

Соединение с Netduino/Netduino Plus

netduino_day2_circuit.png


C#.NET программа

Есть два варианта виденья программы, один очень простой и другой, очевидно, более трудный путь. В простом способе мы не беспокоимся о том, что находится внутри LCD класса (или библиотеки), а используем некоторые из открытых методов и свойств. Давайте сначала взглянем на простой способ.

LCD lcd = new LCD(
    Pins.GPIO_PIN_D11, // RS
    Pins.GPIO_PIN_D9,  // Enable
    Pins.GPIO_PIN_D7,  // D4
    Pins.GPIO_PIN_D5,  // D5
    Pins.GPIO_PIN_D3,  // D6
    Pins.GPIO_PIN_D1,  // D7
    20,                // Number of Columns
    LCD.Operational.DoubleLIne, // LCD Row Format
    4,                 // Number of Rows in LCD
    LCD.Operational.Dot5x8);    // Dot Size of LCD
 
lcd.ShowCursor = true;
lcd.Show("www.Embedded-Lab.comWelcome's you to Netduino Tutorial site.  Happy Learning! :)", 200, true);
Thread.Sleep(1000); // reading time for the viewer


Как вы можете видеть, мы создали экземпляр LCD класса, а затем установили некоторые свойства к тому, что нам нравится, и просто вызвали Show метод. Есть два Show метода, один будет отображать данный текст весь сразу, и другой Show метод  будет отображать одну букву за раз.

Теперь давайте углубимся в сложную часть. Есть несколько библиотек, но я написал свою собственную, чтобы понять, как это сделано изнутри. Давайте посмотрим на секцию конструктора:

public LCD(Cpu.Pin rs, Cpu.Pin enable,
    Cpu.Pin d4, Cpu.Pin d5, Cpu.Pin d6, Cpu.Pin d7,
    byte columns, Operational lineSize, int numberOfRows,
    Operational dotSize)
{
    RS = new OutputPort(rs, false);
    Enable = new OutputPort(enable, false);
    D4 = new OutputPort(d4, false);
    D5 = new OutputPort(d5, false);
    D6 = new OutputPort(d6, false);
    D7 = new OutputPort(d7, false);
 
    Columns = columns;
    DotSize = (byte)dotSize;
    NumberOfLines = (byte)lineSize;
    NumberOfRows = numberOfRows;
 
    Initialize();
}

В секции конструктора, в основном делается Outport, сохраняются свойства LCD и затем вызывает метод Initialize. В этом методе, мы устанавливаем визуальные свойства, инициализируем некоторые массивы, а затем подготавливаем LCD к 4 битному режиму связи.

private void Initialize()
{
    //initialize fields
    isVisible = true;
    showCursor = false;
    isBlinking = false;
 
    rowAddress = new byte[] { 0x00, 0x40, 0x14, 0x54 };
    firstHalfAddress = new byte[] { 0x10, 0x20, 0x40, 0x80 };
    secondHalfAddress = new byte[] { 0x01, 0x02, 0x04, 0x08 };
 
    currentRow = 0;
    dirtyColumns = 0;
 
    Thread.Sleep(50); // must wait for a few milliseconds
 
    // RS to high = data transfer
    // RS to low = command/instruction transfer
    RS.Write(false);
 
    // Enable provides a clock function to synchronize data transfer
    Enable.Write(false);
 
    // Set for 4 bit model
    Write(0x03, secondHalfAddress);
    Thread.Sleep(4);
    Write(0x03, secondHalfAddress);
    Thread.Sleep(4);
    Write(0x03, secondHalfAddress);
    Thread.Sleep(150);
    Write(0x02, secondHalfAddress);
 
    // Set the LCD properties
    byte operationalValue = (byte)((byte)Operational.FourBit | (byte)NumberOfLines | (byte)DotSize);
    SendCommand((byte)((byte)Command.Operational | operationalValue));
 
    UpdateDisplayOptions();
 
    ClearDisplay();
 
    byte entranceValue = (byte)Entrance.FromLeft | (byte)Entrance.ShiftDecrement;
    SendCommand((byte)((byte)Command.Entrance | entranceValue));
 
}

Теперь, давайте посмотрим на методы, которые являются критическими для отображения текста на LCD. Первый метод Show позволяет показывать данный текст буква за буквой, как вы можете видеть в цикле, структурированном для каждого символа в данном тексте.

public void Show(string text, int delay, bool newLine)
{
    if (newLine) dirtyColumns = 0;
    foreach (char textChar in text.ToCharArray())
    {
        ResetLines();
        Show(Encoding.UTF8.GetBytes(textChar.ToString()));
        dirtyColumns += 1;
        Thread.Sleep(delay);
    }
}

Второй метод Show показывает весь текст сразу, а до этого он делает некоторое форматирование, так что текст будет появляться непрерывно. Поверьте мне, показывать текст непрерывным способом является одной из самых трудных частей, решенных мной в этом LCD классе.

public void Show(string text)
{
    string[] splitedText = SplitText(text);
    Show(splitedText);
}

Наконец, метод, который пишет информацию на LCD, сделан Write методом. Первым Write методом осуществляется отправка значения записи и адреса, куда отправлять информацию. Второй Write метод в основном выводит информацию на ЖК-дисплей.

private void Write(byte[] data)
{
    foreach (byte value in data)
    {
        Write(value, firstHalfAddress); // First half
        Write(value, secondHalfAddress); // Second half
    }
}
 
private void Write(byte value, byte[] halfAddress)
{
    D4.Write((value & halfAddress[0]) > 0);
    D5.Write((value & halfAddress[1]) > 0);
    D6.Write((value & halfAddress[2]) > 0);
    D7.Write((value & halfAddress[3]) > 0);
 
    Enable.Write(true);
    Enable.Write(false);
    //Debug.Print("Wrote " + value.ToString());
}

Результат

После подключения нескольких проводов, когда вы запустите ваш код и визуализируете текст, который вы хотели, у вас на лице будет улыбка. В зависимости от метода Show который вы используете, вы получите разные результаты, один покажет букву за буквой, а другой покажет весь текст сразу. Как и в видео, при повороте потенциометра, изменяется контрастность дисплея.

Day-2_Netduino_Output_on_Character_LCD.p

Day2_Netduino_CharcterLCD_BreadBoard.jpg

Небольшое видео основанное на следующем коде:

lcd.ShowCursor = true;
lcd.Show("www.Embedded-Lab.comWelcome's you to Netduino Tutorial site.  Happy Learning! :)", 200, true);
Thread.Sleep(1000); // reading time for the viewer
 
lcd.ClearDisplay();
lcd.Show("That was cool! Let's clear the display and show all text at once", 200, true);
Thread.Sleep(1000); // reading time for the viewer
 
lcd.ClearDisplay();
lcd.ShowCursor = false;
lcd.Show("ABCDEFGHILKLMnopqrstuvwxyz0123456789                              -Thanks!");

Оригинал статьи

Прикрепленные файлы:

Теги:

Опубликована: 11.01.2013 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Raspberry Pi 2
Raspberry Pi 2
Модуль радиореле на 4 канала Мультиметр Mastech MS8268
вверх