AVR-GCC Libraries
lcd.h
Go to the documentation of this file.
1 #ifndef LCD_H
2 #define LCD_H
3 /*************************************************************************
4  Title : C include file for the HD44780U LCD library (lcd.c)
5  Author: Peter Fleury <pfleury@gmx.ch> http://tinyurl.com/peterfleury
6  File: $Id: lcd.h,v 1.14.2.4 2015/01/20 17:16:07 peter Exp $
7  Software: AVR-GCC 4.x
8  Hardware: any AVR device, memory mapped mode only for AVR with
9  memory mapped interface (AT90S8515/ATmega8515/ATmega128)
10 ***************************************************************************/
11 
45 #include <inttypes.h>
46 #include <avr/pgmspace.h>
47 
48 #if (__GNUC__ * 100 + __GNUC_MINOR__) < 405
49 #error "This library requires AVR-GCC 4.5 or later, update to newer AVR-GCC compiler !"
50 #endif
51 
52 
55 /*
56  * LCD and target specific definitions below can be defined in a separate include file with name lcd_definitions.h instead modifying this file
57  * by adding -D_LCD_DEFINITIONS_FILE to the CDEFS section in the Makefile
58  * All definitions added to the file lcd_definitions.h will override the default definitions from lcd.h
59  */
60 #ifdef _LCD_DEFINITIONS_FILE
61 #include "lcd_definitions.h"
62 #endif
63 
64 
69 #ifndef LCD_CONTROLLER_KS0073
70 #define LCD_CONTROLLER_KS0073 0
71 #endif
72 
82 #ifndef LCD_LINES
83 #define LCD_LINES 2
84 #endif
85 #ifndef LCD_DISP_LENGTH
86 #define LCD_DISP_LENGTH 16
87 #endif
88 #ifndef LCD_LINE_LENGTH
89 #define LCD_LINE_LENGTH 0x40
90 #endif
91 #ifndef LCD_START_LINE1
92 #define LCD_START_LINE1 0x00
93 #endif
94 #ifndef LCD_START_LINE2
95 #define LCD_START_LINE2 0x40
96 #endif
97 #ifndef LCD_START_LINE3
98 #define LCD_START_LINE3 0x14
99 #endif
100 #ifndef LCD_START_LINE4
101 #define LCD_START_LINE4 0x54
102 #endif
103 #ifndef LCD_WRAP_LINES
104 #define LCD_WRAP_LINES 0
105 #endif
106 
107 
126 #define LCD_IO_MODE 1
128 #if LCD_IO_MODE
129 
130 #ifndef LCD_PORT
131 #define LCD_PORT PORTA
132 #endif
133 #ifndef LCD_DATA0_PORT
134 #define LCD_DATA0_PORT LCD_PORT
135 #endif
136 #ifndef LCD_DATA1_PORT
137 #define LCD_DATA1_PORT LCD_PORT
138 #endif
139 #ifndef LCD_DATA2_PORT
140 #define LCD_DATA2_PORT LCD_PORT
141 #endif
142 #ifndef LCD_DATA3_PORT
143 #define LCD_DATA3_PORT LCD_PORT
144 #endif
145 #ifndef LCD_DATA0_PIN
146 #define LCD_DATA0_PIN 0
147 #endif
148 #ifndef LCD_DATA1_PIN
149 #define LCD_DATA1_PIN 1
150 #endif
151 #ifndef LCD_DATA2_PIN
152 #define LCD_DATA2_PIN 2
153 #endif
154 #ifndef LCD_DATA3_PIN
155 #define LCD_DATA3_PIN 3
156 #endif
157 #ifndef LCD_RS_PORT
158 #define LCD_RS_PORT LCD_PORT
159 #endif
160 #ifndef LCD_RS_PIN
161 #define LCD_RS_PIN 4
162 #endif
163 #ifndef LCD_RW_PORT
164 #define LCD_RW_PORT LCD_PORT
165 #endif
166 #ifndef LCD_RW_PIN
167 #define LCD_RW_PIN 5
168 #endif
169 #ifndef LCD_E_PORT
170 #define LCD_E_PORT LCD_PORT
171 #endif
172 #ifndef LCD_E_PIN
173 #define LCD_E_PIN 6
174 #endif
175 
176 #elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || defined(__AVR_ATmega64__) || \
177  defined(__AVR_ATmega8515__)|| defined(__AVR_ATmega103__) || defined(__AVR_ATmega128__) || \
178  defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__)
179 /*
180  * memory mapped mode is only supported when the device has an external data memory interface
181  */
182 #define LCD_IO_DATA 0xC000 /* A15=E=1, A14=RS=1 */
183 #define LCD_IO_FUNCTION 0x8000 /* A15=E=1, A14=RS=0 */
184 #define LCD_IO_READ 0x0100 /* A8 =R/W=1 (R/W: 1=Read, 0=Write */
185 
186 #else
187 #error "external data memory interface not available for this device, use 4-bit IO port mode"
188 
189 #endif
190 
191 
202 #ifndef LCD_DELAY_BOOTUP
203 #define LCD_DELAY_BOOTUP 16000
204 #endif
205 #ifndef LCD_DELAY_INIT
206 #define LCD_DELAY_INIT 5000
207 #endif
208 #ifndef LCD_DELAY_INIT_REP
209 #define LCD_DELAY_INIT_REP 64
210 #endif
211 #ifndef LCD_DELAY_INIT_4BIT
212 #define LCD_DELAY_INIT_4BIT 64
213 #endif
214 #ifndef LCD_DELAY_BUSY_FLAG
215 #define LCD_DELAY_BUSY_FLAG 4
216 #endif
217 #ifndef LCD_DELAY_ENABLE_PULSE
218 #define LCD_DELAY_ENABLE_PULSE 1
219 #endif
220 
221 
228 /* instruction register bit positions, see HD44780U data sheet */
229 #define LCD_CLR 0 /* DB0: clear display */
230 #define LCD_HOME 1 /* DB1: return to home position */
231 #define LCD_ENTRY_MODE 2 /* DB2: set entry mode */
232 #define LCD_ENTRY_INC 1 /* DB1: 1=increment, 0=decrement */
233 #define LCD_ENTRY_SHIFT 0 /* DB2: 1=display shift on */
234 #define LCD_ON 3 /* DB3: turn lcd/cursor on */
235 #define LCD_ON_DISPLAY 2 /* DB2: turn display on */
236 #define LCD_ON_CURSOR 1 /* DB1: turn cursor on */
237 #define LCD_ON_BLINK 0 /* DB0: blinking cursor ? */
238 #define LCD_MOVE 4 /* DB4: move cursor/display */
239 #define LCD_MOVE_DISP 3 /* DB3: move display (0-> cursor) ? */
240 #define LCD_MOVE_RIGHT 2 /* DB2: move right (0-> left) ? */
241 #define LCD_FUNCTION 5 /* DB5: function set */
242 #define LCD_FUNCTION_8BIT 4 /* DB4: set 8BIT mode (0->4BIT mode) */
243 #define LCD_FUNCTION_2LINES 3 /* DB3: two lines (0->one line) */
244 #define LCD_FUNCTION_10DOTS 2 /* DB2: 5x10 font (0->5x7 font) */
245 #define LCD_CGRAM 6 /* DB6: set CG RAM address */
246 #define LCD_DDRAM 7 /* DB7: set DD RAM address */
247 #define LCD_BUSY 7 /* DB7: LCD is busy */
248 
249 /* set entry mode: display shift on/off, dec/inc cursor move direction */
250 #define LCD_ENTRY_DEC 0x04 /* display shift off, dec cursor move dir */
251 #define LCD_ENTRY_DEC_SHIFT 0x05 /* display shift on, dec cursor move dir */
252 #define LCD_ENTRY_INC_ 0x06 /* display shift off, inc cursor move dir */
253 #define LCD_ENTRY_INC_SHIFT 0x07 /* display shift on, inc cursor move dir */
254 
255 /* display on/off, cursor on/off, blinking char at cursor position */
256 #define LCD_DISP_OFF 0x08 /* display off */
257 #define LCD_DISP_ON 0x0C /* display on, cursor off */
258 #define LCD_DISP_ON_BLINK 0x0D /* display on, cursor off, blink char */
259 #define LCD_DISP_ON_CURSOR 0x0E /* display on, cursor on */
260 #define LCD_DISP_ON_CURSOR_BLINK 0x0F /* display on, cursor on, blink char */
261 
262 /* move cursor/shift display */
263 #define LCD_MOVE_CURSOR_LEFT 0x10 /* move cursor left (decrement) */
264 #define LCD_MOVE_CURSOR_RIGHT 0x14 /* move cursor right (increment) */
265 #define LCD_MOVE_DISP_LEFT 0x18 /* shift display left */
266 #define LCD_MOVE_DISP_RIGHT 0x1C /* shift display right */
267 
268 /* function set: set interface data length and number of display lines */
269 #define LCD_FUNCTION_4BIT_1LINE 0x20 /* 4-bit interface, single line, 5x7 dots */
270 #define LCD_FUNCTION_4BIT_2LINES 0x28 /* 4-bit interface, dual line, 5x7 dots */
271 #define LCD_FUNCTION_8BIT_1LINE 0x30 /* 8-bit interface, single line, 5x7 dots */
272 #define LCD_FUNCTION_8BIT_2LINES 0x38 /* 8-bit interface, dual line, 5x7 dots */
273 
274 
275 #define LCD_MODE_DEFAULT ((1<<LCD_ENTRY_MODE) | (1<<LCD_ENTRY_INC) )
276 
277 
278 
292 extern void lcd_init(uint8_t dispAttr);
293 
294 
299 extern void lcd_clrscr(void);
300 
301 
306 extern void lcd_home(void);
307 
308 
316 extern void lcd_gotoxy(uint8_t x, uint8_t y);
317 
318 
324 extern void lcd_putc(char c);
325 
326 
332 extern void lcd_puts(const char *s);
333 
334 
341 extern void lcd_puts_p(const char *progmem_s);
342 
343 
349 extern void lcd_command(uint8_t cmd);
350 
351 
359 extern void lcd_data(uint8_t data);
360 
361 
365 #define lcd_puts_P(__s) lcd_puts_p(PSTR(__s))
366 
369 #endif //LCD_H
void lcd_puts_p(const char *progmem_s)
Display string from program memory without auto linefeed.
Definition: lcd.c:484
void lcd_gotoxy(uint8_t x, uint8_t y)
Set cursor to specified position.
Definition: lcd.c:364
void lcd_clrscr(void)
Clear display and set cursor to home position.
Definition: lcd.c:400
void lcd_home(void)
Set cursor to home position.
Definition: lcd.c:409
void lcd_command(uint8_t cmd)
Send LCD controller instruction command.
Definition: lcd.c:338
void lcd_data(uint8_t data)
Send data byte to LCD controller.
Definition: lcd.c:350
void lcd_puts(const char *s)
Display string without auto linefeed.
Definition: lcd.c:467
void lcd_putc(char c)
Display character at current cursor position.
Definition: lcd.c:420
void lcd_init(uint8_t dispAttr)
Initialize display and select type of cursor.
Definition: lcd.c:504