📄 lcd.h
字号:
#ifndef LCD_H#define LCD_H/************************************************************************* Title : C include file for the HD44780U LCD library (lcd.c) Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury File: $Id: lcd.h,v 1.1.1.1 2007/01/14 11:37:56 harbaum Exp $ Software: AVR-GCC 3.3 Hardware: any AVR device, memory mapped mode only for AT90S4414/8515/Mega***************************************************************************//** @defgroup pfleury_lcd LCD library @code #include <lcd.h> @endcode @brief Basic routines for interfacing a HD44780U-based text LCD display Originally based on Volker Oth's LCD library, changed lcd_init(), added additional constants for lcd_command(), added 4-bit I/O mode, improved and optimized code. Memory mapped mode compatible with Kanda STK200, but supports also generation of R/W signal through A8 address line. @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury @see The chapter <a href="http://homepage.sunrise.ch/mysunrise/peterfleury/avr-lcd44780.html" target="_blank">Interfacing a HD44780 Based LCD to an AVR</a> on my home page.*//*@{*/#if (__GNUC__ * 100 + __GNUC_MINOR__) < 303#error "This library requires AVR-GCC 3.3 or later, update to newer AVR-GCC compiler !"#endif#include <inttypes.h>#include <avr/pgmspace.h>/** * @name Definitions for MCU Clock Frequency * Adapt the MCU clock frequency in Hz to your target. */#define XTAL 12000000 /**< clock frequency in Hz, used to calculate delay timer *//** * @name Definitions for 4-bit IO mode * Change LCD_PORT if you want to use a different port for the LCD pins. * * The four LCD data lines and the three control lines RS, RW, E can be on the * same port or on different ports. * Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on * different ports. * * Normally the four data lines should be mapped to bit 0..3 on one port, but it * is possible to connect these data lines in different order or even on different * ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions. * */#define LCD_DATA_PORT PORTD /**< port for the LCD lines */#define LCD_RS_PORT PORTD /**< port for RS line */#define LCD_RS_PIN 3 /**< pin for RS line */#define LCD_RW_PORT PORTC /**< port for RW line */#define LCD_RW_PIN 2 /**< pin for RW line */#define LCD_E_PORT PORTC /**< port for Enable line */#define LCD_E0_PIN 3 /**< pin for Enable line 0 */#define LCD_E1_PIN 4 /**< pin for Enable line 1 */#define LCD_CTRL_0 (1<<0)#define LCD_CTRL_1 (1<<1)/** * @name Definitions for LCD command instructions * The constants define the various LCD controller instructions which can be passed to the * function lcd_command(), see HD44780 data sheet for a complete description. *//* instruction register bit positions, see HD44780U data sheet */#define LCD_CLR 0 /* DB0: clear display */#define LCD_HOME 1 /* DB1: return to home position */#define LCD_ENTRY_MODE 2 /* DB2: set entry mode */#define LCD_ENTRY_INC 1 /* DB1: 1=increment, 0=decrement */#define LCD_ENTRY_SHIFT 0 /* DB2: 1=display shift on */#define LCD_ON 3 /* DB3: turn lcd/cursor on */#define LCD_ON_DISPLAY 2 /* DB2: turn display on */#define LCD_ON_CURSOR 1 /* DB1: turn cursor on */#define LCD_ON_BLINK 0 /* DB0: blinking cursor ? */#define LCD_MOVE 4 /* DB4: move cursor/display */#define LCD_MOVE_DISP 3 /* DB3: move display (0-> cursor) ? */#define LCD_MOVE_RIGHT 2 /* DB2: move right (0-> left) ? */#define LCD_FUNCTION 5 /* DB5: function set */#define LCD_FUNCTION_8BIT 4 /* DB4: set 8BIT mode (0->4BIT mode) */#define LCD_FUNCTION_2LINES 3 /* DB3: two lines (0->one line) */#define LCD_FUNCTION_10DOTS 2 /* DB2: 5x10 font (0->5x7 font) */#define LCD_CGRAM 6 /* DB6: set CG RAM address */#define LCD_DDRAM 7 /* DB7: set DD RAM address */#define LCD_BUSY 7 /* DB7: LCD is busy *//* set entry mode: display shift on/off, dec/inc cursor move direction */#define LCD_ENTRY_DEC 0x04 /* display shift off, dec cursor move dir */#define LCD_ENTRY_DEC_SHIFT 0x05 /* display shift on, dec cursor move dir */#define LCD_ENTRY_INC_ 0x06 /* display shift off, inc cursor move dir */#define LCD_ENTRY_INC_SHIFT 0x07 /* display shift on, inc cursor move dir *//* display on/off, cursor on/off, blinking char at cursor position */#define LCD_DISP_OFF 0x08 /* display off */#define LCD_DISP_ON 0x0C /* display on, cursor off */#define LCD_DISP_ON_BLINK 0x0D /* display on, cursor off, blink char */#define LCD_DISP_ON_CURSOR 0x0E /* display on, cursor on */#define LCD_DISP_ON_CURSOR_BLINK 0x0F /* display on, cursor on, blink char *//* move cursor/shift display */#define LCD_MOVE_CURSOR_LEFT 0x10 /* move cursor left (decrement) */#define LCD_MOVE_CURSOR_RIGHT 0x14 /* move cursor right (increment) */#define LCD_MOVE_DISP_LEFT 0x18 /* shift display left */#define LCD_MOVE_DISP_RIGHT 0x1C /* shift display right *//* function set: set interface data length and number of display lines */#define LCD_FUNCTION_4BIT_1LINE 0x20 /* 4-bit interface, single line, 5x7 dots */#define LCD_FUNCTION_4BIT_2LINES 0x28 /* 4-bit interface, dual line, 5x7 dots */#define LCD_FUNCTION_8BIT_1LINE 0x30 /* 8-bit interface, single line, 5x7 dots */#define LCD_FUNCTION_8BIT_2LINES 0x38 /* 8-bit interface, dual line, 5x7 dots */#define LCD_MODE_DEFAULT ((1<<LCD_ENTRY_MODE) | (1<<LCD_ENTRY_INC) )/** * @name Functions *//** @brief Initialize display and select type of cursor @param dispAttr \b LCD_DISP_OFF display off\n \b LCD_DISP_ON display on, cursor off\n \b LCD_DISP_ON_CURSOR display on, cursor on\n \b LCD_DISP_ON_CURSOR_BLINK display on, cursor on flashing @return 0 on failure, 1 on success*/extern uint8_t lcd_init(uint8_t ctrl);/** @brief Clear display and set cursor to home position @param void @return none*/extern void lcd_clrscr(uint8_t ctrl);/** @brief Display string without auto linefeed @param s string to be displayed @return none*/extern void lcd_puts(uint8_t ctrl, const char *s);/** @brief Send LCD controller instruction command @param cmd instruction to send to LCD controller, see HD44780 data sheet @return none*/extern void lcd_command(uint8_t ctrl, uint8_t cmd);/** @brief Send data byte to LCD controller Similar to lcd_putc(), but without interpreting LF @param data byte to send to LCD controller, see HD44780 data sheet @return none*/extern void lcd_data(uint8_t ctrl, uint8_t data);/*@}*/#endif //LCD_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -