LCD - Liquid Crystal Display#

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.

Modules#

LCD_AnimInit_TypeDef

LCD_FrameCountInit_TypeDef

LCD_Init_TypeDef

Enumerations#

enum
lcdMuxStatic = LCD_DISPCTRL_MUX_STATIC
lcdMuxDuplex = LCD_DISPCTRL_MUX_DUPLEX
lcdMuxTriplex = LCD_DISPCTRL_MUX_TRIPLEX
lcdMuxQuadruplex = LCD_DISPCTRL_MUX_QUADRUPLEX
lcdMuxSextaplex = LCD_DISPCTRL_MUX_SEXTAPLEX
lcdMuxOctaplex = LCD_DISPCTRL_MUX_OCTAPLEX
}

MUX setting.

enum
lcdWaveLowPower = LCD_DISPCTRL_WAVE_LOWPOWER
lcdWaveNormal = LCD_DISPCTRL_WAVE_NORMAL
}

Wave type.

enum
lcdBiasStatic = LCD_DISPCTRL_BIAS_STATIC
lcdBiasOneHalf = LCD_DISPCTRL_BIAS_ONEHALF
lcdBiasOneThird = LCD_DISPCTRL_BIAS_ONETHIRD
lcdBiasOneFourth = LCD_DISPCTRL_BIAS_ONEFOURTH
}

Bias setting.

enum
lcdModeNoExtCap = LCD_DISPCTRL_MODE_NOEXTCAP
lcdModeStepDown = LCD_DISPCTRL_MODE_STEPDOWN
lcdModeCpIntOsc = LCD_DISPCTRL_MODE_CPINTOSC
}

Contrast Configuration.

enum
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
lcdUpdateCtrlRegular = LCD_CTRL_UDCTRL_REGULAR
lcdUpdateCtrlFCEvent = LCD_CTRL_UDCTRL_FCEVENT
lcdUpdateCtrlFrameStart = LCD_CTRL_UDCTRL_FRAMESTART
}

Update Data Control.

enum
lcdAnimShiftNone = _LCD_BACTRL_AREGASC_NOSHIFT
lcdAnimShiftLeft = _LCD_BACTRL_AREGASC_SHIFTLEFT
lcdAnimShiftRight = _LCD_BACTRL_AREGASC_SHIFTRIGHT
}

Animation Shift operation; none, left or right.

enum
lcdAnimLogicAnd = LCD_BACTRL_ALOGSEL_AND
lcdAnimLogicOr = LCD_BACTRL_ALOGSEL_OR
}

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

enum
lcdAnimLocSeg0To7 = LCD_BACTRL_ALOC_SEG0TO7
lcdAnimLocSeg8To15 = LCD_BACTRL_ALOC_SEG8TO15
}

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

enum
lcdChargeRedistributionDisable = LCD_DISPCTRL_CHGRDST_DISABLE
lcdChargeRedistributionEnable = LCD_DISPCTRL_CHGRDST_ONE
lcdChargeRedistributionTwoCycle = LCD_DISPCTRL_CHGRDST_TWO
lcdChargeRedistributionThreeCycle = LCD_DISPCTRL_CHGRDST_THREE
lcdChargeRedistributionFourCycle = LCD_DISPCTRL_CHGRDST_FOUR
}

Charge redistribution control.

Functions#

void
LCD_Init(const LCD_Init_TypeDef *lcdInit)

Initialize the Liquid Crystal Display (LCD) controller.

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_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_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_ModeSet(LCD_Mode_Typedef mode)

Configure the mode for the LCD panel.

void

Configure the charge redistribution cycles for the LCD panel.

void
LCD_Enable(bool enable)

Enable or disable LCD controller.

void
LCD_AnimEnable(bool enable)

Enable or disable LCD Animation feature.

void
LCD_BlinkEnable(bool enable)

Enable or disable the LCD blink.

void
LCD_BlankEnable(bool enable)

Disable all segments while keeping segment state.

void

Enable or disable LCD Frame counter.

int

Return the current animation state.

int

Return the current blink state.

void
LCD_FreezeEnable(bool enable)

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

uint32_t

Return SYNCBUSY bits, indicating which registers have pending updates.

void
LCD_SyncBusyDelay(uint32_t flags)

Poll LCD SYNCBUSY flags until the flag has been cleared.

uint32_t

Get pending LCD interrupt flags.

uint32_t

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_FRAME_COUNTER_VAL_MAX 64

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

#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 undefined

Default configuration for LCD initialization structure, enables 160 segments.

Enumeration Documentation#

LCD_Mux_TypeDef#

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/8 Duty cycle (segments can be multiplexed with LCD_COM[0:7]).


LCD_Wave_TypeDef#

LCD_Wave_TypeDef

Wave type.

Enumerator
lcdWaveLowPower

Low power optimized waveform output.

lcdWaveNormal

Regular waveform output.


LCD_Bias_TypeDef#

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_Mode_Typedef#

LCD_Mode_Typedef

Contrast Configuration.

Mode of operation.

Enumerator
lcdModeNoExtCap

No external capacitor.

lcdModeStepDown

External cap with resistor string.

lcdModeCpIntOsc

External cap and internal oscillator.


LCD_FCPreScale_TypeDef#

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_UpdateCtrl_TypeDef#

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#

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#

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#

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.


LCD_ChargeRedistribution_TypeDef#

LCD_ChargeRedistribution_TypeDef

Charge redistribution control.

Enumerator
lcdChargeRedistributionDisable

Disable charge redistribution.

lcdChargeRedistributionEnable

Use 1 prescaled low frequency clock cycle for charge redistribution.

lcdChargeRedistributionTwoCycle

Use 2 prescaled low frequency clock cycle for charge redistribution.

lcdChargeRedistributionThreeCycle

Use 3 prescaled low frequency clock cycle for charge redistribution.

lcdChargeRedistributionFourCycle

Use 4 prescaled low frequency clock cycle for charge redistribution.


Function Documentation#

LCD_Init#

void LCD_Init (const LCD_Init_TypeDef * lcdInit)

Initialize the Liquid Crystal Display (LCD) controller.

Parameters
TypeDirectionArgument NameDescription
const LCD_Init_TypeDef *[in]lcdInit

A pointer to the initialization structure which configures the LCD controller.

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


LCD_UpdateCtrl#

void LCD_UpdateCtrl (LCD_UpdateCtrl_TypeDef ud)

Configure Update Control.

Parameters
TypeDirectionArgument NameDescription
LCD_UpdateCtrl_TypeDef[in]ud

Configures the LCD update method.


LCD_FrameCountInit#

void LCD_FrameCountInit (const LCD_FrameCountInit_TypeDef * fcInit)

Initialize the LCD Frame Counter.

Parameters
TypeDirectionArgument NameDescription
const LCD_FrameCountInit_TypeDef *[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
TypeDirectionArgument NameDescription
const LCD_AnimInit_TypeDef *[in]animInit

A pointer to the LCD Animation initialization structure.


LCD_SegmentSet#

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

Turn on or clear a segment.

Parameters
TypeDirectionArgument NameDescription
int[in]com

A COM line to change.

int[in]bit

A bit index indicating which field to change.

bool[in]enable

True will set segment, false will clear 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. For the Series 2 Family, the maximum configuration is 4x20. For the Series 2 xG28, the maximum configuration is 8x24 or 4x28.


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
TypeDirectionArgument NameDescription
int[in]com

Indicates a COM line to update.

uint32_t[in]mask

A bit mask for segments 0-31.

uint32_t[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
TypeDirectionArgument NameDescription
int[in]com

Indicates a COM line to update.

uint32_t[in]mask

A bit mask for segments 32-39.

uint32_t[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
TypeDirectionArgument NameDescription
int[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
TypeDirectionArgument NameDescription
LCD_Bias_TypeDef[in]bias

The bias level.


LCD_BiasSegmentSet#

void LCD_BiasSegmentSet (int segmentLine, int biasLevel)

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

Parameters
TypeDirectionArgument NameDescription
int[in]segmentLine

A segment line number.

int[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.

Note

  • When DSC is active, each configuration takes up 4 bits in the corresponding Segment Registers (SEGD0L/SEGD1H for Series 0 and 1, SEGDx/SEGDxH 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.


LCD_BiasComSet#

void LCD_BiasComSet (int comLine, int biasLevel)

Configure the bias level for a specific segment line.

Parameters
TypeDirectionArgument NameDescription
int[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.

int[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.

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.


LCD_ModeSet#

void LCD_ModeSet (LCD_Mode_Typedef mode)

Configure the mode for the LCD panel.

Parameters
TypeDirectionArgument NameDescription
LCD_Mode_Typedef[in]mode

A mode.


LCD_ChargeRedistributionCyclesSet#

void LCD_ChargeRedistributionCyclesSet (uint8_t cycles)

Configure the charge redistribution cycles for the LCD panel.

Parameters
TypeDirectionArgument NameDescription
uint8_t[in]cycles

Charge redistribution cycles, range 0-4.


LCD_Enable#

void LCD_Enable (bool enable)

Enable or disable LCD controller.

Parameters
TypeDirectionArgument NameDescription
bool[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)

Enable or disable LCD Animation feature.

Parameters
TypeDirectionArgument NameDescription
bool[in]enable

Boolean true enables animation, false disables animation.


LCD_BlinkEnable#

void LCD_BlinkEnable (bool enable)

Enable or disable the LCD blink.

Parameters
TypeDirectionArgument NameDescription
bool[in]enable

Boolean true enables blink, false disables blink.


LCD_BlankEnable#

void LCD_BlankEnable (bool enable)

Disable all segments while keeping segment state.

Parameters
TypeDirectionArgument NameDescription
bool[in]enable

Boolean true clears all segments, boolean false restores all segment lines.


LCD_FrameCountEnable#

void LCD_FrameCountEnable (bool enable)

Enable or disable LCD Frame counter.

Parameters
TypeDirectionArgument NameDescription
bool[in]enable

Boolean true enables frame counter, false disables frame counter.


LCD_AnimState#

int LCD_AnimState (void )

Return the current animation state.

Parameters
TypeDirectionArgument NameDescription
voidN/A

Returns

  • Animation state, in range 0-15.


LCD_BlinkState#

int LCD_BlinkState (void )

Return the current blink state.

Parameters
TypeDirectionArgument NameDescription
voidN/A

Returns

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


LCD_FreezeEnable#

void LCD_FreezeEnable (bool enable)

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

Parameters
TypeDirectionArgument NameDescription
bool[in]enable

When enable is true, update is stopped; when false, all registers are updated.


LCD_SyncBusyGet#

uint32_t LCD_SyncBusyGet (void )

Return SYNCBUSY bits, indicating which registers have pending updates.

Parameters
TypeDirectionArgument NameDescription
voidN/A

Returns

  • Bit fields for LCD registers that have pending updates.


LCD_SyncBusyDelay#

void LCD_SyncBusyDelay (uint32_t flags)

Poll LCD SYNCBUSY flags until the flag has been cleared.

Parameters
TypeDirectionArgument NameDescription
uint32_t[in]flags

Bit fields for LCD registers that will be updated before we continue.


LCD_IntGet#

uint32_t LCD_IntGet (void )

Get pending LCD interrupt flags.

Parameters
TypeDirectionArgument NameDescription
voidN/A

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 )

Get enabled and pending LCD interrupt flags.

Parameters
TypeDirectionArgument NameDescription
voidN/A

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)

Set one or more pending LCD interrupts from SW.

Parameters
TypeDirectionArgument NameDescription
uint32_t[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)

Enable LCD interrupts.

Parameters
TypeDirectionArgument NameDescription
uint32_t[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)

Disable LCD interrupts.

Parameters
TypeDirectionArgument NameDescription
uint32_t[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)

Clear one or more interrupt flags.

Parameters
TypeDirectionArgument NameDescription
uint32_t[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)

Enable or disable LCD Direct Segment Control.

Parameters
TypeDirectionArgument NameDescription
bool[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.