#ifndef LCD_H #define LCD_H #ifndef PIN #define PIN(n,x,y) static volatile bit n @ (unsigned)&x*8+y #endif // Set exactly one of these screen types to TRUE so that code is generated properly. // If no type is enabled, you will get errors! // // Format Status Notes All part numbers are Hantronix (www.hantronix.com) // =============== ======= ===================== ==================================================>> #define LCD_MODE_1x8 (FALSE) // HDM08111H-1 #define LCD_MODE_1x16_A (FALSE) // Row=1, Col=1..16 // HDM16116H-7, HDM16116H-L, HDM16116L*, HDM16116L-7, HDM16116L-L, HDM16116L-1, HDM16116H-2, HDM16116L-2 #define LCD_MODE_1x16_B (FALSE) // Row=1..2, Col=1..8 // HDM16116H, HDM16116L* note that this part number could be either A or B #define LCD_MODE_1x40 (FALSE) // HDM40108H-2 #define LCD_MODE_2x8 (FALSE) // HDM08216H-1, HDM08216L, HDM16216H-2 #define LCD_MODE_2x12 (FALSE) // HDM12216H, HDM12216L #define LCD_MODE_2x16 (TRUE) // HDM16216H-2, HDM16216H-4, HDM16216H-5, HDM16216H-B, HDM16216H-D, HDM16216L-2, HDM16216L-5, HDM16216L-7, HDM16216L-D, HDM16216L-B, HDM16216H-I #define LCD_MODE_2x20 (FALSE) // HDM20216H-3, HDM20216L, HDM20216L-1, HDM20216L-L, HDM20216H-L #define LCD_MODE_2x24 (FALSE) // HDM24216H-2 HDM24216L-2 #define LCD_MODE_2x40 (FALSE) // HDM40216H-4, HDM40216L, HDM40216L-1 #define LCD_MODE_4x16 (FALSE) // HDM16416H, HDM16416L #define LCD_MODE_4x20 (FALSE) // HDM40216H-4, HDM40216L, HDM40216L-1 #define LCD_MODE_4x24 (FALSE) // UNSUPPORTED! // HDM24416H, HDM24416L #define LCD_MODE_4x40 (FALSE) // UNSUPPORTED! // HDM40416H, HDM40416L-4, HDM40416H-5 #define LCD_CURSOR_BLINK (FALSE) // Blink/Noblink cursor mode #define LCD_CURSOR_ON (TRUE) // Cursor visible #define LCD_CURSOR_INCREMENT (TRUE) // Set left-to-right cursor movement #define LCD_CURSOR_SHIFT (FALSE) // Shift display on entry #define LCD_DISPLAY_5x10 (FALSE) // Select 5x7 or 5x10 character matrix #define LCD_DISPLAY_ON (TRUE) // Turn display on/off #define LCD_ALLOW_USER_CHARS (TRUE) // Controls whether display uses ASCII for control chars or uses user-defined chars in lcd_putc() #define LCD_ENABLE_GETC (TRUE) // Save code space by setting to FALSE #define LCD_ENABLE_GOTOXY (TRUE) // any functions which you will not #define LCD_ENABLE_PRINTF (TRUE) // need in your application. #define LCD_ENABLE_UNSCROLL (TRUE) #define LCD_ENABLE_SCROLL (TRUE) #define LCD_ENABLE_CLEAR (TRUE) #if (LCD_ENABLE_SCROLL) #define LCD_ENABLE_GOTOXY (TRUE) // Over-ride turning it off because these function #endif #if (LCD_ENABLE_UNSCROLL) #define LCD_ENABLE_GOTOXY (TRUE) // need access to the gotoxy function. #endif #if (!LCD_ALLOW_USER_CHARS) #define LCD_ENABLE_GOTOXY (TRUE) // need access to the gotoxy function. #endif #define LCD_DATA_PORT PORTB // Port on which LCD data lines are connected #define LCD_TRIS_PORT TRISB // Need to specify the corresponding TRIS #define LCD_4_BIT_MODE (FALSE) // 4-bit or 8-bit interface selection #if LCD_4_BIT_MODE #define LCD_D4_BIT 4 // Attachment of D0 to data port bus - note #endif // that they MUST be contiguous and in order! #if LCD_4_BIT_MODE #define LCD_TRIS_DATAMASK ((byte)(0b11110000)) // Define the bitmask used to read/write the data bits #else #define LCD_TRIS_DATAMASK ((byte)(0b11111111)) // Define all bits used for 8-bit mode #endif #if LCD_ALLOW_USER_CHARS #else #define LCD_DESTRUCTIVE_BS (TRUE) // Backspace '\b' erases character #endif PIN (LCD_E, PORTA, 1); // Pin for LCD /E signal PIN (LCD_RW, PORTA, 3); // Pin for LCD RW signal PIN (LCD_RS, PORTA, 2); // Pin for LCD RS signal PIN (LCD_TRIS_E, TRISA, 1); // Add definitions for direction control PIN (LCD_TRIS_RW, TRISA, 3); PIN (LCD_TRIS_RS, TRISA, 2); /////////////////// DO NOT CHANGE ANYTHING BELOW THIS LINE! ////////////// #define LCD_8_BIT_MODE (!LCD_4_BIT_MODE) #if LCD_MODE_1x8 #define LCD_MAXROWS ((byte)(1)) // Number of LCD rows #define LCD_MAXCOLS ((byte)(8)) // Number of LCD columns #define LCD_MULTI_LINE (FALSE) // Operate in 1-line or 2-line mode for controller #endif #if LCD_MODE_1x16_A #define LCD_MAXROWS ((byte)(1)) #define LCD_MAXCOLS ((byte)(16)) #define LCD_MULTI_LINE (FALSE) #endif #if LCD_MODE_1x16_B #define LCD_MAXROWS ((byte)(1)) #define LCD_MAXCOLS ((byte)(16)) #define LCD_MULTI_LINE (TRUE) #endif #if LCD_MODE_1x40 #define LCD_MAXROWS ((byte)(1)) #define LCD_MAXCOLS ((byte)(40)) #define LCD_MULTI_LINE (TRUE) // Not sure about this #endif #if LCD_MODE_2x8 #define LCD_MAXROWS ((byte)(2)) #define LCD_MAXCOLS ((byte)(8)) #define LCD_MULTI_LINE (TRUE) #endif #if LCD_MODE_2x12 #define LCD_MAXROWS ((byte)(2)) #define LCD_MAXCOLS ((byte)(12)) #define LCD_MULTI_LINE (TRUE) #endif #if LCD_MODE_2x16 #define LCD_MAXROWS ((byte)(2)) #define LCD_MAXCOLS ((byte)(16)) #define LCD_MULTI_LINE (TRUE) #endif #if LCD_MODE_2x20 #define LCD_MAXROWS ((byte)(2)) #define LCD_MAXCOLS ((byte)(20)) #define LCD_MULTI_LINE (TRUE) #endif #if LCD_MODE_2x24 #define LCD_MAXROWS ((byte)(2)) #define LCD_MAXCOLS ((byte)(24)) #define LCD_MULTI_LINE (TRUE) #endif #if LCD_MODE_2x40 #define LCD_MAXROWS ((byte)(2)) #define LCD_MAXCOLS ((byte)(40)) #define LCD_MULTI_LINE (TRUE) #endif #if LCD_MODE_4x16 #define LCD_MAXROWS ((byte)(4)) #define LCD_MAXCOLS ((byte)(16)) #define LCD_MULTI_LINE (TRUE) #endif #if LCD_MODE_4x20 #define LCD_MAXROWS ((byte)(4)) #define LCD_MAXCOLS ((byte)(20)) #define LCD_MULTI_LINE (TRUE) #endif #define LCD_COMMAND_CLEAR ((byte)(0x01)) // Clear screen, home cursor, unshift display #define LCD_COMMAND_HOME ((byte)(0x02)) // Home cursor, unshift display #define LCD_COMMAND_BACKSPACE ((byte)(0x10)) // Move cursor left one (destructive based on LCD_DESTRUCTIVE_BS) #define LCD_COMMAND_FWDSPACE ((byte)(0x14)) // Move cursor right one #define LCD_COMMAND_PANLEFT ((byte)(0x18)) // Move screen left one #define LCD_COMMAND_PANRIGHT ((byte)(0x1C)) // Move screen right one #ifndef LCD_MAXROWS error ("NO LCD MODE SPECIFIED - You need to give a 1x8, 2x8 etc. format!"); #endif // Mandatory functions: void lcd_init (void); // Initialize LCD bus and Mode void lcd_putc (byte c); // Write character to LCD void lcd_command (byte c); // Write command to LCD controller byte lcd_lineof (byte CursorAddress); // Calculate cursor row from it's address byte lcd_cursorpos (void); // Return address of cursor position // Optional functions: #if LCD_ENABLE_GETC byte lcd_getc (void); // Read character at cursor #endif #if LCD_ENABLE_GOTOXY void lcd_gotoxy (byte row, byte col); // Position cursor void lcd_getxy (byte *row, byte *col); // Return row and column of cursor position #endif #if LCD_ENABLE_PRINTF void lcd_printf (const char* message); // Write message to LCD (C string type) #endif #if LCD_ENABLE_UNSCROLL void lcd_unscroll (void); // Roll scroll backwards one line #endif #if LCD_ENABLE_SCROLL void lcd_scroll (void); // Scroll up one line #endif #if LCD_ENABLE_CLEAR void lcd_clear (void); // Clear LCD screen #endif #if LCD_ALLOW_USER_CHARS void lcd_define_char (byte c, const byte *bitmap); // Define user-defined char #endif #endif