micropython oled中文_esp32驱动SSD1306的oled显示汉字(micropython)

1.完整源码:

主函数oled.py

from ssd1306 import SSD1306_SPI

from ssd1306 import SSD1306

import font

import machine

def draw_chinese(lcd,ch_str,x_axis,y_axis):

offset_=0

y_axis=y_axis*16#中文高度一行占8个

x_axis=(x_axis*16)#中文宽度占16个

for k in ch_str:

code = 0x00#将中文转成16进制编码

data_code = k.encode("utf-8")

code |= data_code[0]<<16

code |= data_code[1]<<8

code |= data_code[2]

byte_data=font.byte2[code]

for y in range(0,16):

a_=bin(byte_data[y]).replace('0b','')

while len(a_)<8:

a_='0'+a_

b_=bin(byte_data[y+16]).replace('0b','')

while len(b_)<8:

b_='0'+b_

for x in range(0,8):

lcd.pixel(x_axis+x-offset_,y+y_axis,int(a_[x]))#文字的上半部分

lcd.pixel(x_axis+x+8-offset_,y+y_axis,int(b_[x]))#文字的下半部分

offset_+=16

WIDTH = const(128)

HEIGHT = const (64)

pdc = machine.Pin(27, machine.Pin.OUT)

pcs = machine.Pin(26, machine.Pin.OUT)

prst = machine.Pin(18, machine.Pin.OUT)

spi = machine.SPI(baudrate=100000, polarity=1, phase=0, sck=machine.Pin(0), mosi=machine.Pin(2), miso=machine.Pin(4))

spi.init(baudrate=200000) # set the baudrate

ssd = SSD1306_SPI(WIDTH, HEIGHT, spi, pdc, prst, pcs)

draw_chinese(ssd,'我',0,0)

draw_chinese(ssd,'我',1,1)

draw_chinese(ssd,'我',2,2)

draw_chinese(ssd,'我',3,3)

ssd.show()

字体包font.py

byte2={

0xE997B9:

[0x20,0x17,0x00,0x42,0x41,0x5F,0x41,0x41,0x4F,0x49,0x49,0x49,0x49,0x41,0x41,0x40,

0x00,0xFC,0x04,0x04,0x04,0xF4,0x04,0x04,0xE4,0x24,0x24,0xA4,0x44,0x04,0x14,0x08],#闹

0xe68891:

[0x04,0x0E,0x78,0x08,0x08,0xFF,0x08,0x08,0x0A,0x0C,0x18,0x68,0x08,0x08,0x2B,0x10,

0x40,0x50,0x48,0x48,0x40,0xFE,0x40,0x44,0x44,0x48,0x30,0x22,0x52,0x8A,0x06,0x02],#我

0xE9929F:

[0x10,0x10,0x3C,0x20,0x41,0xBD,0x11,0x11,0xFD,0x11,0x11,0x10,0x14,0x18,0x10,0x00,

0x20,0x20,0x20,0x20,0xFC,0x24,0x24,0x24,0x24,0xFC,0x24,0x20,0x20,0x20,0x20,0x20],#钟

0xE697B6:

[0x00,0x00,0x7C,0x44,0x45,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x7C,0x44,0x00,0x00,

0x08,0x08,0x08,0x08,0xFE,0x08,0x08,0x08,0x88,0x48,0x48,0x08,0x08,0x08,0x28,0x10]

}

2. esp硬件spi接线

oled esp32

GND GND

VCC VCC

D0 P0(SCK)

D1 P2(MOSI)

RES P18(RST)

DC P27(DC)

CS P26(CS)

3. 汉字取模

使用工具PCtoLCD2002完美版,参数设置如下图:

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy84MTg4MzgvMjAxOTAyLzgxODgzOC0yMDE5MDIyNjIwNDM0NzkxMi05ODM2NDc2NzcucG5n.jpg

生成字节数组:

0x04,0x0E,0x78,0x08,0x08,0xFF,0x08,0x08,0x0A,0x0C,0x18,0x68,0x08,0x08,0x2B,0x10,

0x40,0x50,0x48,0x48,0x40,0xFE,0x40,0x44,0x44,0x48,0x30,0x22,0x52,0x8A,0x06,0x02

4.显示效果

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy84MTg4MzgvMjAxOTAyLzgxODgzOC0yMDE5MDIyNjIwNDkyMzMzNi0xMTA0OTk5NjgzLnBuZw==.jpg

MicroPython之TPYBoard v102开发板控制OLED显示中文

转载请以链接形式注明文章来源,公众号:MicroPython玩家汇 0x00前言 之前看到一篇文章是关于TPYBoardv102控制OLED屏显示的,看到之后就想尝试一下使用OLED屏来显示中文.最近 ...

MicroPython实例之TPYBoard开发板控制OLED显示中文

0x00 前言 之前看到一篇文章是关于TPYBoard v102控制OLED屏显示的,看到之后就想尝试一下使用OLED屏来显示中文.最近利用空余时间搞定了这个实验,特此将实验过程及源码分享出来,方便以 ...

玩转X-CTR100 l STM32F4 l OLED显示-SSD1306无字库

我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      OLED显示屏具有自发光特性,不需要背光, ...

spi子系统之驱动SSD1306 OLED

spi子系统之驱动SSD1306 OLED 接触Linux之前,曾以为读源码可以更快的学习软件,于是前几个博客都是一边读源码一边添加注释,甚至精读到每一行代码,实际上效果并不理想,看过之后就忘记了.主 ...

I2C子系统之驱动SSD1306 OLED

理解I2C设备驱动框架,主要围绕四个结构体去分析就容易了. struct i2c_algorithm:提供I2C协议的实现的操作,如:master_xfer实现数据收发的最基本方法. struct i ...

灵感手环第一步——0&period;96寸OLED显示实验

这算是我这个系列的第一篇博客吧.首先要解决的就是屏幕显示问题.我选择了目前新兴起的OLED显示模块. OLED(OrganicLightEmittingDiode),中文译作有机发光二极管,目前被广泛 ...

2&period;数码相框-编码&lpar;ASCII&sol;GB2312&sol;Unicode&rpar;介绍&comma;并使LCD显示汉字字符&lpar;2&rpar;

在上章-学习了数码相框的框架分析(1)了 本章主要内容如下: 1)熟悉ASCII/GB2312/Unicode编码 2)写应用程序,使LCD显示汉字和字符 大家都知道,数据传输的是二进制,而字符和汉字 ...

Linux内核调用SPI平台级驱动&lowbar;实现OLED的显示功能

Linux内核调用SPI驱动_实现OLED显示功能 0. 导语 进入Linux的世界,发现真的是无比的有趣,也发现搞Linux驱动从底层嵌入式搞起真的是很有益处.我们在单片机.DSP这些无操作系统的裸 ...

使用Tslib在触摸屏上显示汉字【转】

转自:http://www.latelee.org/embedded-linux/use-tslib-to-display-chinese-character.html 终于到了在触摸屏上显示汉字了, ...

随机推荐

SQLite浅析

对于iOS工程师有一道常考的面试题,即iOS数据存储的方式 标答如下: Plist(NSArray\NSDictionary) Preference (偏好设置\NSUserDefaults) NSC ...

无法import的原因&lpar;ImportError&colon; No module named &ast;&ast;&ast;&ast;&ast;&rpar;

python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包.只要模块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用. 如果想 ...

poj 2007 Scrambled Polygon(极角排序)

http://poj.org/problem?id=2007 Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6701   A ...

iOS 关于时间戳的一些细节

最近遇到一个bug,在iPhone上获取当前的时间戳,没有问题,而用iPad来测试的时候,出现了时间戳不对.当时的代码 (需要精确到毫秒,所以*1000) NSTimeInterval t = [[N ...

No&period;2小白的HTML&plus;CSS心得篇

今天要强调的重点是分析把握好HTML标签的两个方面: 1.标签的用途(用途指的是用来干什么,有什么作用)在专业术语叫作 语义化. 举个列子:
换行的作用 见了它就明白它的语义就是 ...

SqlServer发送邮件,定时作业

今天偶然研究了一下sqlserver发送邮件的功能,之前听说过可以发,但是一直没尝试过,只是用C#写后台程序的方式来发邮件. 现在又多了一种发送邮件的途径. 大致的步骤如下: 1.配置sqlserve ...

&lbrack;SHOI2008&rsqb;循环的债务

Description Alice.Bob和Cynthia总是为他们之间混乱的债务而烦恼,终于有一天,他们决定坐下来一起解决这个问题. 不过,鉴别钞票的真伪是一件很麻烦的事情,于是他们决定要在清还债务 ...

Hibernate之综合问题

n + 1问题 query.iterate()方式返回迭代查询会开始发出一条语句:查询所有记录ID语句 Hibernate: select student0_.id ascol_0_0_from t_ ...

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于ESP32SSD1306的温度曲线显示程序的示例代码: ```c #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Wire.h> #include <OneWire.h> #include <DallasTemperature.h> #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); #define ONE_WIRE_BUS 5 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); #define NUM_POINTS 128 float tempData[NUM_POINTS]; int currentIndex = 0; void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.display(); sensors.begin(); for (int i = 0; i < NUM_POINTS; i++) { tempData[i] = 0; } } void loop() { sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); tempData[currentIndex] = tempC; currentIndex = (currentIndex + 1) % NUM_POINTS; display.clearDisplay(); display.setCursor(0, 0); display.println("Temperature Curve"); display.drawLine(0, 10, 127, 10, WHITE); display.drawLine(0, 30, 127, 30, WHITE); float minTemp = tempData[0]; float maxTemp = tempData[0]; for (int i = 0; i < NUM_POINTS; i++) { if (tempData[i] < minTemp) { minTemp = tempData[i]; } if (tempData[i] > maxTemp) { maxTemp = tempData[i]; } } float tempRange = maxTemp - minTemp; float yScale = 20.0 / tempRange; float xScale = 127.0 / NUM_POINTS; for (int i = 0; i < NUM_POINTS - 1; i++) { int x1 = i * xScale; int y1 = 30 - (tempData[(currentIndex + i) % NUM_POINTS] - minTemp) * yScale; int x2 = (i + 1) * xScale; int y2 = 30 - (tempData[(currentIndex + i + 1) % NUM_POINTS] - minTemp) * yScale; display.drawLine(x1, y1, x2, y2, WHITE); } display.display(); delay(1000); } ``` 这个程序使用了Adafruit的SSD1306库和DallasTemperature库,通过读取DS18B20温度传感器的数据来绘制温度曲线。程序将最近128个温度值存储在一个循环缓冲区中,并使用SSD1306 OLED显示器绘制温度曲线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值