查看: 701|回复: 0

【MCXC444分享】使用SLCD

[复制链接]
  • TA的每日心情
    擦汗
    2024-11-7 09:48
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    35

    主题

    83

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1267
    最后登录
    2025-9-17
    发表于 2024-11-5 13:43:24 | 显示全部楼层 |阅读模式
    1. 使用SLCD
    本开发板上使用的是段码液晶SLCD,本开发板使用12个GPIO引脚来实现模拟控制。连接引脚如下,
    Capture.PNG
    上图中显示了不同的引脚对应的功能,这些引脚都设置为输出控制。
    如何用12个引脚控制4个段码,在下面进行说明。

    2. SLCD说明
    根据LCD-S401M16KR Lumex Opto/Components Inc.上面的说明,每个字符由7段组成,同时还有一个小数点,由一个共同的接地极组成。总共8个额外的引脚和这四个共地极进行组合,形成组合码表,如下
    Capture.PNG
    Capture.PNG
    这个对应的组合方式就是编程的基础。
    3. 代码解析
    范例代码其实就是对于GPIO组合控制的输出,封装在slcd库中。首先定义12个引脚,4个连接作为共地极,其他8个引脚作为GPIO的输出,首先设定,然后组合控制就可以。
    以下是8个GPIO输出极设定
    1. const uint8_t slcd_lcd_gpio_seg_pin[] = {
    2.     20, /* SLCD P05 --- LCD_P20. */
    3.     24, /* SLCD P06 --- LCD_P24. */
    4.     26, /* SLCD P07 --- LCD_P26. */
    5.     27, /* SLCD P08 --- LCD_P27. */
    6.     40, /* SLCD P09 --- LCD_P40. */
    7.     42, /* SLCD P10 --- LCD_P42. */
    8.     43, /* SLCD P11 --- LCD_P43. */
    9.     44, /* SLCD P12 --- LCD_P44. */
    10. };
    复制代码
    用循环的方式设定这个8个为输出
    1. for (i = 0; i < 8; ++i)
    2.         {
    3.             bit_val = (uint8_t)(pin_val >> i) & 0x1U;
    4.             if (bit_val)
    5.             {
    6.                 SLCD_SetFrontPlaneOnePhase(LCD, gpio_pin, (slcd_phase_index_t)i, on);
    7.             }
    8.         }
    复制代码

    以下是共地极,
    1. void BOARD_SetSlcdBackPlanePhase(void)
    2. {
    3.     SLCD_SetBackPlanePhase(LCD, 59, kSLCD_PhaseAActivate); /* SLCD COM1 --- LCD_P59. */
    4.     SLCD_SetBackPlanePhase(LCD, 60, kSLCD_PhaseBActivate); /* SLCD COM2 --- LCD_P60. */
    5.     SLCD_SetBackPlanePhase(LCD, 14, kSLCD_PhaseCActivate); /* SLCD COM3 --- LCD_P14. */
    6.     SLCD_SetBackPlanePhase(LCD, 15, kSLCD_PhaseDActivate); /* SLCD COM4 --- LCD_P15. */
    7. }
    复制代码
    字符输出是封装为产权所有的库,在keil可以看到锁的符号,只是开放了h头文件用来开放访问
    Capture.PNG
    直接可以显示字符和数码段
    进入主程序,就是初始化以及调用函数的过程,就是比较轻松易读了。
    1. int main(void)
    2. {
    3.     slcd_config_t config;
    4.     BOARD_InitPins();
    5.     BOARD_BootClockRUN();
    6.     BOARD_InitDebugConsole();
    7.     MCG->C1 |= MCG_C1_IRCLKEN_MASK;

    8.     PRINTF("\r\nSLCD Example Starts.\r\n");
    9. SLCD_GetDefaultConfig(&config);
    10.     config.clkConfig          = &slcdClkConfig;
    11.     config.loadAdjust         = kSLCD_HighLoadOrSlowestClkSrc;
    12.     config.dutyCycle          = APP_SLCD_DUTY_CYCLE;
    13.     config.slcdLowPinEnabled  = APP_SLCD_LOW_PIN_ENABLED;
    14.     config.slcdHighPinEnabled = APP_SLCD_HIGH_PIN_ENABLED;
    15.     config.backPlaneLowPin    = APP_SLCD_BACK_PANEL_LOW_PIN;
    16.     config.backPlaneHighPin   = APP_SLCD_BACK_PANEL_HIGH_PIN;
    17. config.faultConfig = NULL;
    18.     SLCD_Init(LCD, &config);
    19.     BOARD_SetSlcdBackPlanePhase();
    20.     memset(&slcdEngine, 0, sizeof(tSLCD_Engine));
    21.     SLCD_Engine_Init(&slcdEngine, SLCD_SetLCDPin);

    22.     SLCD_StartDisplay(LCD);

    23.     SLCD_Show_Digital();

    24.     SLCD_Show_Icon();

    25.     SLCD_Blink();

    26.     PRINTF("\r\nSLCD Stops Display.\r\n");

    27.     SLCD_StopDisplay(LCD);
    28. }
    复制代码

    4. 小结
    运行后的结果如下
    Capture.PNG

    screenshot-1730785372022.png
    成功显示完成。


    该会员没有填写今日想说内容.
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-9-19 06:56 , Processed in 0.082825 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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