在线时间110 小时
UID3332856
注册时间2016-11-28
NXP金币382
TA的每日心情 | 擦汗 2024-11-7 09:48 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
金牌会员
 
- 积分
- 1267
- 最后登录
- 2025-9-17
|
1. 使用SLCD
本开发板上使用的是段码液晶SLCD,本开发板使用12个GPIO引脚来实现模拟控制。连接引脚如下,
上图中显示了不同的引脚对应的功能,这些引脚都设置为输出控制。
如何用12个引脚控制4个段码,在下面进行说明。
2. SLCD说明
根据LCD-S401M16KR Lumex Opto/Components Inc.上面的说明,每个字符由7段组成,同时还有一个小数点,由一个共同的接地极组成。总共8个额外的引脚和这四个共地极进行组合,形成组合码表,如下
这个对应的组合方式就是编程的基础。
3. 代码解析
范例代码其实就是对于GPIO组合控制的输出,封装在slcd库中。首先定义12个引脚,4个连接作为共地极,其他8个引脚作为GPIO的输出,首先设定,然后组合控制就可以。
以下是8个GPIO输出极设定
- const uint8_t slcd_lcd_gpio_seg_pin[] = {
- 20, /* SLCD P05 --- LCD_P20. */
- 24, /* SLCD P06 --- LCD_P24. */
- 26, /* SLCD P07 --- LCD_P26. */
- 27, /* SLCD P08 --- LCD_P27. */
- 40, /* SLCD P09 --- LCD_P40. */
- 42, /* SLCD P10 --- LCD_P42. */
- 43, /* SLCD P11 --- LCD_P43. */
- 44, /* SLCD P12 --- LCD_P44. */
- };
复制代码 用循环的方式设定这个8个为输出
- for (i = 0; i < 8; ++i)
- {
- bit_val = (uint8_t)(pin_val >> i) & 0x1U;
- if (bit_val)
- {
- SLCD_SetFrontPlaneOnePhase(LCD, gpio_pin, (slcd_phase_index_t)i, on);
- }
- }
复制代码
以下是共地极,
- void BOARD_SetSlcdBackPlanePhase(void)
- {
- SLCD_SetBackPlanePhase(LCD, 59, kSLCD_PhaseAActivate); /* SLCD COM1 --- LCD_P59. */
- SLCD_SetBackPlanePhase(LCD, 60, kSLCD_PhaseBActivate); /* SLCD COM2 --- LCD_P60. */
- SLCD_SetBackPlanePhase(LCD, 14, kSLCD_PhaseCActivate); /* SLCD COM3 --- LCD_P14. */
- SLCD_SetBackPlanePhase(LCD, 15, kSLCD_PhaseDActivate); /* SLCD COM4 --- LCD_P15. */
- }
复制代码 字符输出是封装为产权所有的库,在keil可以看到锁的符号,只是开放了h头文件用来开放访问
直接可以显示字符和数码段
进入主程序,就是初始化以及调用函数的过程,就是比较轻松易读了。
- int main(void)
- {
- slcd_config_t config;
- BOARD_InitPins();
- BOARD_BootClockRUN();
- BOARD_InitDebugConsole();
- MCG->C1 |= MCG_C1_IRCLKEN_MASK;
- PRINTF("\r\nSLCD Example Starts.\r\n");
- SLCD_GetDefaultConfig(&config);
- config.clkConfig = &slcdClkConfig;
- config.loadAdjust = kSLCD_HighLoadOrSlowestClkSrc;
- config.dutyCycle = APP_SLCD_DUTY_CYCLE;
- config.slcdLowPinEnabled = APP_SLCD_LOW_PIN_ENABLED;
- config.slcdHighPinEnabled = APP_SLCD_HIGH_PIN_ENABLED;
- config.backPlaneLowPin = APP_SLCD_BACK_PANEL_LOW_PIN;
- config.backPlaneHighPin = APP_SLCD_BACK_PANEL_HIGH_PIN;
- config.faultConfig = NULL;
- SLCD_Init(LCD, &config);
- BOARD_SetSlcdBackPlanePhase();
- memset(&slcdEngine, 0, sizeof(tSLCD_Engine));
- SLCD_Engine_Init(&slcdEngine, SLCD_SetLCDPin);
- SLCD_StartDisplay(LCD);
- SLCD_Show_Digital();
- SLCD_Show_Icon();
- SLCD_Blink();
- PRINTF("\r\nSLCD Stops Display.\r\n");
- SLCD_StopDisplay(LCD);
- }
复制代码
4. 小结
运行后的结果如下
成功显示完成。
|
|