LCD - Liquid Crystal Display

Description

Liquid Crystal Display (LCD) Peripheral API.

This module contains functions to control the LDC peripheral of Silicon Labs 32-bit MCUs and SoCs. The LCD driver can drive up to 8x36 segmented LCD directly. The animation feature makes it possible to have active animations without the CPU intervention.

Data Structures

struct LCD_AnimInit_TypeDef
LCD Animation Configuration.
struct LCD_FrameCountInit_TypeDef
LCD Frame Control Initialization.
struct LCD_Init_TypeDef
LCD Controller Initialization structure.

Functions

void LCD_Init (const LCD_Init_TypeDef *lcdInit)
Initialize the Liquid Crystal Display (LCD) controller.
void LCD_VLCDSelect ( LCD_VLCDSel_TypeDef vlcd)
Select a source for VLCD.
void LCD_UpdateCtrl ( LCD_UpdateCtrl_TypeDef ud)
Configure Update Control.
void LCD_FrameCountInit (const LCD_FrameCountInit_TypeDef *fcInit)
Initialize the LCD Frame Counter.
void LCD_AnimInit (const LCD_AnimInit_TypeDef *animInit)
Configure the LCD controller Animation feature.
void LCD_SegmentRangeEnable ( LCD_SegmentRange_TypeDef segmentRange, bool enable)
Enables updating this range of LCD segment lines.
void LCD_SegmentSet (int com, int bit, bool enable)
Turn on or clear a segment.
void LCD_SegmentSetLow (int com, uint32_t mask, uint32_t bits)
Update 0-31 lowest segments on a given COM-line in one operation according to the bit mask.
void LCD_SegmentSetHigh (int com, uint32_t mask, uint32_t bits)
Update the high (32-39) segments on a given COM-line in one operation.
void LCD_ContrastSet (int level)
Configure the contrast level on the LCD panel.
void LCD_BiasSet ( LCD_Bias_TypeDef bias)
Configure the bias level on the LCD panel.
void LCD_VBoostSet ( LCD_VBoostLevel_TypeDef vboost)
Configure voltage booster.
void LCD_BiasSegmentSet (int segmentLine, int biasLevel)
Configure the bias level for a specific segment line for Direct Segment Control.
void LCD_BiasComSet (int comLine, int biasLevel)
Configure the bias level for a specific segment line.
void LCD_Enable (bool enable)
Enable or disable LCD controller.
void LCD_AnimEnable (bool enable)
Enables or disables LCD Animation feature.
void LCD_BlinkEnable (bool enable)
Enables or disables LCD blink.
void LCD_BlankEnable (bool enable)
Disables all segments, while keeping segment state.
void LCD_FrameCountEnable (bool enable)
Enables or disables LCD Frame counter.
int LCD_AnimState (void)
Returns current animation state.
int LCD_BlinkState (void)
Returns current blink state.
void LCD_FreezeEnable (bool enable)
When set, LCD registers will not be updated until cleared.
uint32_t LCD_SyncBusyGet (void)
Returns SYNCBUSY bits, indicating which registers have pending updates.
void LCD_SyncBusyDelay (uint32_t flags)
Polls LCD SYNCBUSY flags, until flag has been cleared.
uint32_t LCD_IntGet (void)
Get pending LCD interrupt flags.
uint32_t LCD_IntGetEnabled (void)
Get enabled and pending LCD interrupt flags.
void LCD_IntSet (uint32_t flags)
Set one or more pending LCD interrupts from SW.
void LCD_IntEnable (uint32_t flags)
Enable LCD interrupts.
void LCD_IntDisable (uint32_t flags)
Disable LCD interrupts.
void LCD_IntClear (uint32_t flags)
Clear one or more interrupt flags.
void LCD_DSCEnable (bool enable)
Enable or disable LCD Direct Segment Control.

Macros

#define LCD_DEFAULT_CLOCK_PRESCALER 64
Default Clock Prescaler.
#define LCD_DEFAULT_FRAME_RATE_DIV 4
Default LCD Frame Rate Divisor.
#define LCD_DEFAULT_CONTRAST 15
Default LCD Contrast.
#define LCD_INIT_DEFAULT
Default configuration for LCD initialization structure, enables 160 segments.
#define LCD_FRAME_COUNTER_VAL_MAX 64
Frame counter uses a maximum of 5 bits (FCTOP[5:0]).

Enumerations

enum LCD_Mux_TypeDef {
lcdMuxStatic = LCD_DISPCTRL_MUX_STATIC,
lcdMuxDuplex = LCD_DISPCTRL_MUX_DUPLEX,
lcdMuxTriplex = LCD_DISPCTRL_MUX_TRIPLEX,
lcdMuxQuadruplex = LCD_DISPCTRL_MUX_QUADRUPLEX,
lcdMuxSextaplex = LCD_DISPCTRL_MUXE_MUXE | LCD_DISPCTRL_MUX_DUPLEX,
lcdMuxOctaplex = LCD_DISPCTRL_MUXE_MUXE | LCD_DISPCTRL_MUX_QUADRUPLEX
}
MUX setting.
enum LCD_Wave_TypeDef {
lcdWaveLowPower = LCD_DISPCTRL_WAVE_LOWPOWER,
lcdWaveNormal = LCD_DISPCTRL_WAVE_NORMAL
}
Wave type.
enum LCD_Bias_TypeDef {
lcdBiasStatic = LCD_DISPCTRL_BIAS_STATIC,
lcdBiasOneHalf = LCD_DISPCTRL_BIAS_ONEHALF,
lcdBiasOneThird = LCD_DISPCTRL_BIAS_ONETHIRD,
lcdBiasOneFourth = LCD_DISPCTRL_BIAS_ONEFOURTH
}
Bias setting.
enum LCD_VLCDSel_TypeDef {
lcdVLCDSelVDD = LCD_DISPCTRL_VLCDSEL_VDD,
lcdVLCDSelVExtBoost = LCD_DISPCTRL_VLCDSEL_VEXTBOOST
}
VLCD Voltage Source.
enum LCD_ConConf_TypeDef {
lcdConConfVLCD = LCD_DISPCTRL_CONCONF_VLCD,
lcdConConfGND = LCD_DISPCTRL_CONCONF_GND
}
Contrast Configuration.
enum LCD_VBoostLevel_TypeDef {
lcdVBoostLevel0 = LCD_DISPCTRL_VBLEV_LEVEL0,
lcdVBoostLevel1 = LCD_DISPCTRL_VBLEV_LEVEL1,
lcdVBoostLevel2 = LCD_DISPCTRL_VBLEV_LEVEL2,
lcdVBoostLevel3 = LCD_DISPCTRL_VBLEV_LEVEL3,
lcdVBoostLevel4 = LCD_DISPCTRL_VBLEV_LEVEL4,
lcdVBoostLevel5 = LCD_DISPCTRL_VBLEV_LEVEL5,
lcdVBoostLevel6 = LCD_DISPCTRL_VBLEV_LEVEL6,
lcdVBoostLevel7 = LCD_DISPCTRL_VBLEV_LEVEL7
}
Voltage Boost Level - Data sheets document setting for each part number.
enum LCD_FCPreScale_TypeDef {
lcdFCPrescDiv1 = LCD_BACTRL_FCPRESC_DIV1,
lcdFCPrescDiv2 = LCD_BACTRL_FCPRESC_DIV2,
lcdFCPrescDiv4 = LCD_BACTRL_FCPRESC_DIV4,
lcdFCPrescDiv8 = LCD_BACTRL_FCPRESC_DIV8
}
Frame Counter Clock Prescaler, FC-CLK = FrameRate (Hz) / this factor.
enum LCD_SegmentRange_TypeDef {
lcdSegment0_3 = (1 << 0),
lcdSegment4_7 = (1 << 1),
lcdSegment8_11 = (1 << 2),
lcdSegment12_15 = (1 << 3),
lcdSegment16_19 = (1 << 4),
lcdSegment20_23 = (1 << 5),
lcdSegment24_27 = (1 << 6),
lcdSegment28_31 = (1 << 7),
lcdSegment32_35 = (1 << 8),
lcdSegment36_39 = (1 << 9),
lcdSegmentAll = (0x03ff)
}
Segment selection.
enum LCD_UpdateCtrl_TypeDef {
lcdUpdateCtrlRegular = LCD_CTRL_UDCTRL_REGULAR,
lcdUpdateCtrlFCEvent = LCD_CTRL_UDCTRL_FCEVENT,
lcdUpdateCtrlFrameStart = LCD_CTRL_UDCTRL_FRAMESTART
}
Update Data Control.
enum LCD_AnimShift_TypeDef {
lcdAnimShiftNone = _LCD_BACTRL_AREGASC_NOSHIFT,
lcdAnimShiftLeft = _LCD_BACTRL_AREGASC_SHIFTLEFT,
lcdAnimShiftRight = _LCD_BACTRL_AREGASC_SHIFTRIGHT
}
Animation Shift operation; none, left or right.
enum LCD_AnimLogic_TypeDef {
lcdAnimLogicAnd = LCD_BACTRL_ALOGSEL_AND,
lcdAnimLogicOr = LCD_BACTRL_ALOGSEL_OR
}
Animation Logic Control, how AReg and BReg should be combined.
enum LCD_AnimLoc_TypeDef {
lcdAnimLocSeg0To7 = LCD_BACTRL_ALOC_SEG0TO7,
lcdAnimLocSeg8To15 = LCD_BACTRL_ALOC_SEG8TO15
}
Animation Location, set the LCD segments which animation applies to.

Function Documentation

LCD_Init()

void LCD_Init ( const LCD_Init_TypeDef * lcdInit )

Initialize the Liquid Crystal Display (LCD) controller.

Configures the LCD controller. You must enable it afterwards, potentially configuring Frame Control and interrupts first according to requirements.

Parameters
[in] lcdInit A pointer to the initialization structure which configures the LCD controller.

LCD_VLCDSelect()

void LCD_VLCDSelect ( LCD_VLCDSel_TypeDef vlcd )

Select a source for VLCD.

Parameters
[in] vlcd Select a source for the VLCD voltage.

LCD_UpdateCtrl()

void LCD_UpdateCtrl ( LCD_UpdateCtrl_TypeDef ud )

Configure Update Control.

Parameters
[in] ud Configures the LCD update method.

LCD_FrameCountInit()

void LCD_FrameCountInit ( const LCD_FrameCountInit_TypeDef * fcInit )

Initialize the LCD Frame Counter.

Parameters
[in] fcInit A pointer to the Frame Counter initialization structure.

LCD_AnimInit()

void LCD_AnimInit ( const LCD_AnimInit_TypeDef * animInit )

Configure the LCD controller Animation feature.

Parameters
[in] animInit A pointer to the LCD Animation initialization structure.

LCD_SegmentRangeEnable()

void LCD_SegmentRangeEnable ( LCD_SegmentRange_TypeDef segmentRange,
bool enable
)

Enables updating this range of LCD segment lines.

Parameters
[in] segmentRange A range of 4 LCD segment lines to enable or disable for all enabled COM lines.
[in] enable Boolean true to enable segment updates, false to disable updates.

LCD_SegmentSet()

void LCD_SegmentSet ( int com,
int bit,
bool enable
)

Turn on or clear a segment.

Note
For the Gecko Family, the maximum configuration is (COM-lines x Segment-Lines) 4x40. For the Tiny Gecko Family, the maximum configuration is 8x20 or 4x24. For the Giant Gecko Family, the maximum configuration is 8x36 or 4x40.
Parameters
[in] com A COM line to change.
[in] bit A bit index indicating which field to change.
[in] enable True will set segment, false will clear segment.

LCD_SegmentSetLow()

void LCD_SegmentSetLow ( int com,
uint32_t mask,
uint32_t bits
)

Update 0-31 lowest segments on a given COM-line in one operation according to the bit mask.

Parameters
[in] com Indicates a COM line to update.
[in] mask A bit mask for segments 0-31.
[in] bits A bit pattern for segments 0-31.

LCD_SegmentSetHigh()

void LCD_SegmentSetHigh ( int com,
uint32_t mask,
uint32_t bits
)

Update the high (32-39) segments on a given COM-line in one operation.

Parameters
[in] com Indicates a COM line to update.
[in] mask A bit mask for segments 32-39.
[in] bits A bit pattern for segments 32-39.

LCD_ContrastSet()

void LCD_ContrastSet ( int level )

Configure the contrast level on the LCD panel.

Parameters
[in] level The contrast level in range 0-63.

LCD_BiasSet()

void LCD_BiasSet ( LCD_Bias_TypeDef bias )

Configure the bias level on the LCD panel.

Parameters
[in] bias The bias level.

LCD_VBoostSet()

void LCD_VBoostSet ( LCD_VBoostLevel_TypeDef vboost )

Configure voltage booster.

The resulting voltage level is described in each part number's data sheet

Parameters
[in] vboost Voltage boost level

LCD_BiasSegmentSet()

void LCD_BiasSegmentSet ( int segmentLine,
int biasLevel
)

Configure the bias level for a specific segment line for Direct Segment Control.

Note
When DSC is active, each configuration takes up 4 bits in the corresponding Segment Registers (SEGD0L/SEGD1H for Series 0 and 1, SEGDx for Series 2) which defines the bias level. For optimal use of this feature, the entire SEGD-registers should be set at once in an optimized routine. Therefore, this function shows how to correctly configure the bias levels and should be used with care.
Parameters
[in] segmentLine A segment line number.
[in] biasLevel The bias configuration level. This value must be within the constraints defined by the LCD_DISPCTRL bias settings. For more information, see the applicable Reference Manual and data sheet.

LCD_BiasComSet()

void LCD_BiasComSet ( int comLine,
int biasLevel
)

Configure the bias level for a specific segment line.

Note
When DSC is active, each configuration takes up 4 bits in the corresponding Segment Registers (SEGD4L/SEGD4H for Series 0 and 1, AREGA/AREGB for Series 2) which defines bias level. For optimal use of this feature, the entire register set should be set at once in a optimized routine. Therefore, this function shows how to correctly configure the bias levels and should be used with care.
Parameters
[in] comLine A COM line number, between 0 and 7 for Series 0 and 1. For Series 2, max is LCD_COM_NUM, defined in device-specific headers.
[in] biasLevel The bias configuration level. This value must be within the constraints defined by the LCD_DISPCTRL bias settings. For more information, see the appropriate Reference Manual and data sheet.

LCD_Enable()

void LCD_Enable ( bool enable )
inline

Enable or disable LCD controller.

Parameters
[in] enable If true, enables LCD controller with current configuration. If false, disables LCD controller. Enable CMU clock for LCD for correct operation.

LCD_AnimEnable()

void LCD_AnimEnable ( bool enable )
inline

Enables or disables LCD Animation feature.

Parameters
[in] enable Boolean true enables animation, false disables animation.

LCD_BlinkEnable()

void LCD_BlinkEnable ( bool enable )
inline

Enables or disables LCD blink.

Parameters
[in] enable Boolean true enables blink, false disables blink.

LCD_BlankEnable()

void LCD_BlankEnable ( bool enable )
inline

Disables all segments, while keeping segment state.

Parameters
[in] enable Boolean true clears all segments, boolean false restores all segment lines.

LCD_FrameCountEnable()

void LCD_FrameCountEnable ( bool enable )
inline

Enables or disables LCD Frame counter.

Parameters
[in] enable Boolean true enables frame counter, false disables frame counter.

LCD_AnimState()

int LCD_AnimState ( void )
inline

Returns current animation state.

Returns
Animation state, in range 0-15.

LCD_BlinkState()

int LCD_BlinkState ( void )
inline

Returns current blink state.

Returns
Return value is 1 if segments are enabled, 0 if disabled.

LCD_FreezeEnable()

void LCD_FreezeEnable ( bool enable )
inline

When set, LCD registers will not be updated until cleared.

Parameters
[in] enable When enable is true, update is stopped; when false, all registers are updated.

LCD_SyncBusyGet()

uint32_t LCD_SyncBusyGet ( void )
inline

Returns SYNCBUSY bits, indicating which registers have pending updates.

Returns
Bit fields for LCD registers that have pending updates.

LCD_SyncBusyDelay()

void LCD_SyncBusyDelay ( uint32_t flags )
inline

Polls LCD SYNCBUSY flags, until flag has been cleared.

Parameters
[in] flags Bit fields for LCD registers that will be updated before we continue.

LCD_IntGet()

uint32_t LCD_IntGet ( void )
inline

Get pending LCD interrupt flags.

Returns
Pending LCD interrupt sources. Returns a set of interrupt flags OR-ed together for multiple interrupt sources in the LCD module (LCD_IFS_nnn).

LCD_IntGetEnabled()

uint32_t LCD_IntGetEnabled ( void )
inline

Get enabled and pending LCD interrupt flags.

Useful for handling more interrupt sources in the same interrupt handler.

Note
Event bits are not cleared by the use of this function.
Returns
Pending and enabled LCD interrupt sources. Return value is the bitwise AND combination of
  • the OR combination of enabled interrupt sources in LCD_IEN_nnn register (LCD_IEN_nnn) and
  • the bitwise OR combination of valid interrupt flags of LCD module (LCD_IF_nnn).

LCD_IntSet()

void LCD_IntSet ( uint32_t flags )
inline

Set one or more pending LCD interrupts from SW.

Parameters
[in] flags LCD interrupt sources to set to pending. Use a set of interrupt flags OR-ed together to set multiple interrupt sources for the LCD module (LCD_IFS_nnn).

LCD_IntEnable()

void LCD_IntEnable ( uint32_t flags )
inline

Enable LCD interrupts.

Parameters
[in] flags LCD interrupt sources to enable. Use a set of interrupt flags OR-ed together to set multiple interrupt sources for LCD module (LCD_IFS_nnn).

LCD_IntDisable()

void LCD_IntDisable ( uint32_t flags )
inline

Disable LCD interrupts.

Parameters
[in] flags LCD interrupt sources to disable. Use a set of interrupt flags OR-ed together to disable multiple interrupt sources for LCD module (LCD_IFS_nnn).

LCD_IntClear()

void LCD_IntClear ( uint32_t flags )
inline

Clear one or more interrupt flags.

Parameters
[in] flags LCD interrupt sources to clear. Use a set of interrupt flags OR-ed together to clear multiple interrupt sources for LCD module (LCD_IFS_nnn).

LCD_DSCEnable()

void LCD_DSCEnable ( bool enable )
inline

Enable or disable LCD Direct Segment Control.

Parameters
[in] enable If true, enables LCD controller Direct Segment Control Segment and COM line bias levels need to be set explicitly with LCD_BiasSegmentSet() and LCD_BiasComSet() function calls respectively.

Macro Definition Documentation

LCD_DEFAULT_CLOCK_PRESCALER

#define LCD_DEFAULT_CLOCK_PRESCALER   64

Default Clock Prescaler.

LCD_DEFAULT_FRAME_RATE_DIV

#define LCD_DEFAULT_FRAME_RATE_DIV   4

Default LCD Frame Rate Divisor.

LCD_DEFAULT_CONTRAST

#define LCD_DEFAULT_CONTRAST   15

Default LCD Contrast.

LCD_INIT_DEFAULT

#define LCD_INIT_DEFAULT
Value:
{ \
true, \
lcdMuxQuadruplex, \
lcdBiasOneThird, \
lcdWaveLowPower, \
lcdVLCDSelVDD, \
lcdConConfVLCD, \
}

Default configuration for LCD initialization structure, enables 160 segments.


LCD_FRAME_COUNTER_VAL_MAX

#define LCD_FRAME_COUNTER_VAL_MAX   64

Frame counter uses a maximum of 5 bits (FCTOP[5:0]).

Enumeration Type Documentation

LCD_Mux_TypeDef

MUX setting.

Enumerator
lcdMuxStatic

Static (segments can be multiplexed with LCD_COM[0]).

lcdMuxDuplex

Duplex / 1/2 Duty cycle (segments can be multiplexed with LCD_COM[0:1]).

lcdMuxTriplex

Triplex / 1/3 Duty cycle (segments can be multiplexed with LCD_COM[0:2]).

lcdMuxQuadruplex

Quadruplex / 1/4 Duty cycle (segments can be multiplexed with LCD_COM[0:3]).

lcdMuxSextaplex

Sextaplex / 1/6 Duty cycle (segments can be multiplexed with LCD_COM[0:5]).

lcdMuxOctaplex

Octaplex / 1/6 Duty cycle (segments can be multiplexed with LCD_COM[0:5]).

LCD_Wave_TypeDef

Wave type.

Enumerator
lcdWaveLowPower

Low power optimized waveform output.

lcdWaveNormal

Regular waveform output.

LCD_Bias_TypeDef

Bias setting.

Enumerator
lcdBiasStatic

Static (2 levels).

lcdBiasOneHalf

1/2 Bias (3 levels).

lcdBiasOneThird

1/3 Bias (4 levels).

lcdBiasOneFourth

1/4 Bias (5 levels).

LCD_VLCDSel_TypeDef

VLCD Voltage Source.

Enumerator
lcdVLCDSelVDD

VLCD Powered by VDD.

lcdVLCDSelVExtBoost

VLCD Powered by external VDD / Voltage Boost.

LCD_ConConf_TypeDef

Contrast Configuration.

Enumerator
lcdConConfVLCD

Contrast is adjusted relative to VDD (VLCD).

lcdConConfGND

Contrast is adjusted relative to Ground.

LCD_VBoostLevel_TypeDef

Voltage Boost Level - Data sheets document setting for each part number.

Enumerator
lcdVBoostLevel0

Voltage boost LEVEL0.

lcdVBoostLevel1

Voltage boost LEVEL1.

lcdVBoostLevel2

Voltage boost LEVEL2.

lcdVBoostLevel3

Voltage boost LEVEL3.

lcdVBoostLevel4

Voltage boost LEVEL4.

lcdVBoostLevel5

Voltage boost LEVEL5.

lcdVBoostLevel6

Voltage boost LEVEL6.

lcdVBoostLevel7

Voltage boost LEVEL7.

LCD_FCPreScale_TypeDef

Frame Counter Clock Prescaler, FC-CLK = FrameRate (Hz) / this factor.

Enumerator
lcdFCPrescDiv1

Prescale Div 1.

lcdFCPrescDiv2

Prescale Div 2.

lcdFCPrescDiv4

Prescale Div 4.

lcdFCPrescDiv8

Prescale Div 8.

LCD_SegmentRange_TypeDef

Segment selection.

Enumerator
lcdSegment0_3

Select segment lines 0 to 3.

lcdSegment4_7

Select segment lines 4 to 7.

lcdSegment8_11

Select segment lines 8 to 11.

lcdSegment12_15

Select segment lines 12 to 15.

lcdSegment16_19

Select segment lines 16 to 19.

lcdSegment20_23

Select segment lines 20 to 23.

lcdSegment24_27

Select segment lines 24 to 27.

lcdSegment28_31

Select segment lines 28 to 31.

lcdSegment32_35

Select segment lines 32 to 35.

lcdSegment36_39

Select segment lines 36 to 39.

lcdSegmentAll

Select all segment lines.

LCD_UpdateCtrl_TypeDef

Update Data Control.

Enumerator
lcdUpdateCtrlRegular

Regular update, data transfer done immediately.

lcdUpdateCtrlFCEvent

Data transfer done at Frame Counter event.

lcdUpdateCtrlFrameStart

Data transfer done at Frame Start.


LCD_AnimShift_TypeDef

Animation Shift operation; none, left or right.

Enumerator
lcdAnimShiftNone

No shift.

lcdAnimShiftLeft

Shift segment bits left.

lcdAnimShiftRight

Shift segment bits right.

LCD_AnimLogic_TypeDef

Animation Logic Control, how AReg and BReg should be combined.

Enumerator
lcdAnimLogicAnd

Use bitwise logic AND to mix animation register A (AREGA) and B (AREGB).

lcdAnimLogicOr

Use bitwise logic OR to mix animation register A (AREGA) and B (AREGB).


LCD_AnimLoc_TypeDef

Animation Location, set the LCD segments which animation applies to.

Enumerator
lcdAnimLocSeg0To7

Animation appears on segments 0 to 7.

lcdAnimLocSeg8To15

Animation appears on segments 8 to 15.