Micropython加速物联网开发4 - SPI驱动5110LCD屏

2023-10-27


5110是84*48点阵LCD屏,其性价比高、接口简单、速度快、功耗低,非常适合电池供电的便携式终端设备。

本例使用TPYBoard开发板SPI1接口驱动5110LCD屏。

连线图即接口说明


LCD驱动程序

5110LCD的通信协议是一个没有MISO,只有MOSI的SPI协议,SPI协议可以通过GPIO模拟,本例直接使用SPI1接口驱动。

MicroPython提供了SPI的Python API,本例需要用到SPI初始化、SPI write等API。关于SPI的详细说明可以参考官网:MicroPython SPI API

关于5110LCD有现成的驱动程序upcd8544.py,其代码片段如下:

#upcd8544.py
class PCD8544:
    def __init__(self, spi, rst, ce, dc, light, pwr=None):
        # init the SPI bus and pins
        spi.init(spi.MASTER, baudrate=328125, bits=8, polarity=0, phase=1, firstbit=spi.MSB)
        self.reset()
		......
				
    def position(self, x, y):
		......
		
    def data(self, arr):
        """ send bytes in data mode """
        self.bitmap(arr, 1)

    def bitmap(self, arr, dc):
        ......
        self.spi.write(buf)
		......
		
    def lcd_write_string(self, string, x, y):
        self.position(x,y)
        for i in string:
            self.data(self.lcd_font.get_font6_8(i))
    
    
    def lcd_write_chinese(self,data,x,y):
        #获取 字 的UTF8码
        code = 0x00 #赋初值
        data_code = data.encode("UTF-8")
        code |= data_code[0]<<16
        code |= data_code[1]<<8
        code |= data_code[2]
        #获取 字 的UTF8码 END
        self.position(x,y)
        self.data(self.chinese.get_chinese_utf8(code,0))
        self.position(x,y+1)
        self.data(self.chinese.get_chinese_utf8(code,1))

首先调用MicroPython的SPI init函数进行SPI初始化。然后初始化LCD,当5110上电时,内部寄存器和RAM中的内容是不确定的,因此需要一个RES低电平脉冲复位,其时序图如下:



8544驱动程序提供了字符显示(lcd_write_string)和汉字显示(lcd_write_chinese)API。它们会调用position函数指定字符在LCD屏显示的位置。5110为84*48点阵屏,横向具有84个像素点,纵向分为了0 - 5 的6个8像素点组成的区域。因此position函数的x参数范围为0 -83,y参数范围为 0 -5。示意图如下:


除了指定position之外,字符显示API还调用了data函数,data函数调用bitmap函数,bitmap函数通过调用SPI的write() 接口将数据写入屏幕。

字库

本例中定义了普通字符和汉字库,普通字库代码片段如下:

#font.py
class FONT6_8:
    """docstring for FONT6_8"""
    FONTTYPE6_8 = [
        [0x00, 0x7e, 0x11, 0x11, 0x11, 0x7e] # 41 A
        ,[0x00, 0x7f, 0x49, 0x49, 0x49, 0x36] # 42 B
        ,[0x00, 0x3e, 0x41, 0x41, 0x41, 0x22] # 43 C
        ,[0x00, 0x7f, 0x41, 0x41, 0x22, 0x1c] # 44 D
        ......
    ]
    
    def get_font6_8(self, data):
        return self.FONTTYPE6_8[bytearray(data)[0] - 0x20]


汉字库通过取模软件生成。汉字库代码如下:

#chinese.py
class CN_UTF8:
    """docstring for CN_UTF8"""
    UTF8_CHINESE = {
        0xe789a9:[
					[0x40,0x3C,0x10,0xFF,0x10,0x10,0x20,0x10,0x8F,0x78,0x08,0xF8,0x08,0xF8,0x00,0x00],
					[0x02,0x06,0x02,0xFF,0x01,0x01,0x04,0x42,0x21,0x18,0x46,0x81,0x40,0x3F,0x00,0x00]
                ],#物 
        0xe88194:[
					[0x02,0xFE,0x92,0x92,0xFE,0x02,0x00,0x10,0x11,0x16,0xF0,0x14,0x13,0x10,0x00,0x00],
					[0x10,0x1F,0x08,0x08,0xFF,0x04,0x81,0x41,0x31,0x0D,0x03,0x0D,0x31,0x41,0x81,0x00]
                ],#联
        0xe7bd91:[
					[0x00,0xFE,0x02,0x22,0x42,0x82,0x72,0x02,0x22,0x42,0x82,0x72,0x02,0xFE,0x00,0x00],
					[0x00,0xFF,0x10,0x08,0x06,0x01,0x0E,0x10,0x08,0x06,0x01,0x4E,0x80,0x7F,0x00,0x00]
                ],#网                   
    }
    def get_chinese_utf8(self, key,isBottom = 0):
        values = self.UTF8_CHINESE[key]
        return values[isBottom]

汉字UTF-8编码查询

汉字取模工具


主程序

目前有了屏幕驱动程序,也准备好了字符和汉字字库,是时候正式编写主程序了。代码如下:

# main.py
import pyb
import upcd8544
from machine import SPI,Pin 

def main():
    lcd_5110.lcd_write_string('MicroPython',10,1)

    lcd_5110.lcd_write_chinese("物",18,3)
    lcd_5110.lcd_write_chinese("联",34,3)
    lcd_5110.lcd_write_chinese("网",50,3)

    pyb.delay(1000)

if __name__ == '__main__':
    SPI = pyb.SPI(1) #DIN=>X8-MOSI/CLK=>X6-SCK
    RST    = pyb.Pin('X1')
    CE     = pyb.Pin('X2')
    DC     = pyb.Pin('X3')
    LIGHT  = pyb.Pin('X4')
    lcd_5110 = upcd8544.PCD8544(SPI, RST, CE, DC, LIGHT)
    while(1):
     main()

首先导入了驱动程序、MicroPython硬件库中的SPI和Pin,然后定义SPI接口以及其他pin脚,实例化lcd对象lcd_5110,最后显示'MicroPython'字符以及'物联网'三个汉字。

运行效果如下:


本例完整代码github地址:MicroPython-5110LCD






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Micropython加速物联网开发4 - SPI驱动5110LCD屏 的相关文章

随机推荐

  • Mac os使用笔记

    说明 mac os版本 10 14 6 论文保存 Safari浏览器再google搜索到论文后 以网页形式打开pdf 将鼠标移动到中间下方位置 会出现四个按钮 点击第三个 以mac自带的软件 预览 打开 然后点击屏幕上方菜单栏的 文件 gt
  • random forest 随机森林(高亮!用于分类) matlab实现

    最近要用到随机森林 于是乎对它的原理了解了一番 并做了一下算法的实现 本次实现是用于分类问题的 如果是回归问题 分裂规则不一样 我还没有实现 下面的原理摘自别人的笔记 如果了解决策树CART的构建规则ID3或者C4 5的话 这部分原理的内容
  • OpenWrt DNS问题排查

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 我们的设备在测试时发现有个别的主机 主程序DNS解释服务器域名失败 最直接的表现就是 ping 126 com 显示 对于这个问题 最直接的方式就是打开 etc resol
  • mysql语句(二)

    MySQL 连接的使用 JOIN 按照功能大致分为如下三类 INNER JOIN 内连接 或等值连接 获取两个表中字段匹配关系的记录 LEFT JOIN 左连接 获取左表所有记录 即使右表没有对应匹配的记录 RIGHT JOIN 右连接 与
  • 【图像融合】融合算法综述(持续更新)

    按时间顺序 综述近5年的融合算法 重点分析了最近两年的work 欢迎留言探讨 文章目录 前言 1 SSR Laplacian Image Fusion 2017 2 FusionGAN 2019 3 MBNet 2020 4 DIDFuse
  • Unity项目架构与开发管理(视频笔记)

    Unity项目架构与开发管理 总的来说标题起的很大 视频比较基础 一 Unity 架构设计 1 EmptyGO EmptyGameObject 创建一个EmptyGameObject 挂一些脚本 主要使用GameObject Find 来控
  • Vue2需要拿到data里面初始化的数据

    在你比如提交提交表单搜索内容的时候呀 需要对数据进行初始化数据 你可以能会这样做 先定一个方法 在执行完一些操作后 就去执行初始化数据的方法 达到数据清空 状态初始化的效果 点击弹出框和点击提交的初始化数据 dialogInitializa
  • ctfshow学习记录-web入门(sql注入191-200)

    目录 web191 web192 web193 web194 web195 web196 web197 web198 web199 web200 九某人来更新啦 2023年第一篇wp新鲜出炉 web191 解答 增加了过滤 过滤了ascii
  • hive-update问题(实现hive一列的更新,给hive插入当前时间)

    问题 想在hive中给数据增加一列时间字段 这一列插入的是当前时间 update hive仅支持 update tablename set col name value 不支持update select的组合 要支持带查询的update的话
  • 修改注册表解决Win10 SSD卡顿

    转自 http www pconline com cn win10 739 7395324 html 11月12日 微软发布了Win10的首个大版本更新TH2 Threshold 2 小编也在第一时间下载并安装了它 然而奇怪的是 自从装上这
  • 虚拟机软件Parallels Desktop 18 mac(pd虚拟机) 中文功能

    Parallels Desktop 18 mac可以在 Mac 计算机上下载并安装 Windows 操作系统 在 Mac 与 Windows 之间无缝复制和粘贴文本或拖放对象 在 Mac 虚拟机中跨多个操作系统开发和测试 毫不费力地运行 W
  • value_type是什么

    这种方法叫做type traits 类型特性 代码片段 template
  • InsCode AI 测评

    CSDN AI写作助手上线了 InsCode AI 创作助手不仅能够帮助用户高效创作文章 而且能够作为对话式AI回答你想知道的问题 成倍提高生产力 欢迎大家使用新功能后分享自己的使用心得与建议 测评 一 你平时会使用这类AI工具吗 你对这类
  • Python绘图布局设计

    1 创建3行1列子图 其中在第二个子图再绘制3行10列子图 figure configuration fig plt figure figsize 17 2 54 22 2 54 dpi 300 gs GridSpec 3 1 width
  • nvm是做什么的?nvm怎么使用

    nvm安装与使用 1 nvm是什么 nvm全名node js version management 顾名思义是一个nodejs的版本管理工具 通过它可以安装和切换不同版本的nodejs 下面列出下载 安装及使用方法 2 下载 可在点此在gi
  • 关于openssl库的链接问题

    lib libIceSSL so undefined reference to RAND load file lib libIceSSL so undefined reference to BIO find type lib libIceS
  • Windows下安装RocketMQ、配置可视化界面

    1 下载RocketMQ 官网下载地址 https rocketmq apache org dowloading releases 2 安装及启动 1 前提条件 已安装jdk和maven 注意jdk安装路径不能有空格 否则启动mq时会报类加
  • LlamaIndex 简介:LLM 应用程序的数据框架

    LlamaIndex 是一个非凡的工具 创建为一个全面的 数据框架 以促进 LLM 大型语言模型 应用程序的开发 该框架与 ChatGPT 集成 充当大型语言模型和用户私人数据之间的桥梁 借助 LlamaIndex 用户可以轻松获取现有数据
  • 修改linux进程gid,修改Linux用户的UID、GID

    对于NFS共享文件 保留文件权限 需要UID GID与nfs server端一致 试验环境 Centos6 5 64 172 24 0 26 01 用户的UID和GID不能被占用 root 26 id mvp uid 501 mvp gid
  • Micropython加速物联网开发4 - SPI驱动5110LCD屏

    5110是84 48点阵LCD屏 其性价比高 接口简单 速度快 功耗低 非常适合电池供电的便携式终端设备 本例使用TPYBoard开发板SPI1接口驱动5110LCD屏 连线图即接口说明 LCD驱动程序 5110LCD的通信协议是一个没有M