nanoFramework.Iot.Device.Pcd8544 1.0.519
已保留前缀
dotnet add package nanoFramework.Iot.Device.Pcd8544 --version 1.0.519
NuGet\Install-Package nanoFramework.Iot.Device.Pcd8544 -Version 1.0.519
<PackageReference Include="nanoFramework.Iot.Device.Pcd8544" Version="1.0.519" />
paket add nanoFramework.Iot.Device.Pcd8544 --version 1.0.519
#r "nuget: nanoFramework.Iot.Device.Pcd8544, 1.0.519"
// Install nanoFramework.Iot.Device.Pcd8544 as a Cake Addin #addin nuget:?package=nanoFramework.Iot.Device.Pcd8544&version=1.0.519 // Install nanoFramework.Iot.Device.Pcd8544 as a Cake Tool #tool nuget:?package=nanoFramework.Iot.Device.Pcd8544&version=1.0.519
PCD8544 - 48 × 84像素矩阵LCD,著名的Nokia 5110屏幕
这是Nokia 5110使用的著名屏幕。它是一种基于SPI的设备。这款Nokia 5110非常流行,我们很多人手里都曾有过它,那一代年轻人也曾在图片中见过它。这种LCD相当便宜且易于使用。
文档
- Nokia5110 数据表
电路
它使用SPI,并且可以将PWM添加到控制屏幕周围的4个LED亮度。这些引脚有不同的名称,如BL或LED。
它还需要在SPI设备顶部添加GPIO控制器,该控制器具有一个名为数据控制(Data Control)的引脚,通常表示为DC。
在本方案中,芯片选择(低电平有效)通常称为CE。SPI时钟必须连接到CLK或SCLK。MOSI引脚连接到DIN或MOSI。引脚的名称略有不同。
复位引脚有时称为RST。
供电电压可变,3.3 或 5V,最多可接受7V。确保在亮度LED和您要插入的控制板之间有电流限制电阻。大多数您买的套件都会有。如果不添加,将会损坏外部亮度LED。
以下示例显示了如何使用PWM设置屏幕亮度
var resetPin = 32;
var dataCommandPin = 33;
var backlightPin = 21;
var gpioController = new GpioController();
var spiConnectionSettings = new SpiConnectionSettings(1, 5)
{
ClockFrequency = 5_000_000,
Mode = SpiMode.Mode0,
DataFlow = DataFlow.MsbFirst,
ChipSelectLineActiveState = PinValue.Low
};
var spiDevice = new SpiDevice(spiConnectionSettings);
var pwmChannel = PwmChannel.CreateFromPin(backlightPin);
var lcd = new Iot.Device.Pcd8544(dataCommandPin, spiDevice, resetPin, pwmChannel, gpioController, false);
如果您既不想PWM也不要复位引脚,您可以为复位提供一个负引脚号,为PWM提供一个空值
lcd = new(27, spi, -1, null);
var lcd = new Iot.Device.Pcd8544(dataCommandPin, spiDevice, -1, null);
请注意,您还可以为背光提供一个普通引脚号。在这种情况下,当BacklightBrightness
属性大于0.5时,灯会亮,否则关闭。
显示文本
与其他存储库中的显示屏绑定一样,您有Write
和SetCursorPosition
来写入文本和设置光标位置。
有一种特定的字体可供使用,并针对屏幕进行了优化。该字体只包含有限数量的字符,并将忽略任何未知字符。
lcd.SetCursorPosition(0, 0);
lcd.WriteLine("First line");
lcd.Write("Second one");
lcd.SetCursorPosition(0, 5);
lcd.Write("last line");
光标位置随着您写入的文本而移动。屏幕总共有6行。字符宽度为5像素,高度为8像素。
您还可以使用 Write(ReadOnlySpan<byte> text)
函数提供自己的字符。
绘制线条、矩形和点
可提供点、线和矩形原语
lcd.DrawPoint(5, 5, true);
lcd.DrawLine(0, 0, 15, 35, true);
lcd.DrawRectangle(10, 30, 10, 20, true, true);
lcd.DrawRectangle(12, 32, 6, 16, false, true);
// You should not forget to draw what you have in memory
lcd.Draw();
每个都可以接受Point
、Size
和Rectangle
作为输入。您必须决定是否想要开启或关闭点,以及是否填充矩形。
完成绘图后,您应该调用一次Refresh
来刷新屏幕。所有绘图都在内存中,需要将其推送到屏幕。
显示原始图像
SetByteMap函数允许您绘制任何内容,您只需提供原始缓冲区。大小为504字节,表示从右上角的列到下一行的8像素列。总共可用6个原始图像,每个84列。
以下是一个示例,说明您如何转换现有图像以提取原始数据,然后将它转换为C#数组以复制到您的代码中
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
var imageFilePath = args[0];
using var image = Image.Load<Rgba32>(imageFilePath);
image.Mutate(x => x.Resize(new Size(84, 48)));
image.Mutate(x => x.BlackWhite());
var colWhite = new Rgba32(255, 255, 255);
var width = 84;
var result = new byte[504];
for (var pos = 0; pos < result.Length; pos++)
{
byte toStore = 0;
for (int bit = 0; bit < 8; bit++)
{
var x = pos % width;
var y = pos / width * 8 + bit;
toStore = (byte)(toStore | ((image[x, y] == colWhite ? 0 : 1) << bit));
}
result[pos] = toStore;
}
var resultString = $"var bitmap = new byte[] {{{String.Join(",", result.Select(b => $"0x{b.ToString("X2")}"))}}}";
Console.WriteLine(resultString);
Console.ReadKey();
如果您想转换与84x48屏幕尺寸不同的现有图像,您必须使用ImageSharp将该图片调整大小,并将其转换为黑白
// Open an image and resize it
using var image = Image.Load<Rgba32>(imageFilePath);
bitmapLarge.Mutate(x => x.Resize(new Size(84, 48)));
bitmapLarge.Mutate(x => x.BlackWhite());
...
注意:您可能需要根据需要首先反转颜色。
此代码作为简单的C#控制台应用程序在Img2Pcd8544中提供,您可以使用以下命令执行它
Img2Pcd8544 <图像文件路径>
高级功能
您可以调整几个因素,如Bias
、Temperature
、Contrast
和Brightness
。示例将运行所有这些,以便您可以了解它们各自的影响。Bias
会增加电压并使屏幕变暗。
一般来说,如果您处于正常条件下,建议将温度保持在0系数。正常条件下的默认值可以将其设置为4。
然后,您可以使用Contrast属性来调整对比度。通常,正常条件下值为0x30的是一个很好的值。
但是,可能需要根据您所处环境的光线和温度来调整这些值。
亮度
亮度控制PWM。如果没有传递PWM控制器,此设置对屏幕没有影响。亮度从0.0到0.1f。
lcd.BacklightBrightness = 0.2f;
反转颜色
支持反转模式,它只是反转屏幕颜色。因此,白色像素变成黑色,反之亦然
lcd.InvertedColors = true;
已启用
您可以使用Enabled
属性完全打开或关闭屏幕
lcd.Enabled = true;
产品 | 版本 兼容和额外的计算目标框架版本。 |
---|---|
.NET框架 | net兼容。 |
-
- nanoFramework.CoreLibrary (>= 1.15.5)
- nanoFramework.Iot.Device.CharacterLcd (>= 1.1.513)
- nanoFramework.System.Collections (>= 1.5.31)
- nanoFramework.System.Device.Pwm (>= 1.1.10)
- nanoFramework.System.Device.Spi (>= 1.3.52)
- nanoFramework.System.Drawing (>= 1.2.586)
NuGet包
此包未被任何NuGet包使用。
GitHub仓库
此包未被任何流行的GitHub仓库使用。
版本 | 下载 | 上次更新 |
---|---|---|
1.0.519 | 64 | 7/24/2024 |
1.0.516 | 54 | 7/22/2024 |
1.0.514 | 54 | 7/17/2024 |
1.0.504 | 81 | 6/28/2024 |
1.0.494 | 75 | 6/14/2024 |
1.0.484 | 80 | 5/29/2024 |
1.0.472 | 88 | 5/15/2024 |
1.0.466 | 92 | 5/1/2024 |
1.0.461 | 84 | 4/15/2024 |
1.0.460 | 74 | 4/15/2024 |
1.0.438 | 105 | 3/22/2024 |
1.0.432 | 98 | 3/5/2024 |
1.0.370 | 227 | 11/17/2023 |
1.0.360 | 111 | 11/10/2023 |
1.0.340 | 103 | 11/8/2023 |
1.0.253 | 158 | 5/26/2023 |
1.0.237 | 128 | 5/12/2023 |
1.0.232 | 129 | 5/11/2023 |
1.0.226 | 137 | 5/10/2023 |
1.0.222 | 135 | 5/5/2023 |
1.0.221 | 138 | 5/3/2023 |
1.0.200 | 187 | 3/22/2023 |
1.0.197 | 199 | 3/17/2023 |
1.0.139 | 283 | 1/6/2023 |
1.0.136 | 283 | 1/5/2023 |
1.0.134 | 302 | 1/4/2023 |
1.0.132 | 287 | 1/3/2023 |
1.0.129 | 274 | 12/30/2022 |
1.0.127 | 276 | 12/28/2022 |
1.0.88 | 326 | 11/16/2022 |
1.0.85 | 302 | 11/15/2022 |
1.0.83 | 328 | 11/14/2022 |
1.0.79 | 325 | 11/6/2022 |
1.0.77 | 347 | 11/5/2022 |
1.0.65 | 381 | 10/25/2022 |
1.0.52 | 365 | 10/22/2022 |
1.0.50 | 376 | 10/13/2022 |
1.0.46 | 417 | 10/12/2022 |
1.0.42 | 411 | 10/11/2022 |
1.0.41 | 427 | 10/10/2022 |
1.0.38 | 398 | 10/8/2022 |
1.0.32 | 378 | 10/7/2022 |
1.0.30 | 456 | 9/25/2022 |
1.0.28 | 407 | 9/24/2022 |
1.0.21 | 443 | 9/22/2022 |
1.0.19 | 414 | 9/22/2022 |
1.0.11 | 467 | 9/15/2022 |
1.0.1 | 392 | 9/9/2022 |