单片机液晶屏显示编程_教你玩转Nokia 5110液晶屏

液晶显示模块具有体积小、显示内容丰富、超薄、轻巧等优点,在嵌入式系统,尤其是低功耗场合中,得到越来越广泛的应用。目前,市场上比较常见的液晶显示屏有LCD1602、LCD12232、LCD12864等,但这几款液晶屏的功耗都比较高,本文将介绍一款低功耗的液晶显示模块——Nokia 5110,它是从诺基亚的经典手机Nokia 5110上拆下来的,具有较高的性价比。

a7f88ac83715a1384fd107642a2edb51.png

Nokia 5110液晶屏(见图23.1)采用串行通信接口与主控制器进行通信,具有84像素×48像素的分辨率,工作电压为2.7~3.3V,在正常工作模式下,电流为240µA,具有掉电模式,特别适合以电池供电的便携式移动设备。

6e14feed99c91d50ecd0890368dcfbe2.png

图23.1 Nokia 5110实物图

a030a77f7be38b05b367a00450d58422.png

表23.1 Nokia 5110液晶屏的引脚

硬件电路设计

Nokia 5110液晶屏共有9个引脚,除去电源和地,通信引脚只有5个,功能如表23.1所示。CLK为时钟输入引脚,最高输入频率为4MHz;DIN为串行数据输入引脚,在时钟的上升沿传输;D/C为数据和指令切换引脚,高电平发送数据,低电平发送控制指令;CS为片选引脚,低电平有效;OSC为振荡器引脚,如果使用内部振荡器,需要将该引脚接高电平,如果使用外部振荡器,则直接将该引脚连接外部晶体振荡器;VOUT为供电设置引脚,外接0.1µF电容;RST为复位引脚,用于初始化液晶屏,低电平有效。

Nokia 5110液晶的串行通信接口只需要简单的几个阻容元件即可工作,电路如图23.2所示。使用内部振荡器,OSC引脚直接接高电平,VOUT引脚通过一个0.1µF电容接地。Nokia 5110液晶屏自身并没有背光电路,需要外接几个LED作为背光源,经实际验证表明,以贴片的蓝光或者白光二极管作为背光源,效果比较好,图23.2中共有4路蓝色LED作为背光源。

0eb89e95302450d65b5e95329043cc22.png

图23.2 Nokia 5110硬件电路原理图

驱动程序设计

1. 驱动指令

Nokia 5110 液晶屏通过控制D/C 引脚的电平高、低显示数据或者发送控制指令。当D/C为低电平时,输出的是控制指令信息;当D/C为高电平时,输出的是显示数据。由于控制指令数目比较少,因此Nokia 5110内部并没有设置寄存器存储指令,通过指令的数据格式进行识别,指令集如表23.2所示。不同指令的数据格式明显不同,总是在传输字节的某一位置高电平,如X坐标的第7位固定为高电平,Y坐标的第6位固定为高电平。

功能设置指令的PD位用来设置液晶工作模式,当PD为1时,芯片处于掉电模式,消耗电流降低到1.5µA;V位用来设置液晶屏寻址方式,当V为1时,启用垂直寻址方式,当V为0时,启用水平寻址方式,一般启用后者;H位用来控制指令集选择,H为高电平时,使用扩展指令集,H设置为低电平时,使用基本指令集。

显示设置通过D位和E位的组合进行调整,当D、E设置为0、0时,液晶屏显示空白,设置为1、0时,对应普通显示模式,0、1和1、1方式用得比较少。X坐标通过组合X6~X0设置,地址范围为0~83,Y坐标通过组合Y2~Y0设置,地址范围为0~5。

扩展指令集主要用于设置液晶屏的工作参数,可以根据经验进行设置。温度控制一般设置为0x06;偏置系统设置为0x13;Vop用于设置液晶屏操作电压,可通过下式进行计算,其中Vop取值范围为0~0x7F,即Vlcd设置范围为3.06~10.68V。

15f067bcaa400466c28c193daca2ff0e.png
88a6a08d74584f9fca85dca07bdd3d75.png

表23.2 Nokia 5110液晶屏的指令集

2. 程序设计

Nokia 5110 液晶屏的驱动程序包括初始化、清屏、显示字符、显示汉字、显示图形等函数,用户也可以根据需要开发新的接口程序。首先来看一下Nokia 5110液晶屏的时序图(见图23.3),在CS片选线的低电平有效期间发送数据,图中用圆圈标注的地方表示上升沿传输数据或者指令,传输数据高电平在先、低电平在后。串行总线发送多个字节的时序图,如图23.4所示。

c4d0a7f15e19c9c75465dfc3318c686d.png

图23.3 串行总线传送1个字节

63c932f31721dd19c8931e6ce6129f6d.png

图23.4 串行总线传送多个字节

这里以STC89C51 单片机为例,介绍Nokia 5110 液晶屏的驱动过程,如果采用AVR 或STM32 等自带 SPI 接口的单片机,可以通过 SPI 串行接口直接与 Nokia 5110 液晶屏通信。STC89C51单片机没有SPI接口,通过I/O口进行模拟也很方便。

鉴于篇幅关系,函数不再一一介绍,有需要的读者可以从qq群657864614上下载源代码。

应用案例

由于Nokia 5110液晶屏本身不含有字库,因此实际应用过程中,需要用户自己做字库、图形文件,存储在嵌入式处理器或者外部的存储器中。如果显示字符信息,字模大小一般设置为6像素×8像素,则每行可以显示14个字符,显示6行,一共84个字符。

这里向大家介绍一款不错的字模软件——3310液晶显示屏汉字提取程序,其界面如图23.5所示,该软件可以很方便地制作出12像素×12像素与16像素×16像素大小的汉字字库。如果用户需要制作其他格式的字库,可以使用Zimo21软件,该软件功能强大,除了制作字库,还可以生成图片的HEX代码。

通过STC89C51单片机运行如下主程序,即可显示汉字和图形,如图23.6和图23.7所示。用户可以参照本文,很方便地将Nokia 5110液晶屏应用到自己的产品设计中。

main(void)

{

LCD_init();//初始化液晶

LCD_clear();//清屏

while(1)

{

LCD_write_english_string(0,0," Nokia5110 LCD ");//显示字符

LCD_write_chinese_string(15,2,12,4,0,2);//显示汉字

LCD_write_chinese_string(1,4,12,6,4,2);//显示汉字

//LCD_draw_bmp_pixel (0,0,picture1,40,40);//显示图形1

//LCD_draw_bmp_pixel (42,0,picture2,40,40);//显示图形2

}

}

359a97ab0297a1dbb712f5d226bdf378.png

图23.5 3310液晶显示屏汉字提取程序

68726a1303762d319c529ba7d9e7501e.png

图23.6 Nokia 5110液晶屏显示汉字

173231a26355c829840716c9757f388f.png

图23.7 Nokia 5110液晶屏显示图形

### RT-DETRv3 网络结构分析 RT-DETRv3 是一种基于 Transformer 的实时端到端目标检测算法,其核心在于通过引入分层密集正监督方法以及一系列创新性的训练策略,解决了传统 DETR 模型收敛慢和解码器训练不足的问题。以下是 RT-DETRv3 的主要网络结构特点: #### 1. **基于 CNN 的辅助分支** 为了增强编码器的特征表示能力,RT-DETRv3 引入了一个基于卷积神经网络 (CNN) 的辅助分支[^3]。这一分支提供了密集的监督信号,能够与原始解码器协同工作,从而提升整体性能。 ```python class AuxiliaryBranch(nn.Module): def __init__(self, in_channels, out_channels): super(AuxiliaryBranch, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) ``` 此部分的设计灵感来源于传统的 CNN 架构,例如 YOLO 系列中的 CSPNet 和 PAN 结构[^2],这些技术被用来优化特征提取效率并减少计算开销。 --- #### 2. **自注意力扰动学习策略** 为解决解码器训练不足的问题,RT-DETRv3 提出了一种名为 *self-att 扰动* 的新学习策略。这种策略通过对多个查询组中阳性样本的标签分配进行多样化处理,有效增加了阳例的数量,进而提高了模型的学习能力和泛化性能。 具体实现方式是在训练过程中动态调整注意力权重分布,确保更多的高质量查询可以与真实标注 (Ground Truth) 进行匹配。 --- #### 3. **共享权重解编码器分支** 除了上述改进外,RT-DETRv3 还引入了一个共享权重的解编码器分支,专门用于提供密集的正向监督信号。这一设计不仅简化了模型架构,还显著降低了参数量和推理时间,使其更适合实时应用需求。 ```python class SharedDecoderEncoder(nn.Module): def __init__(self, d_model, nhead, num_layers): super(SharedDecoderEncoder, self).__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead) self.decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_layers) def forward(self, tgt, memory): return self.decoder(tgt=tgt, memory=memory) ``` 通过这种方式,RT-DETRv3 实现了高效的目标检测流程,在保持高精度的同时大幅缩短了推理延迟。 --- #### 4. **与其他模型的关系** 值得一提的是,RT-DETRv3 并未完全抛弃经典的 CNN 技术,而是将其与 Transformer 结合起来形成混合架构[^4]。例如,它采用了 YOLO 系列中的 RepNCSP 模块替代冗余的多尺度自注意力层,从而减少了不必要的计算负担。 此外,RT-DETRv3 还借鉴了 DETR 的一对一匹配策略,并在此基础上进行了优化,进一步提升了小目标检测的能力。 --- ### 总结 综上所述,RT-DETRv3 的网络结构主要包括以下几个关键组件:基于 CNN 的辅助分支、自注意力扰动学习策略、共享权重解编码器分支以及混合编码器设计。这些技术创新共同推动了实时目标检测领域的发展,使其在复杂场景下的表现更加出色。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值