Wyświetlacz alfanumeryczny
ze sterownikiem HD44780
Dariusz Chaberski
§ HD44780U Block Diagram
2
§ 4-Bit Transfer Example
3
§ Instructions
4
5
§ Drive Voltage Supply Example
6
§ Frame Frequency (1/8 duty cycle)
7
§ Frame Frequency (1/11 duty cycle)
8
§ Frame Frequency (1/16 duty cycle)
9
§ Liquid Crystal Display and HD44780 Connections
Example of a 5 x 8 dot, 8-character x 1-line display (1/4 bias, 1/8 duty cycle)
10
Example of a 5 x 10 dot, 8-character x 1-line display (1/4 bias, 1/11 duty cycle)
11
Example of a 5 x 8 dot, 8-character x 2-line display (1/5 bias, 1/16 duty cycle)
12
5 x 8 dot, 16-character x 1-line display (1/5 bias, 1/16 duty cycle)
13
§ SPLC780D Application Circuit
14
§ Interface Timing with External Driver
15
§ C (AVR)
PORTC5-PORTC2: DB7-DB4, PORTD6: E, PORTD5 R/W, PORTD4 RS
#include <avr/io.h>
#include <util/delay.h>
void lcd e/rw/rs(unsigned char tmp)
{
if(tmp!=0)
PORTD=PORTD|(1<<6/5/4);
else
PORTD=PORTD&~(1<<6/5/4);
}
.
.
.
void lcd data(unsigned char data)
{
PORTC=(PORTC&0xc3)|((data&0x0f)<<2);
}
16
void lcd send cmd(unsigned char cmd)
{
lcd rs(0);
lcd rw(0);
lcd e(0);
lcd e(1);
lcd data(cmd>>4);
lcd e(0);
lcd e(1);
lcd data(cmd&0x0f);
lcd e(0);
}
17
§ inicjalizacja
lcd rw(0);
lcd rs(0);
lcd e(0);
lcd data(0);
DDRD=DDRD|0x70; DDRC=DDRC|0x3c;
lcd rw(0);
lcd e(0);
lcd e(1);
lcd data(2);
lcd e(0);
delay us(38);
lcd send cmd(0x28);
delay us(38);
lcd send cmd(0x0f);
delay us(38);
lcd send cmd(0x06);
delay us(38);
lcd send cmd(0x01);
delay ms(1.52);
18
§ wyświetlanie napisów
char znaki[]={"Mikroprocesory"};
unsigned char i=0;
while(znaki[i]!=0)
{
lcd send data(znaki[i]);
i++;
}
19
§ ASM(8051)
RS - P2.3, D4-D7 - P2.4 - P2.7, E - P3.2,
DINS:
MOV TMP1,A
ANL A,#0F0H; CZTERY BARDZIEJ ZNACZĄCE BITY ROZKAZU
MOV P2,A
MOV DPP,A; WYSYŁAMY DO WYŚWIETLACZA
SETB P3.2 ; USTAWIAMY E;
CLR P3.2 ; ZERUJEMY E - STROBE
MOV A,TMP1
SWAP A
ANL A,#0F0H; CZTERY MNIEJ ZNACZĄCE BITY ROZKAZU
MOV P2,A
MOV DPP,A
SETB P3.2; E
CLR P3.2; E
RET
20
§ wysyłanie danej
RS - P2.3, D4-D7 - P2.4 - P2.7, E - P3.2,
DCHAR:
MOV TMP1,A
ANL A,#0F0H; CZTERY BARDZIEJ ZNACZĄCE BITY ZNAKU
SETB ACC.3 ; RS = 1 - ZNAK
MOV P2,A
MOV DPP,A ; WYSYŁAMY DO WYŚWIETLACZA
SETB P3.2 ; USTAWIAMY E- STROBE
CLR P3.2 ; ZERUJEMY E - STROBE
MOV A,TMP1
SWAP A
ANL A,#0F0H
SETB ACC.3 ; RS
MOV P2,A
MOV DPP,A
SETB P3.2 ; E
CLR P3.2 ; E
RET
21
§ inicjalizacja
MOV A,#28H ; USTAWIAMY WYŚWIETLACZ
LCALL DINS ; INSTRUKCJA 6
MOV A,#010H ; POTRZEBUJEMY OPÓNIENIA 40 MIKROSEKUND,
DDEL1:
DEC A ; CZYLI OKOŁO 37 CYKLI, DLA PEWNOŚCI WYKONUJEMY
JNZ DDEL1 ; ICH (1+2)*15=45
MOV A,#6H
LCALL DINS ; INSTRUKCJA 3
MOV A,#010H ; POTRZEBUJEMY OPÓNIENIA 40 MIKROSEKUND,
DDEL2:
DEC A ; CZYLI OKOŁO 37 CYKLI, DLA PEWNOŚCI WYKONUJEMY
JNZ DDEL2 ; ICH (1+2)*15=45
MOV A,#1
LCALL DINS ; INSTRUKCJA 1
22