ultimo aggiornamento 29 aprile 2011

 

 Originariamente il comando del display che utilizza il controller tipo HD44780 era di tipo parallelo a 8 bit, ma nell'esempio proposto viene utilizzato quello a 4 bit.
Questo č possibile in quanto il controller supporta il trasferimento parallelo sia di 8 bit (quindi l'intero comando), che di 4 bit.
Esempio: se č stata selezionata la modalitā di trasferimento ad otto bit, il comando 10000001 verrā inviato per intero, quindi DB7 sarā pari a 1, DB6 uguale a 0, DB0 uguale a 1 ecc.
Se č selezionata la modalitā di trasferimento a 4 bit, saranno utilizzati solo i pin da DB7 a DB4, verranno quindi effettuati due trasferimenti, prima verranno inviati i primi quattro bit del dato (1000), poi gli ultimi (0001).

PICtrainer_lcd.JPG

homotix

PCBA

OurPCB

 

Si tratta di un modulo di visualizzazione alfanumerica a cristalli liquidi, in grado di rappresentare 2 linee di 16 caratteri ognuna prodotto dalla WINTECK.
Inserendo i codici necessari, č possibile creare diversi effetti di visualizzazione come lampeggio, scroll, attivazione di un cursore, ecc.

Č possibile anche la creazione di caratteri differenti, definiti dall'utente.
Da un lato, le 8 linee dei dati D0-D7 sono connesse con le 8 linee della porta B (RB0-RB7).
Tale porta, a volte, funziona come uscita del PIC e come entrata verso il modulo. Attraverso essa vengono inseriti i diversi codici di controllo per la realizzazione di differenti effetti di visualizzazione e anche i codici ASCII dei caratteri da visualizzare. Altre volte, la porta B deve funzionare come entrata verso il PIC, dato che suo tramite il modulo LCD mostra i codici che indicano il suo stato interno, il contenuto del buffer di memoria interna, ecc.
Dall'altro lato, il modulo č connesso alle linee RAO, RA1 e RA2 della porta A del PIC. Queste linee funzionano come uscita e sono utilizzate per inviare al modulo i seguenti segnali di controllo

RS=0 Selezione del registro delle istruzioni
RS=1 Selezione del registro dei dati
R/W=0 Ciclo di scrittura sul modulo LCD
R/W=1 Ciclo di lettura del modulo LCD
E=0 Modulo LCD disattivato
E=1 Modulo LCD attivato

Bisogna sottolineare che quest'ultimo segnale E č connesso a RA2 mediante il jumper J6. Se tale jumper č chiuso, RA2 controllerā l'attivazione o meno del modulo LCD. AI contrario, se č aperto, il segnale E resta connesso a terra (livello "0") attraverso R16. In questo modo, il modulo č sempre sconnesso e le linee sia della porta A (RAO-RA2) che della B (RB0-RB7) possono essere usate per altre periferiche, siano esse quelle disponibili nel pPIC Trainer, oppure qualsiasi altra connessa al connettere di espansione PIC-BUS.
Per concludere, si sottolinea come il modulo LCD sia una periferica di visualizzazione molto usata nelle applicazioni reali. Si tratta di una forma di visualizzazione alfanumerica, ma anche grafica, comoda, piacevole e versatile.


 


Scarica Sorgente in mikroBASIC


Scarica file HEX


Scarica progetto in Real PIC

 

program lcd

' Declarations section

' Lcd module connections

dim LCD_RS as sbit at RA0_bit
     LCD_EN as sbit at RA2_bit
     LCD_D4 as sbit at RB4_bit
     LCD_D5 as sbit at RB5_bit
     LCD_D6 as sbit at RB6_bit
     LCD_D7 as sbit at RB7_bit

     LCD_RS_Direction as sbit at TRISA0_bit
     LCD_EN_Direction as sbit at TRISA2_bit
     LCD_D4_Direction as sbit at TRISB4_bit
     LCD_D5_Direction as sbit at TRISB5_bit
     LCD_D6_Direction as sbit at TRISB6_bit
     LCD_D7_Direction as sbit at TRISB7_bit
' End Lcd module connections

dim  txt1 as char[16]
       txt2 as char[12]
       txt3 as char[7]
       txt4 as char[16]
i as byte ' Loop variable

sub procedure Move_Delay() ' Function used for text moving
Delay_ms(500) ' You can change the moving speed here
end sub

main:

CMCON = 7
TRISA = %00000000 ' set direction to be output
TRISB = %11110000 ' set direction to be output

txt1 = "www-adrirobot.it"
txt2 = "uPIC TRAINER"
txt3 = "ESEMPIO"
txt4 = "Comando Lcd 4bit"

Lcd_Init() ' Initialize Lcd
Lcd_Cmd(_LCD_CLEAR) ' Clear display
Lcd_Cmd(_LCD_CURSOR_OFF) ' Cursor off
Lcd_Out(1,5,txt3) ' Write text in first row
Lcd_Out(2,1,txt4) ' Write text in second row
Delay_ms(3000)
Lcd_Cmd(_LCD_CLEAR) ' Clear display

Lcd_Out(1,1,txt1) ' Write text in first row
Lcd_Out(2,3,txt2) ' Write text in second row
Delay_ms(500)

' Moving text
for i=0 to 3 ' Move text to the right 4 times
    Lcd_Cmd(_LCD_SHIFT_RIGHT)
    Move_Delay()
next i

while TRUE ' Endless loop
for i=0 to 7 ' Move text to the left 8 times
    Lcd_Cmd(_LCD_SHIFT_LEFT)
    Move_Delay()
next i

for i=0 to 7 ' Move text to the right 8 times
    Lcd_Cmd(_LCD_SHIFT_RIGHT)
    Move_Delay()
next i
wend
end.

Elenco revisioni:
29/04/2011 Emissione preliminare
Private Policy Cookie Policy Termini e Condizioni