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 pinsspi.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]<<16code |= data_code[1]<<8code |= data_code[2]#获取 字 的UTF8码 ENDself.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-SCKRST    = 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

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

  1. 嵌入式开发-STM32硬件SPI驱动TFT屏

    嵌入式开发-STM32硬件SPI驱动TFT屏 这次用到的TFT屏 CubeMX设置 代码编写 增加的内容 需要注意问题 代码下载 这次用到的TFT屏 现在的TFT屏幕已经很便宜了,65536色屏幕,2 ...

  2. STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  3. esp32 spi 驱动 oled 屏显示来自 PC 的画面

    esp32 spi 驱动 oled 屏显示来自 PC 的画面 实验代码 gayhub 实验源码 设备及运行环境 装有python的电脑 Python 3.8.2 (tags/v3.8.2:7b3ab5 ...

  4. MSP430F5529 DriverLib 库函数学习笔记(十)SPI驱动墨水屏

    目录 上机实战 SPI 驱动 墨水屏 墨水屏介绍 电子纸的分类 电泳型电子纸技术详解 原理 结构 优势与不足 实验电路介绍 程序分析 引脚初始化 SPI模块初始化 发送和接收 全部源代码 main.c ...

  5. i.MX283开发板SPI驱动——RC522

    一.Linux下SPI驱动介绍 内核版本:2.6.35 Linux下SPI驱动和I2C驱动很类似,他们都是一种总线,且都不支持热拔插,因为一般情况下spi或者i2c设备都是直接焊接在板子上的,不像US ...

  6. micropython固件源码_Micropython加速物联网开发7 - Micropython源码编译与固件更新

    在实际开发中,难免会遇到编译Micropython源码的情况:比如当前固件损坏.固件版本升级.需要裁剪固件节省空间等.本文介绍在Linux环境中编译Micropython源码并下载到TPYBoard运 ...

  7. ESP32开发——SPI驱动水墨屏

    怎么说呢,感觉自己之前都白学了,又从头到尾看了一遍. 主要参考厂家给的源码,不过只有STM32的程序,但是大差不差,拿过来改一下就可以了,其次就是仔细查看芯片手册. 好的,最大的收获就是学会了如何翻手 ...

  8. STC8H开发(十三): I2C驱动DS3231高精度实时时钟芯片

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  9. 物联网开发笔记(77)- 使用Micropython开发ESP32开发板之使用MAX7219驱动控制8x8LED点阵模块(续)

    一.目的 这一节我们继续学习如何使用我们的ESP32开发板控制带MAX7219驱动的8x8LED点阵模.我们使用库来显示,更加方便. 二.环境 ESP32 + MAX7219驱动的8x8LED点阵模块 ...

  10. 物联网开发笔记(96)- Micropython ESP32开发之SPI接口控制Micro SD卡TF卡模块挂载内存卡

    一.目的 这一节我们学习如何使用乐鑫的ESP32开发板连接SD卡模块,进行目录.文件的相关操作. 在早前我们也介绍过TFT SD卡的操作,这里我们重新复习一下. 物联网开发笔记(60)- 使用Micr ...

最新文章

  1. oracle显示多表数据,Oracle DB 使用连接显示多个表中的数据
  2. 面部识别公司深网视界泄露数百万人信息
  3. r语言没有forecast这个函数_R语言学习日记——时间序列分析之ARIMA模型预测
  4. oracle ebs mom,OracleEBS-OAF开发笔记
  5. 转 python测试框架最全资源汇总
  6. POJ1942 Paths on a Grid(组合)
  7. 免校准的电量计量芯片_交直流两用计量芯片HLW8112
  8. pythonint函数的参数_pythonint函数怎么用
  9. 线性代数中的克莱姆法则与几何解释
  10. 微信小程序-视频教程-链接地址
  11. 【洛谷1137】旅行计划【拓扑排序模板】
  12. 成의 時運의 圖像 正易八卦圖
  13. 音频(二) 基音周期与共振峰
  14. xbox手柄适配器驱动_修复XBox DVD驱动器
  15. Go中的MPG模式解析
  16. 7月5日绝地求生服务器维护,7月5日绝地求生更新到几点 7月5日绝地求生更新时间及内容介绍...
  17. procreate绘画零基础入门教程
  18. ETL数据抽取---Apache Hop
  19. 技术人员的职业规划(方向)
  20. [附源码]Python计算机毕业设计菜鸟驿站快递分发系统

热门文章

  1. Eclipse插件开发
  2. eclipse插件下载最新地址
  3. Java利用MessageDigest进行MD5加密
  4. 天正双击墙体不能编辑_入门必备!20个超实用天正CAD技巧,设计院高手都在收藏...
  5. 【测试沉思录】5. 测试人员如何快速熟悉新业务?
  6. 电力系统微型计算机继电保护试题及答案,全国2010年月高等教育自学考试电力系统微型计算机继电保护试题及答案.doc...
  7. 私服游戏怎么选择服务器性能和配置。
  8. idea运行lua脚本
  9. 印象笔记如何分享链接_【记录】试用印象笔记最新的笔记分享出页面的功能
  10. Discuz网站地图在线生成