arduino u8g2库探秘

u8g2 类的 begin() 函数用于简化 Arduino 环境下的显示设置步骤,该函数在底层会依次调用 initDisplay()clearDisplay()setPowerSave() 三个函数:

 
bool begin(void)

begin() 函数还可以用于绑定按键检测事件(最高可以绑定 6 个按键),如果没有连接相应的按键,则对应的参数可以设置为 U8X8_PIN_NONE

bool begin(
  uint8_t menu_select_pin,
  uint8_t menu_next_pin,
  uint8_t menu_prev_pin,
  uint8_t menu_up_pin = U8X8_PIN_NONE,
  uint8_t menu_down_pin = U8X8_PIN_NONE,
  uint8_t menu_home_pin = U8X8_PIN_NONE
)

除了 begin() 函数之外,u8g2 类还提供有如下的屏幕显示初始化函数:

void setBusClock(uint32_t clock_speed); 设置总线通信的时钟频率,I²C 总线可以尝试 200000 或者 400000,SPI 总线可以尝试 1000000 或者 8000000
void setContrast(uint8_t value) 设置显示对比度/亮度,取值范围从 0 ~ 255

 

 

 

 

 1. u8g2.begin() —— 构造U8G2
初始化显示器, 清屏, 唤醒屏幕
/**
 * 初始化U8g2库
 * @Note 关联方法 initDisplay clearDisplay setPowerSave
 */
bool U8G2::begin(void)

 

2. u8g2.beginSimple() —— 构造U8G2

只是初始化显示器, 并不清屏, 也不唤醒屏幕

3. u8g2.initDisplay() —— 初始化显示控制器
/**
 * 初始化显示控制器
 */
void U8G2::initDisplay(void)

 

4. u8g2.clearDisplay() —— 清除屏幕内容

/**
 * 清除屏幕
 */
void U8G2::clearDisplay(void)

 

5. u8g2.setPowerSave() —— 是否开启省电模式

/**
 * 清除显示缓冲区
 * @param is_enable
 *        1 表示启用显示器的省电模式,屏幕上看不到任何东西
 *        0 表示禁用省电模式
 */
void U8G2::setPowerSave(uint8_t is_enable)

 

6. u8g2.clear() —— 清除操作

/**
 * 清除屏幕显示,清除缓冲区,光标回到左上角原点位置(0,0)
 * @Note 关联方法 home clearDisplay clearBuffer
 */
void U8G2::clear(void)

 

7. u8g2.clearBuffer() —— 清除缓冲区

/**
 * 清除内存中数据缓冲区
 */
void U8G2::clearBuffer(void)

 

 

9. u8g2.setAutoPageClear() —— 设置自动清除缓冲区

/**
 * 是否自动清除缓冲区
 * @param mode 0 表示关闭
 *             1 表示开启,默认是开启
 */
void U8G2::setAutoPageClear(uint8_t mode)
建议该方法保持默认就好,如果用户禁止了,那么需要自己维护缓冲区的状态或者手动调用clearBuffer;

 

10. u8g2.setBitmapMode() —— 设置位图模式

/**
 * 设置位图模式(定义drawXBM方法是否绘制背景颜色)
 * @param is_transparent
 *         0 绘制背景颜色,不透明,默认是该值
 *         1 不绘制背景颜色,透明
 * @Note 关联方法 drawXBM
 */
void U8G2::setBitmapMode(uint8_t is_transparent)

 

11. u8g2.setBusClock() —— 设置总线时钟

/**
 * 设置总线时钟(I2C SPI)
 * @param mode clock_speed 总线时钟频率(Hz)
 * @Note 关联方法 begin
 */
void U8G2::setBusClock(uint32_t clock_speed);
仅仅Arduino平台支持;
必须在u8g2.begin() 或者 u8g2.initDisplay()之前调用;

 

12. u8g2.setClipWindow() —— 限制绘图区域大小

/**
 * 设置采集窗口,窗口范围从左上角(x0,y0)到右下角(x1,y1)
 * 也就是我们绘制的内容只能在规范范围内显示
 * @param x0 左上角x坐标
 * @param y0 左上角y坐标
 * @param x1 右下角x坐标
 * @param y1 右下角y坐标
 * @Note 关联方法 begin
 */
void U8G2::setClipWindow(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t x1, u8g2_uint_t y1 );
可以通过 setMaxClipWindow 去掉该限制

 

13. u8g2.setCursor() —— 设置光标位置

/**
 * 设置绘制光标位置(x,y)
 * @Note 关联方法 print
 */
void U8G2::setCursor(u8g2_uint_t x, u8g2_uint_t y)

 

14. u8g2.setDisplayRotation() —— 设置显示器的旋转角度

/**
 * 设置显示器的旋转角度
 * @param u8g2_cb 旋转选项
 *        U8G2_R0 不做旋转 水平
 *        U8G2_R1 旋转90度
 *        U8G2_R2 旋转180度
 *        U8G2_R3 旋转270度
 *        U8G2_MIRROR 不做旋转 水平,显示内容是镜像的,暂时不理解
 */
void setDisplayRotation(const u8g2_cb_t *u8g2_cb)

 

15. u8g2.setDrawColor() —— 设置绘制颜色

/**
 * 设置绘制颜色(暂时还没有具体去了解用法)
 */
void U8G2::setDrawColor(uint8_t color)

 

16. u8g2.setFont() —— 设置字体集

/**
 * 设置字体集(字体集用于字符串绘制方法或者glyph绘制方法)
 * @param font 具体的字体集
 * @Note 关联方法  drawUTF8 drawStr drawGlyph print
 */
void U8G2::setFont(const uint8_t *font)
请看第九章获取字库更多信息

17. u8g2.setFontMode() 设置显示模式
启用(1)或禁用(0)透明模式

18. u8g2.setFontDirection() —— 设置字体方向
/**
 * 定义字符串绘制或者图形绘制的方向
 * @param dir 方向
 * @param 关联方法 drawStr
 */
void U8G2::setFontDirection(uint8_t dir)

 

 

六. 缓存相关函数

1. u8g2.getBufferPtr() —— 获取缓存空间的地址
/**
 * 获取缓存空间的地址
 * @return 返回缓存空间起始地址
 * @Note 关联方法 getBufferTileHeight, getBufferTileWidth, clearBuffer
 */
uint8_t *U8G2::getBufferPtr(void)

 

2. u8g2.getBufferTileHeight() —— 获取缓冲区的Tile高度

/**
 * 获取缓冲区的Tile高度
 * @return 返回高度值
 */
uint8_t U8G2::getBufferTileHeight(void)
一个tile等于8个像素点.

 

3. u8g2.getBufferTileWidth() —— 获取缓冲区的Tile宽度

/**
 * 获取缓冲区的Tile宽度
 * @return 返回宽度值
 */
uint8_t U8G2::getBufferTileWidth(void)

 

4. u8g2.getBufferCurrTileRow() —— 获取缓冲区的当前Tile row

/**
 * 获取缓冲区的当前Tile row行数
 * @return 返回当前的tilerow
 */
uint8_t U8G2::getBufferCurrTileRow(void)

 

5. u8g2.setBufferCurrTileRow() —— 设置缓冲区的当前Tile row

/**
 * 设置缓冲区的当前Tile row
 * @param 当前的tilerow
 */
void U8G2::setBufferCurrTileRow(uint8_t  row)
在 firstPage/nextPage 循环时,由于底层调用了setBufferCurrTileRow,所以尽量不要自己手动调用该方法

 

posted @ 2025-01-20 10:09  mcwhirr  阅读(533)  评论(0)    收藏  举报