This is a part of the Kinetiszer project.

Dependents:   SoundEngine

lcd.h

Committer:
Clemo
Date:
2014-10-28
Revision:
0:5a419ba2726d

File content as of revision 0:5a419ba2726d:

/**
* @file
* Definitions for an I2C LCD driver based on the ST7032i chip from Sitronix.
*
* Author: Clemens Valens
* License: GNU General Public License
*
* History
* 2014.09.08  ver 1.00    Preliminary version, first release
*/

#ifndef __LCD_H__
#define __LCD_H__


#include "board.h"


#define LCD_I2C_ADDRESS  (0x3e)

// The speed of the display depends on the frequency of its internal oscillator.
#define ST7032_FOSC  (192000) /* [Hz], can be tweaked if extended mode is available. */
#define ST7032_RESPONSE_TIME_SLOW  (410*1000000/ST7032_FOSC) /* [us] */
#define ST7032_RESPONSE_TIME_NORMAL  (10*1000000/ST7032_FOSC) /* [us] */

#define ST7032_RESET_RECOVERY_TIME  (40) /* [ms] */

// ST7032 commands
// Clear Display
#define ST7032_CMD_CLEAR  (0x01)

// Return Home
#define ST7032_CMD_HOME  (0x02)

// Entry Mode Set
#define ST7032_CMD_ENTRY_MODE  (0x04)
#define ST7032_SHIFT_CURSOR  (0x00) /* default */
#define ST7032_SHIFT_DISPLAY  (0x01)
#define ST7032_DECREMENT  (0x00)
#define ST7032_INCREMENT  (0x02) /* default */

// Display ON/OFF
#define ST7032_CMD_ON_OFF  (0x08)
#define ST7032_BLINK_OFF  (0x00) /* default */
#define ST7032_BLINK_ON  (0x01)
#define ST7032_CURSOR_OFF  (0x00) /* default */
#define ST7032_CURSOR_ON  (0x02)
#define ST7032_DISPLAY_OFF  (0x00) /* default */
#define ST7032_DISPLAY_ON  (0x04)

// Cursor or Display Shift
#define ST7032_CMD_SHIFT  (0x10)
#define ST7032_SHIFT_LEFT  (0x00)
#define ST7032_SHIFT_RIGHT  (0x04)
#define ST7032_SHIFT_CURSOR  (0x00)
#define ST7032_SHIFT_SCREEN  (0x08)

// Function Set
#define ST7032_CMD_FUNCTION  (0x20)
#define ST7032_FUNC_NORMAL  (0x00) /* default */
#define ST7032_FUNC_EXTENDED  (0x01)
#define ST7032_FUNC_HEIGHT_NORMAL  (0x00) /* default */
#define ST7032_FUNC_HEIGHT_DOUBLE  (0x04)
#define ST7032_FUNC_1_LINE  (0x00) /* default */
#define ST7032_FUNC_2_LINES  (0x08)
#define ST7032_FUNC_4_BIT  (0x00)
#define ST7032_FUNC_8_BIT  (0x10) /* default */

#define ST7032_FUNC_CONFIG_NORMAL  (ST7032_FUNC_NORMAL | ST7032_FUNC_HEIGHT_NORMAL | ST7032_FUNC_2_LINES | ST7032_FUNC_8_BIT)
#define ST7032_FUNC_CONFIG_EXTENDED  (ST7032_FUNC_EXTENDED | ST7032_FUNC_HEIGHT_NORMAL | ST7032_FUNC_2_LINES | ST7032_FUNC_8_BIT)
#define ST7032_FUNC_CONFIG_EXTENDED_DOUBLE  (ST7032_FUNC_EXTENDED | ST7032_FUNC_HEIGHT_DOUBLE | ST7032_FUNC_2_LINES | ST7032_FUNC_8_BIT)

// Set CGRAM Address (normal function, ST7032_FUNC_NORMAL)
#define ST7032_CMD_CGRAM_ADDRESS  (0x40)
#define ST7032_CGRAM_ADDRESS_MASK  (0x3f)

// Set DDRAM Address
#define ST7032_CMD_DDRAM_ADDRESS  (0x80)
#define ST7032_DDRAM_ADDRESS_MASK  (0x7f)

// Bias selection/Internal OSC frequency adjust (extended function)
#define ST7032_CMD_BIAS_OSC  (0x10)
#define ST7032_BIAS_020  (0x00) /* default */
#define ST7032_BIAS_025  (0x08)
#define ST7032_OSC_MASK  (0x07) /* defaults to 0x04 */

// Set Icon RAM Address (extended function)
#define ST7032_CMD_ICON_RAM_ADDRESS  (0x40)
#define ST7032_ICON_ADDRESS_MASK  (0x0f)

// Power/ICON control/Contrast set (high byte) (extended function)
#define ST7032_CMD_POWER_ICON_CONTRAST  (0x50)
#define ST7032_BOOSTER_OFF  (0x00) /* default */
#define ST7032_BOOSTER_ON  (0x04)
#define ST7032_ICON_OFF  (0x00) /* default */
#define ST7032_ICON_ON  (0x08)
#define ST7032_CONTRAST_HI_MASK  (0x03) /* defaults to 0x02 */

// Follower control (extended function)
#define ST7032_CMD_FOLLOWER  (0x60)
#define ST7032_FOLLOWER_OFF  (0x00) /* default */
#define ST7032_FOLLOWER_ON  (0x08)
#define ST7032_AMPLIFIER_RATIO_MASK  (0x07) /* defaults to 0x02 */

// Contrast set (low byte) (extended function)
#define ST7032_CMD_CONTRAST_LO  (0x70)
#define ST7032_CONTRAST_LO_MASK  (0x0f) /* defaults to 0x00 */


uint8_t lcd_putc(char ch);
uint8_t lcd_puts(char *p_str);
void lcd_clear(void);
void lcd_cursor(uint8_t line, uint8_t column);
void lcd_display_cursor_blink(uint8_t display, uint8_t cursor, uint8_t blink);
void lcd_clear_to_eol(int line, int column);
void lcd_contrast(uint8_t contrast);
void lcd_font(uint8_t font);
void lcd_set_custom_character(uint8_t index, const uint8_t *p_data);
void lcd_bar_graph(uint8_t position, uint8_t value, uint8_t value_max);
void lcd_init(void);


#endif // __LCD_H__