|
- /*!
- * \file alcd.c
- * \brief
- * A target independent Alpharithmetic LCD driver
- *
- * Copyright (C) 2014 Christos Choutouridis (http://www.houtouridis.net)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
- #ifndef __alcd_h__
- #define __alcd_h__
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #include "jiffies.h"
- #include "driver_types.h"
- #include <stdint.h>
- #include <string.h>
- #include <ctype.h>
- #include <time.h>
-
-
- /*
- * General Defines
- */
- #define ALCD_CLOCK (CLOCK)
-
- /*!
- * ----------------------------------------------------
- * Hitachi HD44780 - Samsung KS0066U
- * ----------------------------------------------------
- *
- *
- * Entry Mode Set -----> 0 0 0 0 0 1 I/D S
- * ----------------------------------------------------
- * I/D = 1 -->Inciment Curs I/D = 0 Decriment
- * S = 1 -->Display shift S = 0 Not
- *
- *
- * DispOnOffControll --> 0 0 0 0 1 D C B
- * -------------------------------------------------
- * D = Display On
- * C = Cursor On
- * B = Blinking On
- *
- *
- * Cursor/Display Shift --> 0 0 0 1 S/C R/L x x
- * ---------------------------------------------------
- * S/C = 1 -->Display Shift S/C = 0 -->Cursor Shift
- * R/L = 1 -->Shift Right R/L = 0 -->Shift left
- *
- *
- * FunctionSet ------> 0 0 1 DL N F x x
- * ---------------------------------------------------
- * DL = 1 -->8bit DL = 0 -->4bit
- * N = 1 -->2 lines N = 0 -->1 line
- * F = 1 -->5x10 dots F = 0 -->5x8 dots
- *
- */
- //#define LCD_LINES (4)
- //#define LCD_ROWS (16)
-
- #define LCD_CLRSCR (0x01) /*!< Clear Srean Command Number */
- #define LCD_RETHOME (0x02) /*!< Cursor home Un-Shift display DDRam as is */
-
- #define LCD_ENTRYMODE (0x06) /*!< Inc Cursor, Don't shift display */
- #define LCD_DISP_ON (0x0C) /*!< No Cursos and Blink */
- #define LCD_DISP_OFF (0x08)
- #define LCD_CUR_DISP (0x14) /*!< Cursor shift right */
- #define LCD_FUNSET_2L8 (0x28) /*!< 4bit, 2lines, 5x8 dots */
- #define LCD_FUNSET_1L8 (0x20) /*!< 4bit, 1lines, 5x8 dots */
- #define LCD_FUNSET_1L10 (0x24) /*!< 4bit, 1lines, 5x10 dots */
-
- #define LCD_SETCGRAMADDR (0x40)
-
- #define LCD_DDRAMMask (0x80) /*!< DDRAM ------------> 1 ADD[7..0] */
- #define LCD_BFMask (0x80) /*!< IR ------------> BF AC[6..0] */
- #define LCD_ACMask (0x7f) /*!< ____________________________| */
-
- #define LCD_SHIFT_RIGHT (0x1C)
- #define LCD_SHIFT_LEFT (0x18)
-
- typedef enum {
- ALCD_1Line_5x8 = LCD_FUNSET_1L8,
- ALCD_1Line_5x10 = LCD_FUNSET_1L10,
- ALCD_2Lines_5x8 = LCD_FUNSET_2L8
- } alcd_funset_en;
-
- /*!
- * Alpharithmetic LCD Cursor
- */
- typedef volatile struct
- {
- uint8_t x;
- uint8_t y;
- }alcd_cursor_t;
-
-
- /*!
- * Alpharithmetic LCD Pin assignements.
- * Each one can be called xx.DB4(1); or xx.DB4(0); in order to set
- * or clear the corresponding pin.
- *
- * \note These pointers MUST to be assigned from main application.
- */
- typedef volatile struct
- {
- //drv_pinout_ft db0;
- //drv_pinout_ft db1;
- //drv_pinout_ft db2;
- //drv_pinout_ft db3;
- drv_pinout_ft db4; /*!< Pointer for DB4 pin */
- drv_pinout_ft db5; /*!< Pointer for DB5 pin */
- drv_pinout_ft db6; /*!< Pointer for DB6 pin */
- drv_pinout_ft db7; /*!< Pointer for DB7 pin */
- drv_pinout_ft rs; /*!< Pointer for RS pin */
- drv_pinout_ft en; /*!< Pointer for EN pin */
- drv_pinout_ft bl; /*!< Pointer for Back Light pin*/
- }alcd_io_t;
-
- /*!
- * Alpharithmetic LCD Public Data struct
- */
- typedef volatile struct
- {
- alcd_io_t io; //!< Link to IO struct
- alcd_cursor_t c; //!< Link to Cursor struct
- uint8_t lines; //!< The lines of attached lcd
- uint8_t columns; //!< The columns of attached lcd
- //uint8_t bus; //!< Bus length, 4 or 8 bit
- drv_status_en status; //!< alcd driver status
- }alcd_t;
-
-
- /*
- * ============= PUBLIC ALCD API =============
- */
-
- /*
- * Link and Glue functions
- */
- void alcd_link_db4 (alcd_t *alcd, drv_pinout_ft pfun);
- void alcd_link_db5 (alcd_t *alcd, drv_pinout_ft pfun);
- void alcd_link_db6 (alcd_t *alcd, drv_pinout_ft pfun);
- void alcd_link_db7 (alcd_t *alcd, drv_pinout_ft pfun);
- void alcd_link_rs (alcd_t *alcd, drv_pinout_ft pfun);
- void alcd_link_en (alcd_t *alcd, drv_pinout_ft pfun);
- void alcd_link_bl (alcd_t *alcd, drv_pinout_ft pfun);
-
- int alcd_putchar (alcd_t *alcd, int ch);
-
- /*
- * Set functions
- */
- void alcd_set_lines (alcd_t *alcd, int lines);
- void alcd_set_columns (alcd_t *alcd, int columns);
-
- /*
- * User Functions
- */
- void alcd_deinit (alcd_t *alcd); /*!< For compatibility */
- drv_status_en alcd_init (alcd_t *alcd, alcd_funset_en fs); /*!< For compatibility */
-
- void alcd_backlight (alcd_t *alcd, uint8_t on); /*!< For compatibility */
- void alcd_enable (alcd_t *alcd, uint8_t on); /*!< For compatibility */
- void alcd_cls (alcd_t *alcd); /*!< For compatibility */
- void alcd_shift (alcd_t *alcd, int pos); /*!< For compatibility */
- void alcd_createChar (alcd_t *alcd, uint8_t location, uint8_t charmap[]);
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif //#ifndef __alcd_h__
|