查看: 453|回复: 0

在MCX C444 MCU上使用段式液晶显示器(SLCD)控制器

[复制链接]

该用户从未签到

719

主题

6378

帖子

0

超级版主

Rank: 8Rank: 8

积分
25354
最后登录
2025-8-29
发表于 2025-6-30 15:16:28 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2025-6-30 15:15 编辑

MCX C444MCU上使用段式液晶显示器(SLCD)控制器


1 引言
定制段式液晶显示器(SLCD)技术随处可见。例如:
- 用于测量游泳池pH值的产品中。
- 用于测量矿井中特定气体的监测仪中。
- 用于查看儿童是否发烧的体温计中。

SLCD是最古老的显示技术之一,由于其价格最低且功耗最低,至今仍是最受欢迎的技术之一。段式LCD显示器,也称为静态显示器或纯玻璃显示器,由两块氧化铟锡(ITO)玻璃组成,中间夹有扭曲向列型流体。静态显示器是一种段式显示器,每个段都有一个引脚。段可以是任何可以独立开启和关闭的线条、点或符号。

NXP MCX C444 MCU集成了一个SLCD控制器模块,该模块具有多达8个背板和47个前板,如8×474×51。本文档介绍了通过启用SLCD设备S401M16KR来使用片上SLCD控制器的方法,该设备是一款四位0.17英寸七段定制LCD面板。


2 硬件
2.1 S401M16KR SLCD设备
S401M16KR SLCD设备在面板上显示四位数字。每个数字由七个段和一个点或冒号显示,如图1所示。
图片1.png
1. S401M16KRSLCD 设备

S401M16KR SLCD设备包含四个COM引脚和八个DATA引脚作为控制信号。COM引脚和数据引脚控制一个矩阵,该矩阵指示在特定时间哪些段是开启的,哪些是关闭的,如表1所示。

1. S401M16KRSLCD 设备
  
PIN
  
1
2
3
4
5
6
7
8
9
10
11
12
COM0
COM0
/
/
/
1D
DP1
2D
DP2
3D
DP3
4D
COL
COM1
/
COM1
/
/
1E
1C
2E
2C
3E
3C
4E
4C
COM2
/
/
COM2
/
1G
1B
2G
2B
3G
3B
4G
4B
COM3
/
/
/
COM3
1F
1A
2F
2A
3F
3A
4F
4A


COM引脚按步骤逐一启用。在每个步骤中,通过各自的COM引脚激活,八个数据引脚输出控制电平信号来开启和关闭段。每个COM的段逐行开启和关闭。当四个步骤的循环快速运行时,一些段会被视为一起开启,形成一个整体的显示视图(即使它们在矩阵中不在同一行)。

将控制信号视为激活矩阵,见表2
2. 控制信号的激活矩阵
  
nCS
  
D0
D1
D2
D3
D4
D5
D6
D7
COM0
1D
1DP
2D
2DP
3D
3DP
4D
4DP
COM1
1E
1C
2E
2C
3E
3C
4E
4C
COM2
1G
1B
2G
2B
3G
3B
4G
4B
COM3
1F
1A
2F
2A
3F
3A
4F
4A

对于每个数字位置,不同的数字由不同的段组成。图2以直接段方式显示了0-9的数字。
图片2.png
2. slcd数字

3. slcd数字信息
  
Number
  
Segment
COM0  (.D)
COM1  (CE)
COM2  (BG)
COM3  (AF)
0
ABCDEF
*D (0x1)
CE (0x3)
B* (0x2)
AF (0x3)
1
BC
** (0x0)
C* (0x2)
B* (0x2)
** (0x0)
2
ABDEG
*D (0x1)
*E (0x1)
BG (0x3)
A* (0x2)
3
ABCDG
*D (0x1)
C* (0x2)
BG (0x3)
A* (0x2)
4
BCFG
** (0x0)
C* (0x2)
BG (0x3)
*F (0x1)
5
ACDFG
*D (0x1)
C* (0x2)
*G (0x1)
AF (0x3)
6
ACDEFG
*D (0x1)
CE (0x3)
*G (0x1)
AF (0x3)
7
ABC
** (0x0)
C* (0x2)
B* (0x2)
A* (0x2)
8
ABCDEFG
*D (0x1)
CE (0x3)
BG (0x3)
AF (0x3)
9
ABCDFG
*D (0x1)
C* (0x2)
BG (0x3)
AF (0x3)
None
** (0x0)
** (0x0)
** (0x0)
** (0x0)
Dot
DP
.* (0x2)
** (0x0)
** (0x0)
** (0x0)

如表3所示,我们可以获得在每个由指定COMx引脚激活的周期内显示不同数字的代码。源文件中有代码数组:

#define SLCD_ON_SHOW_COUNT 11u
const uint8_t SLCD_NUMBER_TABLE[][SLCD_COMx_COUNT] =
/* COM0, COM1, COM2, COM3 */
{ 0x1, 0x3, 0x2, 0x3 }, /* 显示数字0 */
{ 0x0, 0x2, 0x2, 0x0 }, /* 显示数字1 */
{ 0x1, 0x1, 0x3, 0x2 }, /* 显示数字2 */
{ 0x1, 0x2, 0x3, 0x2 }, /* 显示数字3 */
{ 0x0, 0x2, 0x3, 0x1 }, /* 显示数字4 */
{ 0x1, 0x2, 0x1, 0x3 }, /* 显示数字5 */
{ 0x1, 0x3, 0x1, 0x3 }, /* 显示数字6 */
{ 0x0, 0x2, 0x2, 0x2 }, /* 显示数字7 */
{ 0x1, 0x3, 0x3, 0x3 }, /* 显示数字8 */
{ 0x1, 0x2, 0x3, 0x3 }, /* 显示数字9 */
{ 0x0, 0x0, 0x0, 0x0 }, /* 不显示 */
{ 0x2, 0x0, 0x0, 0x0 }, /* 显示小数点 */
};
注意:
每个数字仅包含两个引脚。四位并行可通过八个引脚扩展复制。以下部分介绍四位的用法。


2.2 FRDM-MCXC444开发板
FRDM-MCXC444开发板上,SLCD设备通过引脚连接到MCU。原理图如图3所示。
图片3.png
3. SLCD连接

4 展示了关于引脚设置的功能信息。
4. 引脚设置的功能信息
  
Functional  ID
  
SLCD  pin
MCU pin
ALT
Comments
LCD-01
P59
PTE20
ALT0
COM0
LCD-02
P60
PTE21
ALT0
COM1
LCD-03
P14
PTB18
ALT0
COM2
LCD-04
P15
PTB19
ALT0
COM3
LCD-05
P20
PTC0
ALT0
D0
LCD-06
P24
PTC4
ALT0
D1
LCD-07
P26
PTC5
ALT0
D2
LCD-08
P27
PTC6
ALT0
D3
LCD-09
P40
PTD0
ALT0
D4
LCD-10
P42
PTD2
ALT0
D5
LCD-11
P43
PTD3
ALT0
D6
LCD-12
P44
PTD4
ALT0
D7

数据信号被视为总线,由八个独立的引脚组成,命名为D0D7。对这些信号进行编码以控制它们,每个引脚的信号通过总线被视为一个整体数据。

为了像总线一样操作所有控制信号,在源代码中,信号索引被排列成两个数组:
/* 定义同步总线和数据总线。 */
#define SLCD_COMx_COUNT 4u
#define SLCD_DATA_BUS_WIDTH 8u /* 定义同步总线和数据总线的引脚。 */
const uint8_t SLCD_PIN_COMx[SLCD_COMx_COUNT] = {
    59, /* COM0. */
    60, /* COM1. */
    14, /* COM2. */
    15  /* COM3. */
};
const uint8_t SLCD_PIN_DATA[SLCD_DATA_BUS_WIDTH] = {
    20, /* D0. */
    24, /* D1. */
    26, /* D2. */
    27, /* D3. */
    40, /* D4. */
    42, /* D5. */
    43, /* D6. */
    44  /* D7. */
};


3 基本用法
MCX C444上的SLCD控制器易于使用。启用时钟并设置引脚复用功能后,对于没有闪烁和故障检测功能的基本用法,只需一个控制寄存器,即LCD通用控制寄存器(LCD_GCR),即可初始化控制器。以下提供一组典型设置:

/* 配置SLCD控制器。 */
LCD->GCR = LCD_GCR_DUTY(3)       /* 选择LCD控制器的占空比。3:4COMx线。 */
          |LCD_GCR_LCLK(2)       /* 时钟源的时钟分频器。0-7 */
          |LCD_GCR_SOURCE(0)     /* LCD时钟源。1:使用MCGIRCLK0:OSC32K */
          |LCD_GCR_LCDEN(0)      /* 设置期间禁用控制器。 */
          |LCD_GCR_LCDSTP(0)     /* STOP模式下保持LCD模块运行。 */
          | LCD_GCR_FFR(0)        /* 选择帧速率模式。0:标准帧速率。 */
          |LCD_GCR_LCDDOZE(1)    /* DOZE模式下保持LCD模块运行。 */
          |LCD_GCR_ALTSOURCE(0)  /* 选择备用时钟源。使用默认时钟源时不可用。*/
          |LCD_GCR_ALTDIV(0)      /*备用时钟源的时钟分频器。使用默认时钟时不可用。*/
          |LCD_GCR_FDCIEN(0)     /* 故障检测完成时启用LCD中断事件。 */
          |LCD_GCR_PADSAFE(0)    /* 强制LCD焊盘控制处于安全状态,锁定所有LCD控制位。 */
          |LCD_GCR_VSUPPLY(0)    /* 选择电源电压。0:来自内部Vdd */
          |LCD_GCR_LADJ(1)       /* 配置SLCD以处理不同的LCD玻璃电容。 */
          |LCD_GCR_CPSEL(1)      /* 选择LCD控制器电荷泵或电阻网络来提供LCD电压V_LLx */
          |LCD_GCR_RVTRIM(8)     /* 调节电压微调。禁用时不可用。 */
          |LCD_GCR_RVEN(0);      /* 调节电压使能。禁用。 */

MCU上的引脚必须映射到SLCD控制总线的COMx信号和Dx信号。
- COMx信号的映射配置为背板引脚。
- Dx信号的映射配置为前板引脚。
- 使用的引脚通过LCD引脚使能寄存器(LCD_PEN0LCD_PEN1)、LCD背板使能寄存器(LCD_BPEN0LCD_BPEN1)初始化,其中LCD_PENx启用所有使用的引脚,LCD_BPENx将它们选择为前板或背板。
- LCD_WF8Bx寄存器用于每个引脚的信号时序序列。

以下描述LCD_WF8Bx寄存器的用法:
- LCD_WF8Bx数组中的每个寄存器对应一个LCD信号引脚。数组的索引也对应SLCD模块的功能引脚。例如,LCD_WF8B[59]对应SLCD模块的信号引脚LCD_P59
- LCD_WF8Bx寄存器中的每个位对应步骤1,而位的索引也对应步骤1。例如,LCD_WF8B[59]中的位2对应整个周期(包括四个步骤或八个步骤)中步骤2LCD_P59的状态。

在软件中,控制数据信号与硬件略有不同。软件首先搜索并行引脚的数据,然后安排数据时序序列。然而,硬件首先搜索每个引脚的数据时序,然后将并行引脚组装成8位宽的总线。因此,在源代码项目中设计了一个转换函数。

/* @brief SLCD控制总线上设置数据
* @param com_idx 步骤(COMx)的索引,0-3
* @param show_dat 当前步骤发送到总线的显示代码。
*/
void slcd_set_bus_data(uint8_t com_idx, uint8_t show_dat) {
    uint8_t bit_mask =(1u << com_idx);
    for (uint8_t i =0u; i < SLCD_DATA_BUS_WIDTH; i++) {
        if (show_dat& 0x1) {
            LCD->WF8B[SLCD_PIN_DATA]|= bit_mask;
        } else {
           LCD->WF8B[SLCD_PIN_DATA] &= ~bit_mask;
        }
        show_dat>>= 1u;
    }
}

创建了一个API函数,用于将段代码组装成四位的显示矩阵。有了这个API,就不需要复杂的矩阵转换。您只需告诉MCU您想显示什么数字以及想在哪个位置显示,因为软件会自动处理所有转换。

/* 在矩阵中保留不变的显示代码。 */
static uint8_t slcd_on_show_numbers[SLCD_COMx_COUNT];

/**
* @brief SLCD设备的数字位置设置显示数字。
* @param index 数字位置的索引,0-3
* @param number 要显示的数字值,0-10,其中10表示
* @param en_dp 启用在当前数字位置显示小数点,truefalse
*/
void slcd_set_number(uint8_t index, uint8_t number, boolen_dp) {
    uint8_t tmp8 = 0u;
    for (uint8_t i =0u; i < SLCD_COMx_COUNT; i++) {
        tmp8 =slcd_on_show_numbers & (~(0x3 << (2 * index))); /* 清除旧的设置代码。 */
        tmp8 |=(SLCD_NUMBER_TABLE[number] << (2 * index)); /* 添加新的设置代码。 */
        if (en_dp) {
            tmp8 |=SLCD_NUMBER_TABLE[SLCD_ON_SHOW_NUMBER_DP] << (2 * index); /* 添加小数点的新设置。 */
        }
       slcd_on_show_numbers = tmp8;
        slcd_set_bus_data(i,slcd_on_show_numbers);
    }
}
在应用程序的main()函数中,在目标SLCD上显示变化数字的源代码如下:

int main(void) {
    bool en_dp;

    /* 初始化开发板硬件。 */
    BOARD_InitPins();
   BOARD_BootClockRUN();
   BOARD_InitDebugConsole();

    PRINTF("slcd基本示例。\r\n");

    /* 初始化SLCD的时钟和引脚,配置SLCD控制器。 */
    slcd_init();

    en_dp = false;

    while (1) {
        for (uint8_t i= 0u; i < SLCD_ON_SHOW_COUNT; i++) {
            GETCHAR();

           slcd_stop(); /* 在更新显示之前停止SLCD控制器。 */
            slcd_set_number(0,i, en_dp);
           slcd_set_number(1, (i+1)%SLCD_ON_SHOW_COUNT, en_dp);
           slcd_set_number(2, (i+2)%SLCD_ON_SHOW_COUNT, en_dp);
           slcd_set_number(3, (i+3)%SLCD_ON_SHOW_COUNT, en_dp);
           slcd_start();

            en_dp =!en_dp;
        }
    }
}
下载项目并在FRDM-MCXC444开发板上运行。数字将显示在SLCD上,如图4所示。
图片4.png
4.FRDM-MCXC444 SLCD


4 低功耗模式下的用法
在带有SLCD控制器的MCU上,SLCD控制器特别受到一些超低功耗STOP模式的支持。在这些模式下,几乎所有硬件都断电至相同的能量水平。SLCD控制器控制其引脚刷新SLCD设备,以使其在面板上保持显示。

除了VLLS0模式外,SLCD几乎可以在所有电源模式下工作。有关详细信息,请参阅用户手册中的电源管理章节。

5 低功耗模式下的slcd
  
Modules
  
VLPR
VLPW
Stop
VLPS
LLS
VLLSx
Segment LCD
CPO中的FF异步操作
FF
PSTOP2中的异步操作FF
异步操作
异步操作
步操作,VLLS0中关闭

确保SLCD在低功耗模式下工作的关键设置是:
- 时钟源:确保SLCD控制器的时钟源在目标低功耗模式下仍然有效。例如,如果SLCD控制器的时钟源是32 K OSC,则该时钟源在每个模式下都启用,即使在VLLSx模式下也是如此。
- 引脚复用:确保SLCD控制器使用的引脚配置为模拟功能(ALT0),并且其他(数字)功能的引脚在VLLSx模式下被锁定(电压电平不能改变)。只有当SLCD控制器的引脚处于活动状态时,SLCD控制器才会输出波形,SLCD面板才会保持显示数字。
- SLCD控制器的低功耗模式:通过将LCD_GCR[LCDSTP]位和LCD_GCR[LCDDOZE]位设置为0,启用SLCD控制器的低功耗支持,以确保SLCD控制器在STOPWAIT模式下仍然工作。

完成上述参数设置后,设置SLCD控制器进行显示,然后进入低功耗STOP模式。在低功耗STOP模式下,SLCD面板上的显示处于开启状态,因为SLCD控制器仍在输出刷新波形。

在图5所示的示例项目中,在VLLS3模式下,RTCSLCD控制器运行时,FRDM-MCX C444开发板上的测量电流低至约19 µA
图片5.png
5. SLCD 低功耗显示


5 结论
本文档介绍了MCXC444 MCU上片上SLCD控制器的基本用法,并提供了基于FRDM-MCXC444开发板的示例项目。通过在硬件上进行适当的配置,SLCD控制器可以控制SLCD设备自动在其面板上显示内容。即使在低功耗模式下,SLCD控制器仍然可以以极低的能耗工作。这表明带有片上SLCD控制器的MCX C444可以用于对能量敏感的应用领域。


6 参考链接

在MCX C444 MCU上使用段式液晶显示器.pdf

425.46 KB, 下载次数: 3, 下载积分: 威望 1

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-8-31 20:27 , Processed in 0.073117 second(s), 19 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表