222 lines
6.1 KiB
C
222 lines
6.1 KiB
C
/****************************************************************************
|
|
* include/nuttx/lcd/ht16k33.h
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership. The
|
|
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations
|
|
* under the License.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifndef __INCLUDE_NUTTX_LCD_HT16K33_H
|
|
#define __INCLUDE_NUTTX_LCD_HT16K33_H
|
|
|
|
/****************************************************************************
|
|
* Included Files
|
|
****************************************************************************/
|
|
|
|
#include <nuttx/config.h>
|
|
#include <nuttx/fs/ioctl.h>
|
|
|
|
/* Configuration
|
|
* CONFIG_I2C - Enables support for SPI drivers
|
|
* CONFIG_LCD_HT16K33 - Enables support for the HT16K33 driver
|
|
*/
|
|
|
|
#if defined(CONFIG_I2C) && defined(CONFIG_LCD_HT16K33)
|
|
|
|
/****************************************************************************
|
|
* Pre-processor Definitions
|
|
****************************************************************************/
|
|
|
|
/* HT16K33 Address */
|
|
|
|
#define HT16K33_I2C_ADDR 0x70
|
|
|
|
/* Default contrast */
|
|
|
|
#define DEFAULT_CONTRAST 0xf
|
|
|
|
#define HT16K33_CONTRAST_MIN 0
|
|
#define HT16K33_CONTRAST_MAX 15
|
|
|
|
/* HT16K33 register addresses */
|
|
|
|
#define HT16K33_DISP_DATA_ADDR 0x00 /* Display Data Address Pointer: 0x00-0x0f */
|
|
#define HT16K33_SYSTEM_SETUP 0x20 /* System Setup: bit 0 = System Oscilator */
|
|
#define HT16K33_KEY_DATA_ADDR 0x40 /* Key Data Address Pointer: 0x00-0x07 */
|
|
#define HT16K33_INT_FLAG_ADDR 0x60 /* INT Flag Address */
|
|
#define HT16K33_DISPLAY_SETUP 0x80 /* DISPLAY Setup */
|
|
#define HT16K33_ROW_INT_SET 0xa0 /* ROW/INT set */
|
|
#define HT16K33_DIMMING_SET 0xe0 /* Dimming set */
|
|
#define HT16K33_TEST_MODE 0xd9 /* Holtek Test Mode */
|
|
|
|
/* Bits and flags definitions */
|
|
|
|
#define SYSTEM_SETUP_OSC_ON (1 << 0) /* Turn ON the Oscillator */
|
|
#define DISPLAY_SETUP_DISP_ON (1 << 0) /* Display ON */
|
|
#define DISPLAY_SETUP_BLINK_SHIFT 1
|
|
#define DISPLAY_SETUP_BLINK_MASK (3 << DISPLAY_SETUP_BLINK_SHIFT)
|
|
# define DISPLAY_SETUP_BLINK_OFF (0 << DISPLAY_SETUP_BLINK_SHIFT)
|
|
# define DISPLAY_SETUP_BLINK_2HZ (1 << DISPLAY_SETUP_BLINK_SHIFT)
|
|
# define DISPLAY_SETUP_BLINK_1HZ (2 << DISPLAY_SETUP_BLINK_SHIFT)
|
|
# define DISPLAY_SETUP_BLINK_0P5HZ (3 << DISPLAY_SETUP_BLINK_SHIFT)
|
|
#define DIMMING_SHIFT 0
|
|
#define DIMMING_MASK (0xf << DIMMING_SHIFT)
|
|
#define DIMMING_DUTY(N) ((N - 1) << DIMMING_SHIFT)
|
|
|
|
/* This 14-segment mapping comes from Dave Madison's LED-Segment-ASCII
|
|
* released under MIT license:
|
|
* https://github.com/dmadison/LED-Segment-ASCII
|
|
*/
|
|
|
|
static const uint16_t asciito14seg[96] =
|
|
{
|
|
0x0000, /* (space) */
|
|
0x4006, /* ! */
|
|
0x0202, /* " */
|
|
0x12ce, /* # */
|
|
0x12ed, /* $ */
|
|
0x3fe4, /* % */
|
|
0x2359, /* & */
|
|
0x0200, /* ' */
|
|
0x2400, /* ( */
|
|
0x0900, /* ) */
|
|
0x3fc0, /* * */
|
|
0x12c0, /* + */
|
|
0x0800, /* , */
|
|
0x00c0, /* - */
|
|
0x4000, /* . */
|
|
0x0c00, /* / */
|
|
0x0c3f, /* 0 */
|
|
0x0406, /* 1 */
|
|
0x00db, /* 2 */
|
|
0x008f, /* 3 */
|
|
0x00e6, /* 4 */
|
|
0x2069, /* 5 */
|
|
0x00fd, /* 6 */
|
|
0x0007, /* 7 */
|
|
0x00ff, /* 8 */
|
|
0x00ef, /* 9 */
|
|
0x1200, /* : */
|
|
0x0a00, /* ; */
|
|
0x2440, /* < */
|
|
0x00c8, /* = */
|
|
0x0980, /* > */
|
|
0x5083, /* ? */
|
|
0x02bb, /* @ */
|
|
0x00f7, /* A */
|
|
0x128f, /* B */
|
|
0x0039, /* C */
|
|
0x120f, /* D */
|
|
0x0079, /* E */
|
|
0x0071, /* F */
|
|
0x00bd, /* G */
|
|
0x00f6, /* H */
|
|
0x1209, /* I */
|
|
0x001e, /* J */
|
|
0x2470, /* K */
|
|
0x0038, /* L */
|
|
0x0536, /* M */
|
|
0x2136, /* N */
|
|
0x003f, /* O */
|
|
0x00f3, /* P */
|
|
0x203f, /* Q */
|
|
0x20f3, /* R */
|
|
0x00ed, /* S */
|
|
0x1201, /* T */
|
|
0x003e, /* U */
|
|
0x0c30, /* V */
|
|
0x2836, /* W */
|
|
0x2d00, /* X */
|
|
0x00ee, /* Y */
|
|
0x0c09, /* Z */
|
|
0x0039, /* [ */
|
|
0x2100, /* \ */
|
|
0x000f, /* ] */
|
|
0x2800, /* ^ */
|
|
0x0008, /* _ */
|
|
0x0100, /* ` */
|
|
0x1058, /* a */
|
|
0x2078, /* b */
|
|
0x00d8, /* c */
|
|
0x088e, /* d */
|
|
0x0858, /* e */
|
|
0x14c0, /* f */
|
|
0x048e, /* g */
|
|
0x1070, /* h */
|
|
0x1000, /* i */
|
|
0x0a10, /* j */
|
|
0x3600, /* k */
|
|
0x0030, /* l */
|
|
0x10d4, /* m */
|
|
0x1050, /* n */
|
|
0x00dc, /* o */
|
|
0x0170, /* p */
|
|
0x0486, /* q */
|
|
0x0050, /* r */
|
|
0x2088, /* s */
|
|
0x0078, /* t */
|
|
0x001c, /* u */
|
|
0x0810, /* v */
|
|
0x2814, /* w */
|
|
0x2d00, /* x */
|
|
0x028e, /* y */
|
|
0x0848, /* z */
|
|
0x0949, /* { */
|
|
0x1200, /* | */
|
|
0x2489, /* } */
|
|
0x0cc0, /* ~ */
|
|
0x0000, /* (del) */
|
|
};
|
|
|
|
/****************************************************************************
|
|
* Public Types
|
|
****************************************************************************/
|
|
|
|
#ifdef __cplusplus
|
|
#define EXTERN extern "C"
|
|
extern "C"
|
|
{
|
|
#else
|
|
#define EXTERN extern
|
|
#endif
|
|
|
|
/****************************************************************************
|
|
* Name: ht16k33_register
|
|
*
|
|
* Description:
|
|
* Initialize the HT16K33 device as a LEDS interface.
|
|
*
|
|
* Input Parameters:
|
|
* spi - An instance of the SPI interface to use to communicate
|
|
* with the HT16K33.
|
|
* devno - Device number to identify current display.
|
|
*
|
|
* Returned Value:
|
|
* Zero (OK) on success; a negated errno value on failure.
|
|
*
|
|
****************************************************************************/
|
|
|
|
struct i2c_master_s; /* Forward reference */
|
|
|
|
int ht16k33_register(int devno, FAR struct i2c_master_s *i2c);
|
|
|
|
#undef EXTERN
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* CONFIG_I2C && CONFIG_HT16K33 */
|
|
#endif /* __INCLUDE_NUTTX_LCD_HT16K33_H */
|