HD44780 Display Drive V2.00 C++

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 1

Type: 

Compiler/Assembler: 

English


 

Press here to see a Demo

Press here to See Demo Sequency and Description

Proposal

 

The HD44780 chip is the display controller, perhaps the most used in the world, very common indeed, several implementations have been made ​​to various processors and microcontrollers, and has also seen implementations in different language such as Assembler, C, C ++, Basic, Pascal , VBasic etc.

 

This version 2.0 I'm releasing was done in C ++ using Atmel Studio 7.0 in order to provide migration to Arduino boards with little change in the code. And designed for Displays size with max rows =2 and max cols=40

 

Implementation

 

This drive is designed to operate in microcontrollers from Atmel AVR ATmega and the current Demo operates on AVRs Atmega8 , 64,128,162,328P and is easily converted to other ATMegas with little change on the same code to Arduinoare:.

 

This version 2.0 brings some features that do not usually see in other drives, which

 

  • Check presence of the LDC - Usually LCD drivers are initialized, assuming that it is present in Ports of microcontroller or microprocessor bus in use, and can thus cause problems, such as locking, incorrect print characters, etc. With this check can start the display and the drive is responsible for returning the state of their presence, hence enabling an error processing with eg warning through a beep, an LED flash etc.

  • Prepare and Restore for Sleep - Sleep Implemented functions(PrepareForSleep and RestoreFromSleep) is to prepare the display for entering the Sleep mode and restore from Sleep state, making life easier for the programmer because what is required to enter and exit the Sleep mode is done by this drive.

  • Whether to use checking "Busy" - Two functions (SetBusyUse and SetBusyDelay)that allows checking the Display Busy signal whether or not checked, it is set to not get the Busy to SetBusyDelay function sets the time between sending out commands to the display, thus allowing not check the Busy in some situations can cause system locking, this mode the display operates more slowly, but nothing that hinders the use in practice

  • String Functions display that acceptance CR and LF - Facilitating the use of these functions (PutC, PutS, PutSF) since it can generate a single String and write in one command into two lines.

  • Functions to save the state of RAM and CGRAM - The Functions(ScrSave,ScrRestore, PatternSave,PatternRestore) saves  contents of RAM the or CGRAM character in RAM microcontroller, and  restored when needed.

  • Large numbers Printing Functions(LCDBigInit,PutCBig,PutSBig) - Enable display numbers in double size for Displays with 2 rows

Functions

 

Check if Display is present (correctly connected) and return true if yes.

Sofware Interface to write and read (command and data)

UnInitialize Inteface put all Displays pins to hi-z .

UnInitialize Display Drive.

Initialize Display Drive with number of Rows and Columns.

Prepare Display Hardware to put microcontroler in Sleep Mode.

Restore Display Hardware from Sleep Mode.

Set (true) if interface use Busy signal to manage command and data or false to do not use.

If SetBusyUse is false, this routine set the time in milliseconds of delay between command and data.

Read Busy State from Display Interface.

Wait Display exit from Busy State if SetBusyUse is true.

Write Command to Display.

Write Data to Display.

Read Data From Display.

Clear All Display Screen.

Put Cursor Display at Column 1.

Scroll Characters on Screen to Left.

Scroll Characters on Screen to Right.

Set Cursor Visible if true.

Move Display Cursor to Left.

Move Display Cursor to Right.

Set Cursor To Blink if true.

Locate Display Cursor at coordinates Row and Column numerated 1...N,1..N

Display Character on Display at coordinates  set by Locate function.

Display String of Characters from SRAM on Display at Coordinates set by Locate Function and aloow CR and LF codes.

Display String of Characters from FLASH on Display at Coordinates set by Locate Function and allow CR and LF codes

Redefine Characters Pattern of ASCII Characters code 0 to 7

Return true if Display Present (connected correctly on AVR)

Initialize Big Numbers.

Put a Single BigNumber at screen.

Put a String BigNumber at screen.

Set Character Generator Address.

Set Text RAM Address.

Save All Display Screen.into SRAM

Restore All Display Screen from SRAM.

Save All Display Patterns into SRAM.

Restore All Display Patterns from SRAM.

Get Minor Version Value of This Drive.

Get Major Version Value of This Drive.

Get Number of Display Rows.

Get Number of Display Columns.

Get Actual position of Display Cursor Row.

  1. GetCol

Get Actual position of Display Cursor Column

      

Usage

 

To use this Drive first you need to set Ports and Pins at _HD44780_Drive_V200.h File described below.

    

 Set below defines with port where Display data be. In below example data pin are on PORTD of microcontroller.

 

       #define    _lcd_DATA_OUTPUT        PORTD
       #define    _lcd_DATA_DIR           DDRD
       #define    _lcd_DATA_INPUT         PIND

 

Set a Shift o data bits when use a 4 bits interface, if in 4 bits interface data initialize in PORTD.4 then _lcd_DATA_BIT is 4 if start at PORTD.2 then _lcd_DATA_BIT is 2

 

       #define _lcd_DATA_BIT             4

 

Set the Port where locate RS pin, below example RS is on PORTD BIT 0 or PORTD.0

 

       #define    _lcd_RS_OUTPUT         PORTD
       #define    _lcd_RS_DIR            DDRD
       #define    _lcd_RS_INPUT          PIND

       #define    _lcd_RS_BIT            0

Set the Port where locate RW pin, below example RW is on PORTD BIT 0 or PORTD.1

 

       #define    _lcd_RW_OUTPUT         PORTD
       #define    _lcd_RW_DIR            DDRD
       #define    _lcd_RW_INPUT          PIND

       #define    _lcd_RW_BIT            1

 

Set the Port where locate E pin, below example E is on PORTD BIT 0 or PORTD.2

 

       #define    _lcd_E_OUTPUT         PORTD
       #define    _lcd_E_DIR            DDRD
       #define    _lcd_E_INPUT          PIND

       #define    _lcd_E_BIT            2

Then in Main program Initialize classes like below:

Put below line if you want to use time object class

class_Time             time;

 

Put below line if you want to use Display in 4 bit interface with 2 Rows and 16 Columns.

class_HD44780_Drive    lcd(_lcd_INTERFACE::SIZE_4_BITS,2,16);

 

A Simple Hello World.

lcd.Cls();
lcd.PutSF(PSTR(“Hello World”));
for(;;);

 


Português

 

Proposta

O chip HD44780 é o controlador de Display, talvez o mais usado no mundo, muito comum realmente, várias implementações foram feitas para diversos Processadores  e Microcontroladores, e já vi também implementações em diversas linguagem como: Assembler,C,C++,Basic,Pascal,VBasic etc.

 

Esta Versão 2.0 que estou liberando foi feita em C++ usando o Atmel Studio 7.0, no intuito de proporcionar migração para placas Arduino com pequena mudança no código. E designado para Displays de no máximo 2 linhas e 40 Colunas.

 

Implementação

Este Drive foi feito para operar em microcontroladores da Atmel AVR ATMega e o Demo atual funciona nos AVRs ATMega8,64,128,162,328P e é facilmente convertido para outros ATMegas com pequena mudança no código mesmo que para Arduino.

 

Esta Versão 2.0 trás algumas funcionalidades que não vejo geralmente em outros Drives, que são:

 

  • Checar presença do LDC - Geralmente os Drivers de LCD são inicializados, assumindo que o mesmo esteja presente nas portas ou bus do microcontrolador em uso ou microprocessador, podendo desta maneira provocar problemas, tais como travamento, impressão incorreta de caracteres, etc. Com esta checagem podemos inicializar o Display e o drive encarrega-se de retornar o estado de sua presença, dai possibilitando um processamento de erro, com por exemplo, aviso através de um Beep, um piscar de LED etc.

  • Prepara e Restaurar para Sleep - Implementado funções(PrepareForSleep RestoreFromSleep) para Preparar o Display para entrada do modo Sleep e Restaurar do estado Sleep, facilitando a vida do programador pois o que é necessário para entrar e sair do modo Sleep já é feito por este Drive.

  • Usar ou não o checagem de “Busy” - Duas funções(SetBusyUse SetBusyDelay) que permite que o checagem do sinal de Busy do Display seja ou não checado, se configurado para não chegar o Busy a função SetBusyDelay define o tempo entre envios de comandos para o Display, permitindo desta maneira a não checagem do Busy que em algumas situações podem causar travas de sistema, neste modo o Display opera mais lentamente, mas nada que atrapalhe o uso na prática.

  • Funções para Display de String que aceitão CR e LF - Facilitando o uso de destas funções (PutC,PutS,PutSF) visto que se pode gerar uma única String e escrever em um só comando em duas linhas.

  • Funções para salvar o estado da RAM e CGRAM - As Funções (ScrSave,ScrRestore,PatternSave,PatternRestore) permite salvar o conteúdo da RAM ou CGRAM de caracteres na RAM do microcontrolador e restaurar quando necessário.

  • Impressão de números grandes - Funções (LCDBigInit,PutCBig,PutSBig) - Permitem mostrar números em duplo tamanho para Displays de 2 linhas.

 

Funções

 

Attachment(s):