1. LCD驱动基础:LCD显示原理、常见LCD接口类型(SPI/I2C/并行)、血糖仪常用LCD选型
各位同学,咱们今天聊聊LCD驱动的基础。说实话,这块内容看着简单,但我在实际项目中踩过的坑可不少。你想想看,血糖仪这种设备,屏幕要是显示不对,患者读数错了,那可是要出大事的。所以,咱们把基础打牢,后面写菜单才不慌。
1.1 LCD显示原理:像素是怎么亮起来的?
LCD的全称是Liquid Crystal Display,液晶显示器。它的核心原理,说白了就是:液晶分子在电场作用下会扭转,从而控制背光能不能透过来。
我习惯把LCD想象成一扇扇小窗户。每个像素就是一扇窗户,窗户上有个“百叶窗”(液晶分子)。不给电的时候,百叶窗是打开的,背光透过来,像素亮;给电了,百叶窗关上,光被挡住,像素暗。当然,实际比这个复杂,但理解到这个程度就够了。
具体到血糖仪常用的段码屏,它不像手机屏幕那样显示图片,而是显示固定的数字和符号。比如“88.8”这样的血糖值,还有“mmol/L”单位、电池符号等。段码屏的每个段(Segment)就是一个独立的电极,MCU控制它通断,就能点亮或熄灭。
关键点:段码屏的驱动方式叫“动态扫描”。因为公共端(COM)和段端(SEG)是复用的,不能同时点亮所有段,而是分时轮流点亮。只要刷新率够快(通常50Hz以上),人眼就感觉不到闪烁。
我记得有一次,一个学员问我:“为什么我的段码屏显示数字时,有些笔画很淡?”我一看代码,刷新率设成了20Hz。嗯,这里要注意:刷新率低于30Hz,人眼就能看到闪烁。血糖仪这种医疗设备,建议做到60Hz以上,稳定可靠。
1.2 常见LCD接口类型:SPI、I2C、并行
血糖仪里用的LCD,接口类型就那么几种。我按实际项目中的使用频率,给大家排个序。
| 接口类型 | 引脚数 | 速度 | 抗干扰 | 血糖仪适用性 |
|---|---|---|---|---|
| SPI | 4~6 | 快(10MHz+) | 好 | ★★★★★ |
| I2C | 2 | 慢(400kHz) | 一般 | ★★★☆☆ |
| 并行(8080/6800) | 8~16 | 最快 | 好 | ★★☆☆☆ |
1.2.1 SPI接口——我的首选
我个人习惯,血糖仪项目首选SPI接口的LCD。为什么?因为SPI是全双工通信,速度快,而且抗干扰能力强。血糖仪内部有电机(采血笔)、蜂鸣器,电磁环境其实挺复杂的。SPI的差分信号(虽然这里不是差分,但SCLK和MOSI分开)比I2C的漏极开路要稳定得多。
SPI的典型引脚:
- SCLK:时钟线,由主设备(MCU)控制
- MOSI:主设备输出,从设备输入
- MISO:主设备输入,从设备输出(很多LCD只用MOSI,不需要MISO)
- CS:片选,选中哪个LCD就拉低哪个
- DC:数据/命令选择(有些LCD叫RS)
- RST:复位(可选)
避坑指南:我曾经在SPI通信时,把SCLK极性设反了,结果屏幕花屏。后来查了LCD数据手册才发现,它要求时钟空闲时为高电平(CPOL=1),而我设成了低电平。所以,写代码前一定先看数据手册的时序图,别想当然。
1.2.2 I2C接口——省引脚但慢
I2C接口最大的优点是省引脚,只需要SDA和SCL两根线。但缺点也很明显:速度慢,标准模式只有100kHz,快速模式400kHz。对于血糖仪这种只需要显示几个数字的场景,其实够用。但如果你要刷新动画或者显示波形,I2C就吃力了。
I2C的另一个问题是:总线上的设备多了,容易出问题。我记得有一次,I2C总线上挂了LCD、EEPROM、温度传感器三个设备,结果LCD时不时不响应。排查了半天,发现是EEPROM在写操作时占用了总线,LCD的地址冲突了。后来我给每个设备加了独立的电源控制,才解决。
注意:I2C的地址是7位或10位,但很多LCD的I2C地址是固定的,不能改。如果板子上有两个相同型号的LCD,I2C就没办法区分了。这时候要么换SPI,要么加I2C多路复用器。
1.2.3 并行接口——快但费引脚
并行接口(8080或6800时序)速度最快,一次传输8位或16位数据。但代价是引脚多,至少需要8条数据线,加上控制线,轻松占用十几个GPIO。对于血糖仪这种小体积、低功耗的设备,并行接口基本被淘汰了。除非你用的是带LCD控制器的MCU,比如STM32的FSMC接口,可以省点事。
我个人建议:除非你MCU引脚多到用不完,否则别选并行接口。SPI完全够用。
1.3 血糖仪常用LCD选型
血糖仪用的LCD,跟手机屏幕完全是两码事。我给大家总结几个选型要点。
1.3.1 段码屏 vs 点阵屏
| 类型 | 优点 | 缺点 | 血糖仪应用 |
|---|---|---|---|
| 段码屏(VA/STN) | 功耗极低、成本低、阳光下可见 | 只能显示固定图案 | 主流选择,显示数字+单位+图标 |
| 点阵屏(COG/TFT) | 可显示汉字、图形、曲线 | 功耗高、成本高、阳光下看不清 | 高端血糖仪,显示趋势图 |
我做过的大多数血糖仪项目,用的都是段码屏。为什么?因为血糖仪是电池供电的设备,一颗CR2032纽扣电池要用几个月。段码屏的功耗可以做到微安级别,而TFT彩屏动不动几十毫安,根本扛不住。
1.3.2 选型参数速查
这里我列几个关键参数,你选型时一定要看:
- 工作电压:血糖仪常用3.0V或3.3V,选LCD时注意电压范围。有些LCD是5V的,需要加电平转换。
- 驱动电压(LCD Bias):段码屏需要负压驱动,比如-3V。有些LCD模块内置了电荷泵,有些需要外部提供。我建议选内置电荷泵的,省事。
- 视角:血糖仪是手持设备,用户可能从各个角度看。选宽视角的VA屏(垂直配向),比普通STN屏好很多。
- 工作温度:血糖仪可能放在车里(夏天60°C),也可能在户外(冬天-20°C)。选工业级温度范围(-20°C~70°C)的LCD。
我的推荐:对于入门级血糖仪,选HT1621驱动的段码屏,SPI接口,3.3V供电,内置电荷泵。HT1621这颗芯片我用了十几年,稳定可靠,驱动段码屏非常方便。对于需要显示曲线的中高端血糖仪,可以考虑SSD1306驱动的OLED点阵屏,同样是SPI接口,功耗低,对比度高。
1.3.3 避坑:LCD的“鬼影”现象
我曾经遇到过一个项目,段码屏在显示数字时,不亮的段隐隐约约也有显示,就像“鬼影”一样。排查了很久,发现是LCD的偏压设置不对。段码屏的驱动需要多级偏压(比如1/3 bias),如果偏压比不对,未选中的段也会有微弱电压,导致“半亮”。
解决办法:仔细看LCD数据手册的偏压设置,调整HT1621的偏压寄存器。另外,LCD的COM和SEG的扫描顺序也要和PCB布局匹配,否则会出现段位错乱。
好了,这一节的内容就这些。LCD驱动基础打好了,后面咱们写菜单代码就顺风顺水。下一节,我会带大家实际搭建一个LCD驱动的工程,从初始化到显示一个“8.8”,一步步来。