目录
说明
后附进阶玩法:显示中文,外加简单库实现
官方模块使用
使用样例
方法说明
下面是绘图支持的方法
进阶玩法,显示中文
方法,对汉字取字模,然后按像素对字模进行显示
说明
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_Sent
display=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_Sent
display=Ssd1306_128x64_Init(board.GP0,board.GP1)
Decode16x16_Bytes_To_Pixel(data,x=0,y=0)
# Draw_Sent('锲而不舍金石可镂',0,0)
display.show()