基于STM32F0单片机IO直接驱动段式液晶的设计与实现
本文首先介绍了段式液晶屏的驱动原理,然后介绍了使用高性价比的STM32F030R8T6单片机的IO口直接驱动液晶屏的实现方案,该方案在实现人机界面设计方面具有用成本低廉、电路稳定和性能高效的优点。在介绍了本设计方案的硬件原理和程序流程图后,通过在无线温湿度传感器中的实际应用对本方案和功能进行了验证。
【关键词】STM32F0 单片机 嵌入式 段式液晶
段式液晶相对于点阵液晶,显示内容简单,排列和外形上非常自由,主要用于替代段式LED数码管,随着段式液晶屏价格的逐渐下降和显示效果的提升,其应用范围越来越广泛。相对与段式数码管由于其有着低功耗特点,显示内容也更加丰富,除了数字还可以显示图案等复杂图形,非常适合在仪器仪表中作为数据显示界面。
STM32F0系列微处理器以ARM Cortex?-M0为内核,在实时控制、低功耗、先进架构和丰富外围设备组合上表现得更加出色。该系列单片机最多支持55个IO口,集成丰富的外设,比如定时器、实时时钟、12位ADC、USART、IIC、SPI等,传承了STM32系列的重要特性,集实时性能、低功耗运算和先进架构与外设于一身,由于具有低廉的价格,特别适合于成本敏感的应用。
本论文基于STM32F0提出了直接使用单片机IO口驱动段式液晶的方案,具有价格低廉、性价比高、功耗低的特点,用于满足低成本产品使用液晶屏作为显示界面的需求,具有较大的推广和使用价值。
1 段式液晶显示原理
LCD (Liquid Crystal Display)是利用液晶分子的物理结构和光学特性进行显示的技术。液晶分子介于固体和液体之间,在自然状态,具有旋光性,呈现透明态;在电磁场的作用下,失去旋光性而呈现黑色。整个液晶屏由上下玻璃基板和偏振片组成,,通过在上下基板电极间施加不同的交流电压,即可实现液晶显示的亮暗两种基本状态。
在实际使用中,以下4个参数至关重要:
(1)交流信号电压驱动,长时间直流信号电压会导致液晶分子氧化,引起寿命缩短和显示模糊,因此需要使用交流信号驱动。当SEG端电压等于COM端电压时,该段不显示,当电压相反时该段显示。
(2)扫描频率,直接驱动液晶分子的交流电压的频率需要在60Hz到100Hz之间,过高会增加功耗,过低会导致闪烁。
(3)占空比(Duty),由于TN和STN的LCD一般采用时分动态扫描驱动模式,所以在此模式下每个COM的有效选通时间与整个扫描周期的比值是固定的,Duty=1/COM。
(4)偏置(Bias),LCD的COM和SEG驱动信号为模拟信号,Bias数值为最低一档与输出最高电压的比值,一般分3档或者4档,分3档的Bias=1/2,分4档的Bias=1/3。
设计驱动电路时需要依据厂家提供的液晶屏Duty和Bias参数,以达到最优驱动显示效果。
2 硬件设计
本硬件平台的MCU采用STM32F030 R8T6,该单片机基于Cortex?-M0内核,最高允许频率可达48M,拥有独立的64 KB flash和8K的RAM,2个UART,片内自带具有校正功能的32K RTC,一个12位ADC,同时还有最多55路I/O 口和独立的系统看门狗定时器。本系统通过合理利用片内集成的多种功能模块,大大降低了设计的复杂性,也降低了系统成本。该MCU在本设计中的电路原理图如图1所示。
系统使用两个晶振,其中8MHz经过MCU内部倍频为系统提供48MHz工作时钟,32.768kHz为系统提供RTC时钟,以及在低功耗运行模式下的系统时钟。BOOT0用于选择单片机的启动方式,当BOOT0接高电平时,MCU上电后进入ISP下载模式,此时可以通过串口升级系统程序,当BOOT0接地时,MCU上电后从用户程序区开始运行进入正常启动模式。
本设计选用的段式段式液晶屏驱动参数为Duty = 1/4,Bias = 1/2,一共四个COM端,22个SEG端。因此该段式液晶的COM端有三种电平,分别是Vcc,1/2Vcc,0,每个周期变化四次。由于MCU只能输出高低两种电平,因此为了输出中间电平,利用MCU的开漏输入功能和阻值相等的上下拉电阻实现,当需要中间电平时,把相应COM端口设置为浮空输入模式, 由于上下拉电阻的分压作用,就会产生一个半高电平。
系统采用DHT11数字温湿度传感器, 它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性,与MCU通信采用单总线协议。在本系统应用中采用PA13与DHT11通信,实现0-50°C温度和20-90%RH湿度范围的数据采集。
通过USART1可以实现程序IAP在线升级,根据实际需要,USART2选择GPRS、zigbee、蓝牙、wifi等无线透传模块,实现无线数据传输。
3 软件设计
在本应用中,段式液晶驱动控制的COM端和SEG端全部都是PWM信号驱动,一共26路PWM,MCU所支持的硬件PWM无法满足要求,因此需要软件模拟实现。本设计通过在TIM中断中反转IO口状态实现26路PWM输出控制。
编程时定义一个二维数组,作为每一段的标志位和真值表一一对应,需要某段显示时,将该段对应的标志位置为1,否则置为0。在TIM中断中,根据该二维真值表数组操作对应的COM端口和SEG端口。
在应用程序中,根据显示内容分别定义相关显示函数,本设计定义了电池电量显示函数、无线信号状态显示函数、日期显示函数、温度显示函数和湿度显示函数,这些函数的功能是把相关显示数据通过真值表定义对真值表的显示位进行赋值操作,即把显示的内容映射到对应真值表二维数组,从而实现数据显示和标识符的显示。
由于Bias=1/2,因此COM端电平有三个状态,即0V、1/2Vcc和Vcc,SEG端电平有两个即0V和Vcc,若要点亮一段,需要在对应的SEG端和COM端加上足够的交流电压,即SEG端电压为0,COM端电压为Vcc或者SEG端电压为Vcc,COM端电压为0V;当不需要该段显示时,COM端电压为1/2Vcc,此时SEG端和COM端的压降最大为1/2Vcc。因此通过定期逐个扫描4个COM端,就可以稳定度在LCD上显示指定字段。为了防止显示时出现鬼影(即不该显示的段码也隐约显示),需要降低驱动时间,本设计采用50%占空比的PWM调节对比度。本设计段式液晶程序流程如图2所示。
如图2所示,通过中断操作实现COM口和SEG端口的翻转与赋值,其中变量Val为定义的全局变量,在TIM_IT_CC1中断触发时对COM口和SEG口进行赋值或者翻转操作,当TIM_IT_Update中断触发时,把所有COM口和SEG口均设置为低输出状态。
4 应用和发展前景
本论文在分析段式液晶驱动原理的基础上,给出了使用MCU IO口直接驱动段式液晶显示的原理图设计和程序流程图,并在温湿度传感器中通过实际应用进行验证。本方法实现的段式液晶驱动方案,除了适用于温湿度传感器外,可以推广应用于更多低成本的采用段式液晶显示的产品设计。
参考文献
[1]张布幸.智能电表段式液晶驱动的设计与实现[J].微型机与应用,2013(13):104-106.
[2]张恩海.探索51单片机直接驱动段式液晶的简单化[J].计算机与网络,2011(10):60-62.
[3]丛秋波.STM32F0系列开始量产瞄准低成本应用[J].EDN CHINA电子设计技术,2012(07):22-22.
作者单位
无锡机电高等职业技术学校 江苏省无锡市 214000