SEO教程

SEO教程

Products

当前位置:首页 > SEO教程 >

郑州哪家专业网站建设公司能提供旅游企业网站定制服务?

96SEO 2026-02-20 00:27 13


U8g2

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

郑州哪家专业网站建设公司能提供旅游企业网站定制服务?

最好是用平板或电脑看。

大部分内容摘自官网。

U8g2

U8glib是用于单色显示屏的图形库它可以用于51、Arduino、ARM控制显示屏目前作者olikraus已经更新到version2了也就是U8g2lib下面简称U8g2。

U8g2这个库实际上包含两个库(api)U8g2和U8x8它们有如下特点

U8g2

可处理所有图形支持很多字体。

几乎对字体大小没限制微控制器需要一定的存储空间来传递显示U8x8

只能输出文字只能输出固定像素的字体直接输出到显示屏微控制器无需缓冲区

这两个库还包含一个特殊的类也能看作一个子库U8log它能模拟一个输出终端功能如下

U8log

我在这里只给出Arduino相关的部分51和ARM大同小异。

下面我们结合实际操作来学习。

安装U8g2

World!。

点击上方“文件”-“示例”-“U8g2”-“full_buffer”-“HelloWorld”先不要急着上传到Arduino要先根据你的屏幕控制器、像素删掉其中一个注释的//。

我的型号是淘宝上常见的0.96

OLED下图所以我用的是这句U8G2_SSD1306_128X64_NONAME_F_HW_I2C

u8g2(U8G2_R0,

虽然上面的”HelloWorld“看起来很长但实际上只有以下几句

#include

U8G2_SSD1306_128X64_NONAME_F_HW_I2C

u8g2(U8G2_R0,

memoryu8g2.setFont(u8g2_font_ncenB08_tr);

choose

}开头第一句是引用U8g2我们着重看第二句它就是配置”Setup“具体分成以下几部分

DescriptionExample前缀U8G2控制器驱动器SSD1306显示屏128x64_NONAME缓冲区大小1、2、或F(full)通信协议HW_I2C参数(U8G2_R0,

U8x8_PIN_NONE)

这个没什么好讲的一般淘宝上都会标出来实在不知道就问商家再不行就挨个试一下符合像素的那几句。

缓冲区大小

1表示RAM中只会储存一页画面的缓冲。

你需要用一个firstPage()/nextPage()循环来显示。

2和1类似但会储存两页。

官网还说2是1的两倍快但我实在不知道”快“指的是什么。

F表示“full

buffer”储存所有页面用clearBuffer()来清除缓冲用sendBuffer()来把缓冲发送到显示屏。

这一部分还没完全弄懂貌似就是F相当于一本书你可以预先在书上画很多页然后要显示哪一页就翻到那里。

1就相当于一块黑板你只能画一页东西要显示新的东西就要重新擦掉重画。

2就是两块黑板。

支持常见的SPI、I2C、6800和8080支持硬件HW和软件SW具体有下面几种

data,

dc硬件SPI基于SPI库2ND_4W_HW_SPI如果板子支持第二个

data

基于Wire库68008-bit并行接口6800协议80808-bit并行接口8080协议

软件模拟

需要设置SCLSDA对应管脚..._SW_I2C(clock,

data

旋转/镜像描述U8G2_R0不旋转U8G2_R1顺时针旋转90度U8G2_R2顺时针旋转180度U8G2_R3顺时针旋转270度U8G2_MIRROR不旋转镜像翻转

Pin

如果你不需要用某个引脚但又需要一个参数可以用U8X8_PIN_NONE

Bit模式

256或以上的像素宽你可以在u8g2.h文件中取消注释//#define

SSD1306

由于这个模块比较常用所以我把它的详细介绍搬了过来。

其他模块请去官网。

显示不全的话请横屏查看

Controller

“128x64_noname”DescirptionU8G2_SSD1306_128X64_NONAME_1_SW_I2C(rotation,

clock,

bytesU8G2_SSD1306_128X64_NONAME_2_SW_I2C(rotation,

clock,

bytesU8G2_SSD1306_128X64_NONAME_F_SW_I2C(rotation,

clock,

bytesU8G2_SSD1306_128X64_NONAME_1_HW_I2C(rotation,

[reset

bytesU8G2_SSD1306_128X64_NONAME_2_HW_I2C(rotation,

[reset

bytesU8G2_SSD1306_128X64_NONAME_F_HW_I2C(rotation,

[reset

bytesU8G2_SSD1306_128X64_NONAME_1_2ND_HW_I2C(rotation,

[reset])page

bytesU8G2_SSD1306_128X64_NONAME_2_2ND_HW_I2C(rotation,

[reset])page

bytesU8G2_SSD1306_128X64_NONAME_F_2ND_HW_I2C(rotation,

[reset])full

U8X8_PIN_NONE)描述用上面的配置设置显示屏并且会清空显示屏退出显示屏的省电模式。

还可以设置按键将按键的对应引脚传递到对应参数按键要求低有效用getMenuEvent来检查按键事件从而构建用户交互界面。

这个函数会调用

initDisplayclearDisplaysetPowerSave

相关initDisplay,

描述重新设置显示屏。

显示前一定要先调用这个函数。

它会让屏幕处在省电模式。

要让屏幕显示先取消省电模式setPowerSave相关setPowerSave,

begin

is_enable)描述开启is_enable1或关闭is_enable0显示屏的省电模式。

当省电模式开启时屏幕上的内容不可见屏幕RAM的内容未更改。

这个函数在begin被调用。

相关begin

U8G2::clear(void)描述清空屏幕display和缓冲区buffer的所有像素说实话我分不清这俩。

将print的指针cursor归位到左上角。

这个函数会调用

homeclearDisplayclearBuffer相关home,

clearDisplay,

U8G2::home(void)描述将print函数的指针游标cursor重置到左上角。

如果字体的参考点不在上方的话字体的一部分会看不见。

相关print,

描述清空内部和显示屏的缓冲区的像素。

这个函数在begin函数内被调用因此除了初始化时之外无需再调用这个函数。

其他函数如

sendBuffer

这个命令可以对_F_、_1_、_2_三种缓冲区大小都有效不要在单页的循环内使用这个命令在firstPage和nextPage

相关begin

U8G2::clearBuffer(void)描述清空内部缓冲区的所有像素。

清楚后用

sendBuffer

来将新的页面传递给显示屏。

这个函数只对_F_储存所有页面的情况有效见上面的缓冲器大小。

它还会发送一个刷新信号refreshDisplay给墨水屏。

相关sendBuffer

u8g2.sendBuffer();delay(1000);sendBuffer

函数原型

clearBuffer清空缓冲区用绘画函数向缓冲区添加内容。

这个函数只对_F_储存所有页面的情况有效见上面的缓冲器大小。

它还会发送一个刷新信号refreshDisplay给墨水屏。

注有点复杂把英文抄下来

U8G2::firstPage(void)描述这个和nextPage一起构成图像循环将内容发送到显示屏。

有一些限制不要在执行循环时更改显示内容。

循环时总是重新绘制所有内容而非一部分。

这样能节约ram参考sendBuffer。

相关nextPage

u8g2.setFont(u8g2_font_ncenB14_tr);u8g2.drawStr(0,20,Hello

World!);}

U8G2::nextPage(void)描述这个和firstPage一起构成图像循环将内容发送到显示屏。

有一些限制不要在执行循环时更改显示内容。

循环时总是重新绘制所有内容而非一部分。

这样能节约ram参考sendBuffer。

完成循环后这个函数会发送一个刷新命令refreshDisplay给墨水屏在返回0之前。

相关firstPage

u8g2.setFont(u8g2_font_ncenB14_tr);u8g2.drawStr(0,20,Hello

World!);}

U8G2::disableUTF8Print(void)描述禁止print函数用UTF8。

这是默认设置。

相关print,

U8G2::enableUTF8Print(void)描述允许print函数用UTF8。

当其有效时可以传递unicode符号的字符串给print函数。

通常这个函数在begin后被调用

void

{u8g2.begin();u8g2.enableUTF8Print();

enable

{u8g2.begin();u8g2.enableUTF8Print();

enable

{u8g2.setFont(u8g2_font_unifont_t_chinese2);

use

adr)描述默认情况U8g2假设显示屏为最不可能的地址原文为By

default,

display.。

如果需要设置一个不同的地址请在begin()之前调用这个函数。

参数I2C地址乘以2我也不知道为什么我用I2C_scan程序扫描到的地址为0x3C但只有输入0x780x3C*20x78才有效并且最低位必须为0才能写

相关begin

这类函数有一个特点就是都以draw开头可以画各种点、线、形。

需要注意的是下面的所有坐标都是以左上角为0,

#include

U8G2_SSD1306_128X64_NONAME_1_HW_I2C

u8g2(U8G2_R0,

0)为左上角。

可能会超出屏幕边界。

这个程序会用当前颜色setDrawColor来画颜色0会清除一个像素颜色1会设置一个像素。

xx坐标yy坐标

*bitmap)描述在特定的x/y处画一个位图x/y对应位图的左上角。

位图的一部分可能会超出屏幕边界。

位图由bitmap数组给定。

xx坐标位图的左上角yy坐标位图的左上角cnt水平方向上位图的字数。

位图的宽度cnt*8。

h位图的高度

相关drawXBM

一种单色点阵图x/y对应点阵图的左上角。

颜色由setColorIndex给定。

在U8g2

Version

2.15.x中引进了实/虚模式solid/transparent默认是实模式。

这个函数的XBMP版本即drawXBMP要求点阵图储存在PROGMEM中ROM内。

有很多工具可以将普通图片转换到XBM比如开源软件GIMP在线网站onlineconvertfree。

实在不知道可以参考教程Interfacing

displaying

x/y点阵图左上角的位置w/h点阵图的宽/高bitmap指向点阵图开头的指针

相关setBitmapMode

y1)描述在两点之间画一条直线这个函数会用当前颜色setDrawColor来画。

相关drawPixel,

w)描述以x/y为左边起点w为长度向右画水平线。

线的一部分可能超出屏幕边界。

这个函数会用当前颜色setDrawColor来画颜色0为清除像素颜色1为设置像素。

相关setDrawColor,

h)描述以x/y为上面起点h为长度向下画竖直线。

线的一部分可能超出屏幕边界。

这个函数会用当前颜色setDrawColor来画颜色0为清除像素颜色1为设置像素。

相关setDrawColor,

y2)描述画一个实心的三角形。

参数为16bit。

图形会根据显示屏尺寸裁剪。

后面一段看不懂……

Multiple

h)描述画一个实心矩形左上角的位置对应x/y宽为w高为h。

矩形的一部分可能会超出屏幕边界。

这个函数会用当前颜色setDrawColor来画对于单色显示屏颜色0表示清除像素颜色1表示显示像素。

相关drawFrame,

u8g2.drawBox(3,7,25,15);drawBox示例

drawFrame

h)描述画一个空心框左上角的位置对应x/y宽为w高为h。

矩形的一部分可能会超出屏幕边界。

这个函数会用当前颜色setDrawColor来画对于单色显示屏颜色0表示清除像素颜色1表示显示像素。

相关drawBox,

u8g2.drawFrame(3,7,25,15);drawFrame示例

drawRBox

r)描述画一个有圆角的框/矩形以x/y为左上角的坐标以w/h为宽/长。

部分可能会超出屏幕边界。

圆角半径为r要求w

2*(r1)且h

2*(r1)函数不会检查是否满足这个关系如果w或h小于2*(r1)会发生未定义的行为就是出错…这个函数会用当前颜色setDrawColor来画对于单色显示屏颜色0表示清除像素颜色1表示显示像素。

相关[setDrawColor]{#setDrawColor},

[drawBox]{#drawBox}

u8g2.drawRFrame(20,15,30,22,7);drawRFrame示例

drawCircle

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

注不支持Draw

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

注不支持Draw

encoding)描述画一个Unicode象形文字。

文字放在x/y像素上方。

U8g2只支持Unicode低16位编码的字符BMPencoding的值为0~65535。

只有当字体中有对应编码时才能画出来。

x/y字符在屏幕上的位置encoding字符的Unicode值

注这个绘画函数受setDrawColor和setFontMode控制

相关setFont

示例“雪人”是Unicode中的天气符号之一其Unicode编码为9731十进制/26032进制⛄。

“雪人”也是U8g2字体u8g2_font_unifont_t_symbol中的一个字。

u8g2.setFont(u8g2_font_unifont_t_symbols);u8g2.drawGlyph(5,

20,

*s)描述画一个字符串。

第一个字符的位置为x/y。

调用这个函数前用setFont来指定一种字体。

要输入编码为127~255的字符的话用C/C/Arduino的转义字符

“\xab”16进制或“\xyz”8进制。

这个函数不能画编码大于等于256的字符请用drawUTF8或drawGlyph来这种字符。

这个绘画函数受setDrawColor和setFontMode控制用print来显示出数值型变量

相关setFont,

u8g2.setFont(u8g2_font_ncenB14_tr);u8g2.drawStr(0,15,Hello

World!);drawStr示例

*s)描述画一个以UTF-8编码的字符串。

使用该函数的前提条件有两个

C/C/Arduino编译器必须支持UTF-8这是GNU编译器的默认设置而大多数Arduino用的正是GNU代码编辑器必须支持UTF-8Arduino

IDE支持如果满足上两条件你可以使用编码大于127的字符当然这个字符要在字体文件中存在见setFont。

好处代码的可读性更好可直接”复制“-”粘贴“象形文字到代码里。

坏处代码的移植性差strLen函数无法返回字符长度要用getUTF8Len来代替strLen

这个绘画函数受setDrawColor和setFontMode控制用print来显示出数值型变量

相关setFont,

u8g2.setFont(u8g2_font_unifont_t_symbols);u8g2.drawUTF8(5,

20,

函数见Arduino官网上的LiquidCrystalPrint和Serial.print()。

这个函数会在当前指针处setCursor用当前字体setFont打印文本或数字。

要想支持UTF-8可以用enableUTF8Print

相关enableUTF8Print,

u8g2.setFont(u8g2_font_ncenB14_tr);

u8g2.setCursor(0,

mode)描述开启mode1或关闭mode0自动清除像素缓冲通过

setFont

*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特殊的字符集看具体的字体图列

fontu8g2字体具体见这里

u8g2.setFont(u8g2_font_ncenB14_tf);

u8g2.drawStr(15,

is_transparent)描述决定背景是否有颜色is_transparent

0无颜色is_transparent

字体名字体种类适用于u8g2_xxx_tx透明字体宽度可变is_transparent

XOR

Modeu8g2_xxx_mx等宽字体is_transparent

0u8g2_xxx_hx宽度可变普通高度is_transparent

0u8g2_xxx_8x等宽字体宽度限制在8x8的格子中is_transparent

write

0显示屏的省电模式。

开启省电模式时显示屏上无显示但不改变RAM。

这个函数被begin调用。

is_enable开启1或关闭0省电模式



SEO优化服务概述

作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

SEO优化核心服务

网站技术SEO

  • 网站结构优化 - 提升网站爬虫可访问性
  • 页面速度优化 - 缩短加载时间,提高用户体验
  • 移动端适配 - 确保移动设备友好性
  • HTTPS安全协议 - 提升网站安全性与信任度
  • 结构化数据标记 - 增强搜索结果显示效果

内容优化服务

  • 关键词研究与布局 - 精准定位目标关键词
  • 高质量内容创作 - 原创、专业、有价值的内容
  • Meta标签优化 - 提升点击率和相关性
  • 内容更新策略 - 保持网站内容新鲜度
  • 多媒体内容优化 - 图片、视频SEO优化

外链建设策略

  • 高质量外链获取 - 权威网站链接建设
  • 品牌提及监控 - 追踪品牌在线曝光
  • 行业目录提交 - 提升网站基础权威
  • 社交媒体整合 - 增强内容传播力
  • 链接质量分析 - 避免低质量链接风险

SEO服务方案对比

服务项目 基础套餐 标准套餐 高级定制
关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

SEO优化实施流程

我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

1

网站诊断分析

全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

2

关键词策略制定

基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

3

技术优化实施

解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

4

内容优化建设

创作高质量原创内容,优化现有页面,建立内容更新机制。

5

外链建设推广

获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

6

数据监控调整

持续监控排名、流量和转化数据,根据效果调整优化策略。

SEO优化常见问题

SEO优化一般需要多长时间才能看到效果?
SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
你们使用白帽SEO技术还是黑帽技术?
我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
SEO优化后效果能持续多久?
通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
你们提供SEO优化效果保障吗?
我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

SEO优化效果数据

基于我们服务的客户数据统计,平均优化效果如下:

+85%
自然搜索流量提升
+120%
关键词排名数量
+60%
网站转化率提升
3-6月
平均见效周期

行业案例 - 制造业

  • 优化前:日均自然流量120,核心词无排名
  • 优化6个月后:日均自然流量950,15个核心词首页排名
  • 效果提升:流量增长692%,询盘量增加320%

行业案例 - 电商

  • 优化前:月均自然订单50单,转化率1.2%
  • 优化4个月后:月均自然订单210单,转化率2.8%
  • 效果提升:订单增长320%,转化率提升133%

行业案例 - 教育

  • 优化前:月均咨询量35个,主要依赖付费广告
  • 优化5个月后:月均咨询量180个,自然流量占比65%
  • 效果提升:咨询量增长414%,营销成本降低57%

为什么选择我们的SEO服务

专业团队

  • 10年以上SEO经验专家带队
  • 百度、Google认证工程师
  • 内容创作、技术开发、数据分析多领域团队
  • 持续培训保持技术领先

数据驱动

  • 自主研发SEO分析工具
  • 实时排名监控系统
  • 竞争对手深度分析
  • 效果可视化报告

透明合作

  • 清晰的服务内容和价格
  • 定期进展汇报和沟通
  • 效果数据实时可查
  • 灵活的合同条款

我们的SEO服务理念

我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

提交需求或反馈

Demand feedback