1 | //lcd.h
|
2 | //Definitionen fuer HD44780
|
3 |
|
4 | //Pin-Belegungen
|
5 | #define LCD_CONTROL_DDR DDRB
|
6 | #define LCD_CONTROL_PORT PORTB
|
7 | #define LCD_DATA_DDR DDRA
|
8 | #define LCD_DATA_PORT PORTA
|
9 | #define LCD_REGISTER_SELECT PB2 //RS
|
10 | #define LCD_READ_WRITE PB1
|
11 | #define LCD_ENABLE PB0 //E
|
12 | #define LCD_FIRST_DATA_PIN PA4 // Datenleitungen
|
13 |
|
14 | //Initialisierung
|
15 | #define LCD_INTERNAL_RESET_TIME_MS 15
|
16 | #define LCD_INIT_TIME_1_MS 5 //mindestens 4.1ms
|
17 | #define LCD_INIT_TIME_2_MS 1
|
18 | #define LCD_INIT_TIME_3_MS 1
|
19 | #define LCD_4_BIT_TIME_MS 5
|
20 | #define LCD_CLEAR_DISPLAY_MS 2
|
21 | #define LCD_CURSOR_HOME_MS 2
|
22 |
|
23 | #define LCD_COMMAND_TIME_US 42
|
24 | #define LCD_WRITEDATA_US 46
|
25 | #define LCD_8_BIT 0x30
|
26 | #define LCD_4_BIT 0x20
|
27 | #define LCD_ENABLE_TIME_MS 1 //mindestens 450ns
|
28 |
|
29 | //Funktion setzen Interfacelaenge (4/8 Bit), Zeilenzahl und Zeichensatz Auswahl
|
30 | #define LCD_SET_FUNCTION 0x20
|
31 | #define LCD_FUNCTION_4BIT 0x00
|
32 | #define LCD_FUNCTION_8BIT 0x10
|
33 | #define LCD_FUNCTION_1LINE 0x00
|
34 | #define LCD_FUNCTION_2LINE 0x08
|
35 | #define LCD_FUNCTION_5X7 0x00
|
36 | #define LCD_FUNCTION_5X10 0x04
|
37 |
|
38 |
|
39 | //Cursor und Display Shift: Cursor bewegen und Display Shift ohne Änderung des DD-Ram
|
40 | #define LCD_SET_DISPLAY 0x08
|
41 | #define LCD_DISPLAY_OFF 0x00
|
42 | #define LCD_DISPLAY_ON 0x04
|
43 | #define LCD_CURSOR_OFF 0x00
|
44 | #define LCD_CURSOR_ON 0x02
|
45 | #define LCD_BLINKING_OFF 0x00
|
46 | #define LCD_BLINKING_ON 0x01
|
47 |
|
48 | //Entry Mode Set - Cursor Bewegungsrichtung und Display Shift AN / AUS
|
49 | #define LCD_SET_ENTRY 0x04
|
50 | #define LCD_ENTRY_DECREASE 0x00
|
51 | #define LCD_ENTRY_INCREASE 0x02
|
52 | #define LCD_ENTRY_NOSHIFT 0x00
|
53 | #define LCD_ENTRY_SHIFT 0x01
|
54 |
|
55 |
|
56 | // Zeilendefinitionen des verwendeten LCD
|
57 | // Die Einträge hier sollten für ein LCD mit einer Zeilenlänge von 16 Zeichen passen
|
58 | // Bei anderen Zeilenlängen müssen diese Einträge angepasst werden
|
59 |
|
60 | #define LCD_SET_DDADR 0x80
|
61 | #define LCD_DDADR_LINE1 0x00
|
62 | #define LCD_DDADR_LINE2 0x40
|
63 | #define LCD_DDADR_LINE3 0x10
|
64 | #define LCD_DDADR_LINE4 0x50
|
65 |
|
66 | #define LCD_CLEAR_DISPLAY 0x01
|