📄 lcd.h.txt
字号:
00001 /*! \file lcd.h \brief Character LCD driver for HD44780/SED1278 displays. */
00002 //*****************************************************************************
00003 //
00004 // File Name : 'lcd.h'
00005 // Title : Character LCD driver for HD44780/SED1278 displays
00006 // (usable in mem-mapped, or I/O mode)
00007 // Author : Pascal Stang
00008 // Created : 11/22/2000
00009 // Revised : 4/30/2002
00010 // Version : 1.1
00011 // Target MCU : Atmel AVR series
00012 // Editor Tabs : 4
00013 //
00014 /// \ingroup driver_hw
00015 /// \defgroup lcd Character LCD Driver for HD44780/SED1278-based displays (lcd.c)
00016 /// \code #include "lcd.h" \endcode
00017 /// \par Overview
00018 /// This display driver provides an interface to the most common type of
00019 /// character LCD, those based on the HD44780 or SED1278 controller chip
00020 /// (about 90% of character LCDs use one of these chips).? The display driver
00021 /// can interface to the display through the CPU memory bus, or directly via
00022 /// I/O port pins.? When using the direct I/O port mode, no additional
00023 /// interface hardware is needed except for a contrast potentiometer.
00024 ///?Supported functions include initialization, clearing, scrolling, cursor
00025 /// positioning, text writing, and loading of custom characters or icons
00026 /// (up to 8).? Although these displays are simple, clever use of the custom
00027 /// characters can allow you to create animations or simple graphics.? The
00028 /// "progress bar" function that is included in this driver is an example of
00029 /// graphics using limited custom-chars.
00030 ///
00031 /// \Note The driver now supports both 8-bit and 4-bit interface modes.
00032 ///
00033 /// \Note For full text output functionality, you may wish to use the rprintf
00034 /// functions along with this driver
00035 //
00036 // This code is distributed under the GNU Public License
00037 // which can be found at http://www.gnu.org/licenses/gpl.txt
00038 //
00039 //*****************************************************************************
00040
00041 #ifndef LCD_H
00042 #define LCD_H
00043
00044 #include "global.h"
00045
00046 // include project-dependent configurations
00047 #include "lcdconf.h"
00048
00049 // if LCD_DELAY is not defined, this definition sequence
00050 // attempts to find a suitable LCD_DELAY given the F_CPU
00051 #ifndef LCD_DELAY
00052 #if F_CPU >= 16000000
00053 #define LCD_DELAY asm volatile ("nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n");
00054 #else
00055 #if F_CPU >= 12000000
00056 #define LCD_DELAY asm volatile ("nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n");
00057 #else
00058 #if F_CPU >= 8000000
00059 #define LCD_DELAY asm volatile ("nop\n nop\n nop\n nop\n nop\n nop\n nop\n");
00060 #else
00061 #if F_CPU >= 4000000
00062 #define LCD_DELAY asm volatile ("nop\n nop\n nop\n nop\n nop\n");
00063 #else
00064 #define LCD_DELAY asm volatile ("nop\n nop\n nop\n");
00065 #endif
00066 #endif
00067 #endif
00068 #endif
00069 #endif
00070
00071 // HD44780 LCD controller command set (do not modify these)
00072 // writing:
00073 #define LCD_CLR 0 // DB0: clear display
00074 #define LCD_HOME 1 // DB1: return to home position
00075 #define LCD_ENTRY_MODE 2 // DB2: set entry mode
00076 #define LCD_ENTRY_INC 1 // DB1: increment
00077 #define LCD_ENTRY_SHIFT 0 // DB2: shift
00078 #define LCD_ON_CTRL 3 // DB3: turn lcd/cursor on
00079 #define LCD_ON_DISPLAY 2 // DB2: turn display on
00080 #define LCD_ON_CURSOR 1 // DB1: turn cursor on
00081 #define LCD_ON_BLINK 0 // DB0: blinking cursor
00082 #define LCD_MOVE 4 // DB4: move cursor/display
00083 #define LCD_MOVE_DISP 3 // DB3: move display (0-> move cursor)
00084 #define LCD_MOVE_RIGHT 2 // DB2: move right (0-> left)
00085 #define LCD_FUNCTION 5 // DB5: function set
00086 #define LCD_FUNCTION_8BIT 4 // DB4: set 8BIT mode (0->4BIT mode)
00087 #define LCD_FUNCTION_2LINES 3 // DB3: two lines (0->one line)
00088 #define LCD_FUNCTION_10DOTS 2 // DB2: 5x10 font (0->5x7 font)
00089 #define LCD_CGRAM 6 // DB6: set CG RAM address
00090 #define LCD_DDRAM 7 // DB7: set DD RAM address
00091 // reading:
00092 #define LCD_BUSY 7 // DB7: LCD is busy
00093
00094 // Default LCD setup
00095 // this default setup is loaded on LCD initialization
00096 #ifdef LCD_DATA_4BIT
00097 #define LCD_FDEF_1 (0<<LCD_FUNCTION_8BIT)
00098 #else
00099 #define LCD_FDEF_1 (1<<LCD_FUNCTION_8BIT)
00100 #endif
00101 #define LCD_FDEF_2 (1<<LCD_FUNCTION_2LINES)
00102 #define LCD_FUNCTION_DEFAULT ((1<<LCD_FUNCTION) | LCD_FDEF_1 | LCD_FDEF_2)
00103 #define LCD_MODE_DEFAULT ((1<<LCD_ENTRY_MODE) | (1<<LCD_ENTRY_INC))
00104
00105 // custom LCD characters
00106 extern unsigned char __attribute__ ((progmem)) LcdCustomChar[];
00107 #define LCDCHAR_PROGRESS05 0 // 0/5 full progress block
00108 #define LCDCHAR_PROGRESS15 1 // 1/5 full progress block
00109 #define LCDCHAR_PROGRESS25 2 // 2/5 full progress block
00110 #define LCDCHAR_PROGRESS35 3 // 3/5 full progress block
00111 #define LCDCHAR_PROGRESS45 4 // 4/5 full progress block
00112 #define LCDCHAR_PROGRESS55 5 // 5/5 full progress block
00113 #define LCDCHAR_REWINDARROW 6 // rewind arrow
00114 #define LCDCHAR_STOPBLOCK 7 // stop block
00115 #define LCDCHAR_PAUSEBARS 8 // pause bars
00116 #define LCDCHAR_FORWARDARROW 9 // fast-forward arrow
00117 #define LCDCHAR_SCROLLUPARROW 10 // scroll up arrow
00118 #define LCDCHAR_SCROLLDNARROW 11 // scroll down arrow
00119 #define LCDCHAR_BLANK 12 // scroll down arrow
00120 #define LCDCHAR_ANIPLAYICON0 13 // animated play icon frame 0
00121 #define LCDCHAR_ANIPLAYICON1 14 // animated play icon frame 1
00122 #define LCDCHAR_ANIPLAYICON2 15 // animated play icon frame 2
00123 #define LCDCHAR_ANIPLAYICON3 16 // animated play icon frame 3
00124
00125 // progress bar defines
00126 #define PROGRESSPIXELS_PER_CHAR 6
00127
00128
00129 // ****** Low-level functions ******
00130 // the following functions are the only ones which deal with the CPU
00131 // memory or port pins directly. If you decide to use a fundamentally
00132 // different hardware interface to your LCD, only these functions need
00133 // to be changed, after which all the high-level functions will
00134 // work again.
00135
00136 // initializes I/O pins connected to LCD
00137 void lcdInitHW(void);
00138 // waits until LCD is not busy
00139 void lcdBusyWait(void);
00140 // writes a control command to the LCD
00141 void lcdControlWrite(u08 data);
00142 // read the control status from the LCD
00143 u08 lcdControlRead(void);
00144 // writes a data byte to the LCD screen at the current position
00145 void lcdDataWrite(u08 data);
00146 // reads the data byte on the LCD screen at the current position
00147 u08 lcdDataRead(void);
00148
00149
00150 // ****** High-levlel functions ******
00151 // these functions provide the high-level control of the LCD
00152 // such as clearing the display, setting cursor positions,
00153 // displaying text and special characters
00154
00155 // initializes the LCD display (gets it ready for use)
00156 void lcdInit(void);
00157
00158 // moves the cursor/position to Home (upper left corner)
00159 void lcdHome(void);
00160
00161 // clears the LCD display
00162 void lcdClear(void);
00163
00164 // moves the cursor/position to the row,col requested
00165 // ** this may not be accurate for all displays
00166 void lcdGotoXY(u08 row, u08 col);
00167
00168 // loads a special user-defined character into the LCD
00169 // <lcdCustomCharArray> is a pointer to a ROM array containing custom characters
00170 // <romCharNum> is the index of the character to load from lcdCustomCharArray
00171 // <lcdCharNum> is the RAM location in the LCD (legal value: 0-7)
00172 void lcdLoadCustomChar(u08* lcdCustomCharArray, u08 romCharNum, u08 lcdCharNum);
00173
00174 // prints a series of bytes/characters to the display
00175 void lcdPrintData(char* data, u08 nBytes);
00176
00177 // displays a horizontal progress bar at the current cursor location
00178 // <progress> is the value the bargraph should indicate
00179 // <maxprogress> is the value at the end of the bargraph
00180 // <length> is the number of LCD characters that the bargraph should cover
00181 void lcdProgressBar(u16 progress, u16 maxprogress, u08 length);
00182
00183 #endif
--------------------------------------------------------------------------------
Generated on Sun Oct 29 03:41:07 2006 for Procyon AVRlib by 1.4.2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -