树莓派pico入坑笔记,ssd1306使用

目录

说明

后附进阶玩法:显示中文,外加简单库实现

官方模块使用

使用样例

方法说明

下面是绘图支持的方法

进阶玩法,显示中文

方法,对汉字取字模,然后按像素对字模进行显示


说明

circuitpython8.x使用iic接口驱动四线1306屏幕,屏幕参数128x64,由于屏幕是单色,所以衍射只用两种,程序涉及的颜色参数统一为:1白色,0黑色

后附进阶玩法:显示中文,外加简单库实现

需要的库博主已经上传

官方模块使用

使用样例

framebuf、ssd1306、font5x8三个文件需要上传到指定位置,font16x16ch为进阶玩法需要额外引入的文件,正常使用时不需要该文件

样例代码

import board
import busio
import adafruit_ssd1306# Create the I2C bus interface.
#i2c = board.I2C()  # uses board.SCL and board.SDA,return busio.I2C singal obj
i2c = busio.I2C(board.GP1, board.GP0)    # Pi Pico RP2040# Create the SSD1306 OLED class.
display_width = 128
display_height = 64
display = adafruit_ssd1306.SSD1306_I2C(display_width, display_height, i2c)
# You can change the I2C address with an addr parameter:
# display = adafruit_ssd1306.SSD1306_I2C(display_width, display_height, i2c, addr=0x31)# fills display with black pixels clearing it
display.fill(0)
display.show()# Set a pixel in the origin 0,0 position.
display.pixel(0, 0, 1)
# Set a pixel in the middle 64, 16 position.
display.pixel(64, 16, 1)
# Set a pixel in the opposite 127, 31 position.
display.pixel(127, 31, 1)
display.text('hello,wrld',50,0,1)
display.show()

效果

方法说明

i2c = busio.I2C(board.GP1, board.GP0) 指定使用的SCL和SDA引脚,参数格式(SCL,SDA)

display_width = 128

display_height = 64

display = adafruit_ssd1306.SSD1306_I2C(display_width, display_height, i2c)初始化屏幕对象,如果报错找不到设备,可以在后面的addr参数设置iic逻辑地址

# You can change the I2C address with an addr parameter:
# display = adafruit_ssd1306.SSD1306_I2C(display_width, display_height, i2c, addr=0x31)


display.fill(0)设置全屏黑色,参数列表:(颜色)

display.show()显示效果生效,注意如果在绘制屏幕后不使用show,显示效果不生效,fill方法除外

下面是绘图支持的方法

rotation显示器属性的旋转设置,可以是(0、1、2、3)之一,缺省设置值为0

display.rotation=0默认参数为0

circle(center_x, center_y, radius, color)在给定的中点位置、半径和颜色处画一个圆。 该方法仅绘制 1 像素的轮廓

fill(color)用指定的颜色填充

hline(x, y, width, color)从起始坐标(x,y)绘制一条水平线,直至给定长度width

vline(x, y, height, color)绘制一条起点为(x,y)的垂直线,直至给定长度width

line(x_0, y_0, x_1, y_1, color)绘制一条起点到终点的线段

pixel(x, y, color)将指定的像素设置为给定的颜色

rect(x, y, width, height, color, *, fill=False)在给定的位置、大小和颜色处绘制一个矩形。该方法仅绘制一个1像素的轮廓,fill值确定是否填充内部,缺省不填充

scroll(delta_x, delta_y)在 x 和 y 方向上移动 framebuf,注意只是将源buf参数进行偏移,源位置的像素参数并没有被刷新

text(string, x, y, color, *, font_name='font5x8.bin', size=1)将文本以可变大小放置在起点为(x,y)的屏幕上,文本大小size缺省值为1,字体库font_name缺省为font5x8,文本内部支持转义字符’\n'换行


进阶玩法,显示中文

方法,对汉字取字模,然后按像素对字模进行显示

取模方法,在线取模网站,本文的字模配置:尺寸为16x16,字节大小8bit,字高16,每字占2列,字体宋体abc。

后面编写的库基于该字体尺寸,针对128x64尺寸1306屏幕定制,读者可自行修改以使用其他尺寸,本库支持最大8x4共32个汉字显示,下面是对库文件的函数说明

Ssd130yan28x64_Init(SDA: Pin,SCL: Pin)

功能:初始化并返回一个1306iic对象,参数(board.SDA,board.SCL)

Decode16x16_Bytes_To_Pixel(data: tuple,x: int,y: int)

功能:显示字模到屏幕上,data字模数组为一维数组,支持单行显示数组包含的多个字模数据,单行最大8字

Draw_Sent(word: str,x: int,y: int)

功能:显示指定字符串中文到屏幕,支持自动换行,最大支持显示32字符,多出部分不显示

模块导入同上图配置

样例代码

import board
import busio
import adafruit_ssd1306
from font16x16ch import Ssd1306_128x64_Init,Decode16x16_Bytes_To_Pixel,Draw_Sentdisplay=Ssd1306_128x64_Init(board.GP0,board.GP1)
# Decode16x16_Bytes_To_Pixel(data,x=0,y=0)
Draw_Sent('锲而不舍金石可镂',0,0)
# for i in range(8):
#     display.pixel(i,0,0x21 & 1<<(7-i))
display.show()

可以调用Decode16x16_Bytes_To_Pixel绘制,但是注意不能超过7字,不然会因为变量太大导致栈溢出

data=(  0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x10, 0x84, 0x7f, 0xfc, 0x00, 0x00, 0x10, 0x10, 0x10, 0x84, 0x02, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x84, 0x04, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x84, 0x1f, 0xf0, 0x00, 0x00, 0x10, 0x10, 0x10, 0x84, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x10, 0x84, 0x11, 0x10, 0xff, 0xfe, 0x10, 0x10, 0x10, 0x84, 0x11, 0x10, 0x00, 0x00, 0x1f, 0xf0, 0x10, 0x84, 0x11, 0x10, 0x00, 0x00, 0x10, 0x10, 0x10, 0x84, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x84, 0x11, 0x10, 0x00, 0x00, 0x08, 0x20, 0x10, 0x84, 0x12, 0x90, 0x00, 0x00, 0x08, 0x10, 0x20, 0x84, 0x02, 0x40, 0x00, 0x00, 0x10, 0x08, 0x20, 0x84, 0x04, 0x20, 0x00, 0x00, 0x20, 0x04, 0x40, 0x04, 0x18, 0x10, 0x00, 0x00, 0x40, 0x04, 0x80, 0x04, 0x60, 0x08)
import board
import busio
import adafruit_ssd1306
from font16x16ch import Ssd1306_128x64_Init,Decode16x16_Bytes_To_Pixel,Draw_Sentdisplay=Ssd1306_128x64_Init(board.GP0,board.GP1)
Decode16x16_Bytes_To_Pixel(data,x=0,y=0)
# Draw_Sent('锲而不舍金石可镂',0,0)display.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/44668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

get和 post的区别

get 是从服务器上获取数据&#xff0c;post 是向服务器传送数据。POST 比 GET 安全&#xff0c;因为数据在地址栏上不可见。 3.了解get 方式提交的数据最多只能有 1024 字节&#xff0c;而 post 则没有此限制。 4.GET 使用 URL 或 Cookie 传参。而 POST 将数据放在 request BOD…

类和对象——【运算符重载】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件iostream的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …

【vueUse库Reactivity模块各函数简介及使用方法--中篇】

vueUse库是一个专门为Vue打造的工具库,提供了丰富的功能,包括监听页面元素的各种行为以及调用浏览器提供的各种能力等。其中的Browser模块包含了一些实用的函数,以下是这些函数的简介和使用方法: vueUse库Sensors模块各函数简介及使用方法 vueUseReactivity函数1. reactiv…

宏任务与微任务对比【前端异步】

目录 简介微任务与宏任务的基本概念宏任务&#xff08;Macrotasks&#xff09;微任务&#xff08;Microtasks&#xff09;宏任务示例微任务示例微任务与宏任务的执行时序 结论 简介 在JavaScript的异步编程中&#xff0c;理解事件循环&#xff08;Event Loop&#xff09;是至关…

Autogen和Crewai的对比

AutoGen和CrewAI是两种用于开发人工智能Agent应用的框架&#xff0c;各有其独特的特性和优势。以下是对这两者的详细对比&#xff1a; 共同点 编程语言&#xff1a;两者都使用Python编程语言。应用领域&#xff1a;都用于创建人工智能Agent应用程序。多代理对话&#xff1a;都…

Qt+MySQL实现社团管理系统

开发环境 ● Qt 5.14.1 ● Win10 ● Mysql 5.7.28 系统介绍 系统主要实现的功能如下图所示 社团管理系统主要包含了以下几个亮点功能 轮播图显示社团信息支持excel形式的导入导出学生信息权限控制&#xff08;管理员、超级管理员、用户&#xff09; 系统效果展示 登录界面…

AI学习指南机器学习篇-层次聚类合并策略

AI学习指南机器学习篇-层次聚类合并策略 在机器学习领域&#xff0c;层次聚类&#xff08;Hierarchical Clustering&#xff09;是一种常用的聚类方法&#xff0c;它通过不断合并相似的聚类来构建聚类层次结构。在层次聚类中&#xff0c;聚类合并策略是非常关键的一环&#xf…

前端工程化(01):Webpack、Gulp、Grunt三大自动化构建工具对比

10年前端开发和UI设计老司机→贝格前端工场&#xff0c;为您分享。本期介绍三款自动化构建工具&#xff0c;看看他们的工作原理和差异化&#xff0c;帮助你来选择。 Webpack、Gulp和Grunt都是前端构建工具&#xff0c;用于优化前端开发流程和提高开发效率。它们都可以自动化执…

c++ 的(引用)和*(指针)

在C中&#xff0c;&&#xff08;引用&#xff09;和*&#xff08;指针&#xff09;在函数参数中的使用有各自的特点和用途。下面是它们的具体使用方式以及它们之间的一些区别&#xff1a; 引用&#xff08;&&#xff09; 使用方式: 引用作为函数参数时&#xff0c;可…

Java8新语法

一、Java8新特性 JDK 8 正式版在 2013 年 9 月份发布。 Java8主要内容Lambda表达式函数式接口方法引用与构造器引用Stream API接口中的默认方法与静态方法新时间日期API其他新特性Java8新特性简介: 速度更快代码更少(增加了新的Lambda表达式)强大的Stream API便于并行最大化减少…

c++栈内存和堆内存的基本使用

c栈内存和堆内存的基本使用 #include <iostream>// 定义一个简单的结构体 struct Person {std::string name;int age; };int main() {// 栈内存分配int a 10; // 基本数据类型的栈内存分配Person person; // 结构体的栈内存分配person.name "John";person.a…

构建未来对话:从零开始实现基于Vue 3的AI聊天页面

大家好&#xff0c;今天我们将一起探索如何从零开始&#xff0c;使用Vue 3构建一个AI对话页面。这个过程不仅会让我们了解Vue 3的新特性&#xff0c;还会让我们对构建交互式Web应用有一个全新的认识。如果你是编程新手&#xff0c;别担心&#xff0c;我会用通俗易懂的语言&…

【Linux命令基础】vim的简介

文章目录 前言如何在Ubuntu中安装VimVim的作用Vim的优势vim的模式总结前言 在Linux环境中,我们经常需要编辑文本文件,无论是编写代码,还是修改配置文件。而在这些场景中,Vim编辑器无疑是我们的得力助手。Vim是从vi发展出来的一个文本编辑器,代码补全、编译及错误跳转等方…

HarmonyOS(43) @BuilderParam标签使用指南

BuilderParam BuilderParam使用举例定义模板定义具体实现BuilderParam初始化 demo源码参考资料 BuilderParam 该标签有的作用有点类似于设计模式中的模板模式&#xff0c;类似于指定一个UI占位符&#xff0c;具体的实现交给具体的Builder&#xff0c;顾名思义&#xff0c;可以…

SpringBoot项目架构实战之“网关zuul搭建“

第三章 网关zuul搭建 前言&#xff1a; 1、主要功能 zuul主要提供动态路由&#xff08;内置ribbon实现&#xff09;和过滤&#xff08;可以做统一鉴权过滤器、灰度发布过滤器、黑白名单IP过滤器、服务限流过滤器&#xff08;可以配合Sentinel实现&#xff09;&#xff09;功能…

学会创建虚拟网卡

此电脑-----管理 一直点击下一页 选择网络适配器 选择Microsoft----Microsoft KM-TEST环回适配器 然后点击下一页 完成的界面如下&#xff1a; 手动改IP

Git分支结构

目录 1. 线性分支结构 2. 分叉与合并结构 3. 分支与标签的关系 4. 并行开发与分支管理策略 测试&#xff08;本机系统为Rocky_linux9.4&#xff09; 合并失败解决 删除分支 删除本地分支 删除远程分支 Git 中的分支结构是版本控制中非常重要的概念之一&#xff0c;它描…

政安晨:【Keras机器学习示例演绎】(五十四)—— 使用神经决策森林进行分类

目录 导言 数据集 设置 准备数据 定义数据集元数据 为训练和验证创建 tf_data.Dataset 对象 创建模型输入 输入特征编码 深度神经决策树 深度神经决策森林 实验 1&#xff1a;训练决策树模型 实验 2&#xff1a;训练森林模型 政安晨的个人主页&#xff1a;政安晨 欢…

Python | Leetcode Python题解之第228题汇总区间

题目&#xff1a; 题解&#xff1a; class Solution:def summaryRanges(self, nums: List[int]) -> List[str]:def f(i: int, j: int) -> str:return str(nums[i]) if i j else f{nums[i]}->{nums[j]}i 0n len(nums)ans []while i < n:j iwhile j 1 < n …

Codeforces Round #956 (Div. 2) and ByteRace 2024 E. I Love Balls(概率期望)

题目 思路来源 官方题解 题解 特殊球不会改变普通球的顺序&#xff0c;所以都是alice拿一半里较多的部分 n-k1一半向上取整就是(n-k2)/2&#xff0c;同理n-k个一般向上取整(n-k1)/2 每个特殊球独立地来看&#xff0c;在每个空隙的概率相同 所以分别统计特殊球和非特殊球的…