16X2字符液晶显示器驱动程序开发与测试

版权申诉
0 下载量 135 浏览量 更新于2024-10-07 收藏 3KB RAR 举报
资源摘要信息:"16X2字符液晶接口程序.rar_字符液晶" 16X2字符液晶接口程序是一种专门用于操作和控制16x2字符型液晶显示器(LCD)的软件程序。16x2字符液晶显示器是一种常见的显示设备,它能够显示2行,每行16个字符。此类显示器广泛应用于嵌入式系统、家用电器、工业控制面板以及各种需要简单文本显示的场合。 描述中提到的“16×2字符”是指该显示器的显示容量,即每行能显示16个字符,共有2行。这种显示器一般由一个控制器控制,能够显示ASCII字符集中的字符。 “用八位数据线方式”是指该程序通过并行传输的方式与液晶显示器进行通信。在硬件接口设计中,通常使用八条数据线(D0-D7)来同时传输8位数据,这种方式相比于串行传输,可以更快地传输数据。这种方式需要使用到数据总线、控制总线和地址总线,实现与控制器的通信。 在程序的具体实现上,开发者需要对硬件寄存器进行操作,控制LCD的工作模式、显示模式、光标设置以及滚动显示等。常见的操作包括初始化LCD、写入数据、读取数据、设置光标位置、清屏等。 标签"字符液晶"简单明了地指出了这一程序所针对的硬件类型,即字符型液晶显示器。 压缩包子文件的文件名称列表包含了两个文件:“16X2字符液晶接口程序.txt”和“***.txt”。第一个文件很可能是包含了液晶显示器接口程序的源代码或者是程序的说明文档。而第二个文件“***.txt”则可能是某些资源的链接或者是相关的说明文档。由于文件名中带有“***”,这可能指的是中国的一个源代码分享网站,意味着开发者可能从这个网站上获取了相关的资源或示例代码。 针对上述文件信息,可以总结出以下几点知识内容: - 16x2字符液晶显示器的基础知识和应用场景。 - 并行通信的基本原理及其在字符液晶接口程序中的应用。 - 字符液晶显示器的常见操作和编程接口。 - 硬件接口编程的基本概念,比如数据总线、控制总线和地址总线。 - 开发者在进行嵌入式开发时对LCD进行初始化、数据写入、光标控制等操作的常见方法。 - 液晶显示器驱动程序的编写技巧和调试方法。 - 程序压缩包的解压方法和常见的文件类型识别。 - 源代码共享网站的作用,以及如何在这些网站上获取和分享代码资源。 了解这些知识点后,无论是初学者还是有经验的工程师,都能对字符型液晶显示器的接口程序有更加深入的理解,并能有效地进行开发和故障排除。

from collections import OrderedDict import torch import torch.nn.functional as F import torchvision from torch import nn import models.vgg_ as models class BackboneBase_VGG(nn.Module): def __init__(self, backbone: nn.Module, num_channels: int, name: str, return_interm_layers: bool): super().__init__() features = list(backbone.features.children()) if return_interm_layers: if name == 'vgg16_bn': self.body1 = nn.Sequential(*features[:13]) self.body2 = nn.Sequential(*features[13:23]) self.body3 = nn.Sequential(*features[23:33]) self.body4 = nn.Sequential(*features[33:43]) else: self.body1 = nn.Sequential(*features[:9]) self.body2 = nn.Sequential(*features[9:16]) self.body3 = nn.Sequential(*features[16:23]) self.body4 = nn.Sequential(*features[23:30]) else: if name == 'vgg16_bn': self.body = nn.Sequential(*features[:44]) # 16x down-sample elif name == 'vgg16': self.body = nn.Sequential(*features[:30]) # 16x down-sample self.num_channels = num_channels self.return_interm_layers = return_interm_layers def forward(self, tensor_list): out = [] if self.return_interm_layers: xs = tensor_list for _, layer in enumerate([self.body1, self.body2, self.body3, self.body4]): xs = layer(xs) out.append(xs) else: xs = self.body(tensor_list) out.append(xs) return out class Backbone_VGG(BackboneBase_VGG): """ResNet backbone with frozen BatchNorm.""" def __init__(self, name: str, return_interm_layers: bool): if name == 'vgg16_bn': backbone = models.vgg16_bn(pretrained=True) elif name == 'vgg16': backbone = models.vgg16(pretrained=True) num_channels = 256 super().__init__(backbone, num_channels, name, return_interm_layers) def build_backbone(args): backbone = Backbone_VGG(args.backbone, True) return backbone if __name__ == '__main__': Backbone_VGG('vgg16', True)

2023-06-02 上传