EVB-L0136开发板段码LCD屏使用
概要
前段时间通过iceasy 商城样片申请收到了萤火工厂的 24GHz 毫米波雷达模块CEM5826-M11
和灵动微的EVB-L0136
开发板,今天将雷达模块接入开发板并使用板载段码 LCD 屏对雷达数据进行展示,学习和理解段码 LCD 屏。
接线图展示
用到的器件
- EVB-0136(MM32L0136C7P)开发板
- CEM5826-M11 雷达模块
- daplink 烧录器 + 串口输出
daplink 到开发板 CN7 SWD 接线
- SWD -> SWD IO(SWD 7 号引脚)
- CLK -> SWC LK(SWD 9 号引脚)
daplink 到开发板 UART2 TX 串口接线
- RX -> PA2 (复用为 UART2 TX)
CEM5826-M11 到开发板 UART1 CN9 串口接线
- TX -> PA10
- RX -> PA9
- 3V -> SWD 1 号引脚 (随便找的 3V 供电)
- GND -> SWD 20 号引脚(随便找的 GND)
段码 LCD 认识
上图是 EVB-L0136 板载段码 LCD 简图
控制原理业余解释
来自 GPT 的解释:段码 LCD 屏的显示原理主要依赖于 COM(Common)和 SEG(Segment)的配合使用。COM 作为公共驱动,SEG 作为区段驱动,它们共同控制着 LCD 上部分像素点的显示。当对应 COM 口和对应的 SEG 口之间的压差达到最大值时,两者联合控制的像素点将会显形。
通俗理解:通过 com 控制一行,seg 控制一个段,组合显示字符
LCD 引脚映射图
上表对段码 LCD 屏里每个“段”进行编码,举例:要在 1 号数字段上显示 2,则需要点亮的段为:1A, 1B, 1G, 1E, 1D
像是火柴棒数字组合游戏一样,由于每个可显示字符由段拼接而成,因此段码屏只能显示有限的字符数字集。从官方 SLCD_BASIC 示例代码中可看到字符集合:
1 | const SLCD_Code_TypeDef SLCD_CodeTable[38] = |
比如就无法显示字母X
SLCD_BASIC 示例代码解读
1 | const SLCD_Code_TypeDef SLCD_CodeTable[38] = |
上面结构体将字符编码为7bit
显示,为啥是7bit
呢?
上面小节看到一个数字段由 ABCDEFG 7 个段组成,因此要显示一个具体字符只要控制不同段的明亮即可完成。
比如字符2
,控制 1A, 1B, 1G, 1E, 1D 点亮即可显示,用二进制里的 1 表示点亮,0 表示熄灭,对 7 个段进行编码得到 A(1)/B(1)/C(0)/D(1)/E(1)/F(0)/G(1),二进制为0b1101101
,代码里为啥定义为0x5B = 0b1011011
呢?
从SLCD_DisplayNumber1
使用来看,为了方便处理通过Code >> i
操作获取某一个段的值,算法从 A 到 G 处理因此将0b1101101
反转为0x5B
恰好满足算法要求。
实验思路
结合EVB-L0136
开发板官方示例代码:UART_Polling
+ SLCD_Basic
组合实现
串口读取雷达数据
CEM5826-M11
雷达模块提供串口输出雷达数据,因此这里通过EVB-L0136
开发板的 UART1 进行数据读取,为了方便调试同时使用 UART2 进行雷达数据输出。每300ms
获取一次雷达数据。
段码 LCD 展示雷达数据
本次实验主要用到几个数字段:
- 1~4 号数字段:显示雷达模块检测到的运动速度(支持负数,保留小数点后 1 位显示)
- 5~10 号数字段:显示雷达模块检测到的信号强度
LED 灯
开发板读取到一行完整雷达数据(完整数据格式示例v=-0.6 km/h, str=123\r\n\r
),板载绿色 LED 灯闪烁一次。
效果展示
源代码
总结
通过CEM5826-M11
雷达模块接入EVB-L0136
开发板,熟悉了灵动微MM32L0136C7P
系列 HAL 库的使用。HAL 库封装的挺完整的,常用功能都能找到,使用习惯和STM32
相近大大减少了MM32
系列开发和学习成本。
最后:上次提到这块开发板跑官方示例 SLCD 代码每次按 RST 后会触发一声蜂鸣器响,通过 Debug 单步调试发现是如下代码导致:
1 | void SLCD_Configure(void) |
SLCD_Clear(1);
对寄存器写SLCD->DR[i] = 0xFFFFFFFF;
, 会触发蜂鸣器声响。具体哪个寄存器置 1 后发出声响未具体探究,这里将其简单注释掉。