96SEO 2026-02-20 00:27 13
U8glib是用于单色显示屏的图形库#xff0c;它可以用于51、Arduino、ARM控制显示屏#xff0c;目前作者olikraus已经更新到version2了#xff0…某些图片、表格在手机竖屏状态下会显示不全横屏显示即可。

最好是用平板或电脑看。
大部分内容摘自官网。
U8glib是用于单色显示屏的图形库它可以用于51、Arduino、ARM控制显示屏目前作者olikraus已经更新到version2了也就是U8g2lib下面简称U8g2。
U8g2这个库实际上包含两个库(api)U8g2和U8x8它们有如下特点
可处理所有图形支持很多字体。
几乎对字体大小没限制微控制器需要一定的存储空间来传递显示U8x8
只能输出文字只能输出固定像素的字体直接输出到显示屏微控制器无需缓冲区
这两个库还包含一个特殊的类也能看作一个子库U8log它能模拟一个输出终端功能如下
我在这里只给出Arduino相关的部分51和ARM大同小异。
下面我们结合实际操作来学习。
World!。
点击上方“文件”-“示例”-“U8g2”-“full_buffer”-“HelloWorld”先不要急着上传到Arduino要先根据你的屏幕控制器、像素删掉其中一个注释的//。
我的型号是淘宝上常见的0.96
OLED下图所以我用的是这句U8G2_SSD1306_128X64_NONAME_F_HW_I2C
虽然上面的”HelloWorld“看起来很长但实际上只有以下几句
U8G2_SSD1306_128X64_NONAME_F_HW_I2C
memoryu8g2.setFont(u8g2_font_ncenB08_tr);
}开头第一句是引用U8g2我们着重看第二句它就是配置”Setup“具体分成以下几部分
DescriptionExample前缀U8G2控制器驱动器SSD1306显示屏128x64_NONAME缓冲区大小1、2、或F(full)通信协议HW_I2C参数(U8G2_R0,
这个没什么好讲的一般淘宝上都会标出来实在不知道就问商家再不行就挨个试一下符合像素的那几句。
1表示RAM中只会储存一页画面的缓冲。
你需要用一个firstPage()/nextPage()循环来显示。
2和1类似但会储存两页。
官网还说2是1的两倍快但我实在不知道”快“指的是什么。
buffer”储存所有页面用clearBuffer()来清除缓冲用sendBuffer()来把缓冲发送到显示屏。
这一部分还没完全弄懂貌似就是F相当于一本书你可以预先在书上画很多页然后要显示哪一页就翻到那里。
1就相当于一块黑板你只能画一页东西要显示新的东西就要重新擦掉重画。
2就是两块黑板。
支持常见的SPI、I2C、6800和8080支持硬件HW和软件SW具体有下面几种
dc硬件SPI基于SPI库2ND_4W_HW_SPI如果板子支持第二个
基于Wire库68008-bit并行接口6800协议80808-bit并行接口8080协议
需要设置SCLSDA对应管脚..._SW_I2C(clock,
旋转/镜像描述U8G2_R0不旋转U8G2_R1顺时针旋转90度U8G2_R2顺时针旋转180度U8G2_R3顺时针旋转270度U8G2_MIRROR不旋转镜像翻转
如果你不需要用某个引脚但又需要一个参数可以用U8X8_PIN_NONE
256或以上的像素宽你可以在u8g2.h文件中取消注释//#define
由于这个模块比较常用所以我把它的详细介绍搬了过来。
其他模块请去官网。
显示不全的话请横屏查看
“128x64_noname”DescirptionU8G2_SSD1306_128X64_NONAME_1_SW_I2C(rotation,
bytesU8G2_SSD1306_128X64_NONAME_2_SW_I2C(rotation,
bytesU8G2_SSD1306_128X64_NONAME_F_SW_I2C(rotation,
bytesU8G2_SSD1306_128X64_NONAME_1_HW_I2C(rotation,
bytesU8G2_SSD1306_128X64_NONAME_2_HW_I2C(rotation,
bytesU8G2_SSD1306_128X64_NONAME_F_HW_I2C(rotation,
bytesU8G2_SSD1306_128X64_NONAME_1_2ND_HW_I2C(rotation,
bytesU8G2_SSD1306_128X64_NONAME_2_2ND_HW_I2C(rotation,
bytesU8G2_SSD1306_128X64_NONAME_F_2ND_HW_I2C(rotation,
U8X8_PIN_NONE)描述用上面的配置设置显示屏并且会清空显示屏退出显示屏的省电模式。
还可以设置按键将按键的对应引脚传递到对应参数按键要求低有效用getMenuEvent来检查按键事件从而构建用户交互界面。
initDisplayclearDisplaysetPowerSave
描述重新设置显示屏。
显示前一定要先调用这个函数。
它会让屏幕处在省电模式。
要让屏幕显示先取消省电模式setPowerSave相关setPowerSave,
is_enable)描述开启is_enable1或关闭is_enable0显示屏的省电模式。
当省电模式开启时屏幕上的内容不可见屏幕RAM的内容未更改。
这个函数在begin被调用。
U8G2::clear(void)描述清空屏幕display和缓冲区buffer的所有像素说实话我分不清这俩。
将print的指针cursor归位到左上角。
这个函数会调用
homeclearDisplayclearBuffer相关home,
U8G2::home(void)描述将print函数的指针游标cursor重置到左上角。
如果字体的参考点不在上方的话字体的一部分会看不见。
描述清空内部和显示屏的缓冲区的像素。
这个函数在begin函数内被调用因此除了初始化时之外无需再调用这个函数。
其他函数如
这个命令可以对_F_、_1_、_2_三种缓冲区大小都有效不要在单页的循环内使用这个命令在firstPage和nextPage
U8G2::clearBuffer(void)描述清空内部缓冲区的所有像素。
清楚后用
来将新的页面传递给显示屏。
这个函数只对_F_储存所有页面的情况有效见上面的缓冲器大小。
它还会发送一个刷新信号refreshDisplay给墨水屏。
u8g2.sendBuffer();delay(1000);sendBuffer
clearBuffer清空缓冲区用绘画函数向缓冲区添加内容。
这个函数只对_F_储存所有页面的情况有效见上面的缓冲器大小。
它还会发送一个刷新信号refreshDisplay给墨水屏。
U8G2::firstPage(void)描述这个和nextPage一起构成图像循环将内容发送到显示屏。
有一些限制不要在执行循环时更改显示内容。
循环时总是重新绘制所有内容而非一部分。
这样能节约ram参考sendBuffer。
u8g2.setFont(u8g2_font_ncenB14_tr);u8g2.drawStr(0,20,Hello
U8G2::nextPage(void)描述这个和firstPage一起构成图像循环将内容发送到显示屏。
有一些限制不要在执行循环时更改显示内容。
循环时总是重新绘制所有内容而非一部分。
这样能节约ram参考sendBuffer。
完成循环后这个函数会发送一个刷新命令refreshDisplay给墨水屏在返回0之前。
u8g2.setFont(u8g2_font_ncenB14_tr);u8g2.drawStr(0,20,Hello
U8G2::disableUTF8Print(void)描述禁止print函数用UTF8。
这是默认设置。
U8G2::enableUTF8Print(void)描述允许print函数用UTF8。
当其有效时可以传递unicode符号的字符串给print函数。
通常这个函数在begin后被调用
{u8g2.begin();u8g2.enableUTF8Print();
{u8g2.begin();u8g2.enableUTF8Print();
{u8g2.setFont(u8g2_font_unifont_t_chinese2);
adr)描述默认情况U8g2假设显示屏为最不可能的地址原文为By
display.。
如果需要设置一个不同的地址请在begin()之前调用这个函数。
参数I2C地址乘以2我也不知道为什么我用I2C_scan程序扫描到的地址为0x3C但只有输入0x780x3C*20x78才有效并且最低位必须为0才能写
这类函数有一个特点就是都以draw开头可以画各种点、线、形。
需要注意的是下面的所有坐标都是以左上角为0,
U8G2_SSD1306_128X64_NONAME_1_HW_I2C
0)为左上角。
可能会超出屏幕边界。
这个程序会用当前颜色setDrawColor来画颜色0会清除一个像素颜色1会设置一个像素。
*bitmap)描述在特定的x/y处画一个位图x/y对应位图的左上角。
位图的一部分可能会超出屏幕边界。
位图由bitmap数组给定。
xx坐标位图的左上角yy坐标位图的左上角cnt水平方向上位图的字数。
位图的宽度cnt*8。
h位图的高度
一种单色点阵图x/y对应点阵图的左上角。
颜色由setColorIndex给定。
在U8g2
2.15.x中引进了实/虚模式solid/transparent默认是实模式。
这个函数的XBMP版本即drawXBMP要求点阵图储存在PROGMEM中ROM内。
有很多工具可以将普通图片转换到XBM比如开源软件GIMP在线网站onlineconvertfree。
实在不知道可以参考教程Interfacing
x/y点阵图左上角的位置w/h点阵图的宽/高bitmap指向点阵图开头的指针
y1)描述在两点之间画一条直线这个函数会用当前颜色setDrawColor来画。
w)描述以x/y为左边起点w为长度向右画水平线。
线的一部分可能超出屏幕边界。
这个函数会用当前颜色setDrawColor来画颜色0为清除像素颜色1为设置像素。
h)描述以x/y为上面起点h为长度向下画竖直线。
线的一部分可能超出屏幕边界。
这个函数会用当前颜色setDrawColor来画颜色0为清除像素颜色1为设置像素。
y2)描述画一个实心的三角形。
参数为16bit。
图形会根据显示屏尺寸裁剪。
后面一段看不懂……
h)描述画一个实心矩形左上角的位置对应x/y宽为w高为h。
矩形的一部分可能会超出屏幕边界。
这个函数会用当前颜色setDrawColor来画对于单色显示屏颜色0表示清除像素颜色1表示显示像素。
u8g2.drawBox(3,7,25,15);drawBox示例
h)描述画一个空心框左上角的位置对应x/y宽为w高为h。
矩形的一部分可能会超出屏幕边界。
这个函数会用当前颜色setDrawColor来画对于单色显示屏颜色0表示清除像素颜色1表示显示像素。
u8g2.drawFrame(3,7,25,15);drawFrame示例
r)描述画一个有圆角的框/矩形以x/y为左上角的坐标以w/h为宽/长。
部分可能会超出屏幕边界。
圆角半径为r要求w
2*(r1)函数不会检查是否满足这个关系如果w或h小于2*(r1)会发生未定义的行为就是出错…这个函数会用当前颜色setDrawColor来画对于单色显示屏颜色0表示清除像素颜色1表示显示像素。
相关[setDrawColor]{#setDrawColor},
u8g2.drawRFrame(20,15,30,22,7);drawRFrame示例
y0)为圆心rad为半径画空心圆。
圆的直径为2*rad1。
不同opt参数可以设置画圆的不同部分可选的参数有U8G2_DRAW_UPPER_RIGHT、U8G2_DRAW_UPPER_LEFT、U8G2_DRAW_LOWER_LEFT、U8G2_DRAW_LOWER_RIGHT、U8G2_DRAW_ALL并且这些参数可以用|结合。
这个函数会用当前颜色setDrawColor来画。
U8G2_DRAW_UPPER_RIGHTU8G2_DRAW_UPPER_LEFTU8G2_DRAW_LOWER_LEFTU8G2_DRAW_LOWER_RIGHTU8G2_DRAW_ALL
y0)为圆心rad为半径画实心圆。
圆的直径为2*rad1。
不同opt参数可以设置画圆的不同部分可选的参数有U8G2_DRAW_UPPER_RIGHT、U8G2_DRAW_UPPER_LEFT、U8G2_DRAW_LOWER_LEFT、U8G2_DRAW_LOWER_RIGHT、U8G2_DRAW_ALL并且这些参数可以用|结合。
这个函数会用当前颜色setDrawColor来画。
U8G2_DRAW_UPPER_RIGHTU8G2_DRAW_UPPER_LEFTU8G2_DRAW_LOWER_LEFTU8G2_DRAW_LOWER_RIGHTU8G2_DRAW_ALL
encoding)描述画一个Unicode象形文字。
文字放在x/y像素上方。
U8g2只支持Unicode低16位编码的字符BMPencoding的值为0~65535。
只有当字体中有对应编码时才能画出来。
x/y字符在屏幕上的位置encoding字符的Unicode值
注这个绘画函数受setDrawColor和setFontMode控制
示例“雪人”是Unicode中的天气符号之一其Unicode编码为9731十进制/26032进制⛄。
“雪人”也是U8g2字体u8g2_font_unifont_t_symbol中的一个字。
u8g2.setFont(u8g2_font_unifont_t_symbols);u8g2.drawGlyph(5,
*s)描述画一个字符串。
第一个字符的位置为x/y。
调用这个函数前用setFont来指定一种字体。
要输入编码为127~255的字符的话用C/C/Arduino的转义字符
“\xab”16进制或“\xyz”8进制。
这个函数不能画编码大于等于256的字符请用drawUTF8或drawGlyph来这种字符。
这个绘画函数受setDrawColor和setFontMode控制用print来显示出数值型变量
u8g2.setFont(u8g2_font_ncenB14_tr);u8g2.drawStr(0,15,Hello
*s)描述画一个以UTF-8编码的字符串。
使用该函数的前提条件有两个
C/C/Arduino编译器必须支持UTF-8这是GNU编译器的默认设置而大多数Arduino用的正是GNU代码编辑器必须支持UTF-8Arduino
IDE支持如果满足上两条件你可以使用编码大于127的字符当然这个字符要在字体文件中存在见setFont。
好处代码的可读性更好可直接”复制“-”粘贴“象形文字到代码里。
坏处代码的移植性差strLen函数无法返回字符长度要用getUTF8Len来代替strLen
这个绘画函数受setDrawColor和setFontMode控制用print来显示出数值型变量
u8g2.setFont(u8g2_font_unifont_t_symbols);u8g2.drawUTF8(5,
函数见Arduino官网上的LiquidCrystalPrint和Serial.print()。
这个函数会在当前指针处setCursor用当前字体setFont打印文本或数字。
要想支持UTF-8可以用enableUTF8Print
u8g2.setFont(u8g2_font_ncenB14_tr);
mode)描述开启mode1或关闭mode0自动清除像素缓冲通过
*font)描述设置u8g2字体。
注意u8x8的字体无法使用。
字体的最后两个字母决定字体的种类或字符集
字体名字体种类u8g2_xxx_tx字体透明宽度可变u8g2_xxx_mx等宽字体u8g2_xxx_hx宽度可变普通高度u8g2_xxx_8x等宽字体宽度限制在8x8的格子中
字体名字符集u8g2_xxx_xeExtendedunicode
32~255u8g2_xxx_xrRestrictedunicode
32~127u8g2_xxx_xuUppercase数字和大写字母u8g2_xxx_xn数字和与日期时间相关的字符u8g2_xxx_x_something特殊的字符集看具体的字体图列
u8g2.setFont(u8g2_font_ncenB14_tf);
is_transparent)描述决定背景是否有颜色is_transparent
字体名字体种类适用于u8g2_xxx_tx透明字体宽度可变is_transparent
Modeu8g2_xxx_mx等宽字体is_transparent
0u8g2_xxx_hx宽度可变普通高度is_transparent
0u8g2_xxx_8x等宽字体宽度限制在8x8的格子中is_transparent
0显示屏的省电模式。
开启省电模式时显示屏上无显示但不改变RAM。
这个函数被begin调用。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback