• Главная • Назад •








Counter

 


Описание русское.    Автор Гена Чернов.

HD44780 - один из самых распространенных драйверов символьных индикаторов. На этом драйвере строятся индикаторы от одной до четырех строк. От 8 до 40 символов.

    2х16 самый распространенный индикатор.

Схема подключения.

    Пример программы на Си - несколько функции которые позволят управлять и выводить информацию на индикатор.

    InitLCD () - инициализация дисплея
   
ClearLCD () очистка дисплея
   
String (строка символов) - вывод строки с позиции курсора
    CursorLCD (Y,X) установка курсора
   
SendLCDdata ( байт данных, (0-команда/1-данные)) вывод символа в позиции курсора

 

/*

 * Обслуживание LCD

 */

#include <delays.h>

/* описание портов ввода вывод – это сделать лучше в основной программе под реальное подключение индикатора (эти параметры приведены для демоплаты).*/

 

#define    LCD    PORTD                     // определение порта

#define    LCD_TRIS TRISD                   //

#define    E      PORTAbits.RA1                    // определение E

#define    RW     PORTAbits.RA2                    // определение RW

#define    RS     PORTAbits.RA3                    // определение RS

 

void SendLCDdata(unsigned char data, unsigned char rs) // Данные, команда/данные

{

       RW = 0;                                // режим записи в индикатор

       LCD = data >> 4;                       // загрузка полубайта в порт

       RS = rs;                               // 0-команда/1-данные

       E = 1;                                 // Импуль записи

       E = 0;

       Delay10TCYx( 2 );                       // задержка 20 мкС

       LCD = data & 0x0F;                     // send right nibble

       RS = rs;                               // set RS

       E = 1;                                 // pulse E

       E = 0;

       Delay10TCYx( 2 );                      // задержка 20 мС

       // проверка на занятости индикатора

       RW = 1;                                // режим чтения

       RS = 1;                                // чтение данных

       LCD_TRIS = 0x0F;                       // настройка R0--R4 на ввод

       RS = 0;                                // чтение команд

       E = 1;                                 // импульс чтения

       E = 0;  

       data = LCD;                            // загрузить данные

       while ( ( data & 8 ) == 8 ) // проверяем индикатор занят

             {

                    E = 1;                    // читатать младший полубайт

                    E = 0;                    //

                    E = 1;                    // читатать старший полубайт

                    E = 0;                    //

                    data = LCD;               //  загрузить данные

             }

       LCD_TRIS = 0;                          // настроить порт на вывод

}

 

void InitLCD(void) // функция начальной инициализации дисплея

{

             char a;

             Delay1KTCYx(20);          // задержка на подачу питания 20 ms

       for ( a = 0; a < 4; a++ )

       {

             LCD = 0b00000011;         // код инициализации 0х03 (4 битного интерфейса) 3 раза

             E = 1;                    // загрузить

             E = 0;                    //

             Delay1KTCYx( 6 );         // задержка 6 ms

       }

             LCD = 0b00000010;         // включить режим 4битный интерфейс.

             E = 1;                    // загрузить

             E = 0;

             Delay1KTCYx( 6 );         // задержка 6 ms

 

       SendLCDdata( 0b00101000, 0 );    // Настройка функций

       SendLCDdata( 0b00001100, 0 );    // Включить дисплей

       SendLCDdata( 0b00000001, 0 );    // Дисплей очистить

       SendLCDdata( 0b00000110, 0 );    // Entry Mode

       SendLCDdata( 0b10000000, 0 );    // DDRAM addresss 0000

       SendLCDdata( 0b00000010, 0 );    // return home

      

}

 // очистка ииндикатора

void ClearLCD(void)

       {

             SendLCDdata( 0x01, 0 );   // send 0x01

       }

 // вывод

void String(char *str)

       {

             int ptr = 0;

       //     SendLCDdata(position, 0); // команда установить курсор в позицию

             while (str[ptr] != 0)     SendLCDdata(str[ptr++], 1);      // цикл передачи символов пока не достигнут ноль (конец строки)   

       }

 

// вывод текста в положение курсора

// корректно работает для одно и двух строчных дисплеев до 16 символов

// значение вписывается в формате S,P  где S- строка 0, верхняя 1 - нижняя

// Р - столбец 0-16

void CursorLCD(unsigned char stroka,unsigned char stolbec) // положение курсора 0хстрока/столбец

       {

             if (stroka == 0) stroka = 0x80 | stolbec;

                    else stroka = 0xC0 | stolbec;   

             SendLCDdata(stroka, 0);         

       }

 

Описание русское.


Для получения дополнительной информации используйте:

MAGETEX
Ukraine
Телефон: +380-50-575-98-63
Факс: +380-50-575-98-63
E-mail: invent-systems@ya.ru


 

Главная | Назад
 
Отправить сообщение для: gchernov@mail.ru с вопросами и замечаниями об этом веб-узле.
© 2007 MAGETEX
Дата изменения: 23.08.2013