使用U8glib驱动12864图形液晶显示器(三)-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14486|回复: 3

使用U8glib驱动12864图形液晶显示器(三)

[复制链接]
发表于 2016-4-2 02:15 | 显示全部楼层 |阅读模式
摘自《Arduino程序设计基础(第二版)》,转载请注明出处

8.3.5        数据显示
drawStr() 函数只能显示字符串,如果要使用它显示数据到LCD,那需要先将数据转换为字符串,再调用drawStr() 函数完成显示,这就显得太麻烦了,为此u8glib还提供print()函数,
[mw_shl_code=cpp,true]print(data)[/mw_shl_code]
它可以用于输出任意类型的数据。
在使用print()函数之前,你仍然要使用setFont() 指定显示的字体,但与drawStr() 不同的是,print() 输出的字符的显示位置还需要使用setPrintPos() 函数指定。
[mw_shl_code=cpp,true]setPrintPos( x, y)[/mw_shl_code]
参数x、y用于指定字符的显示位置。

下面例程中我们使用了print() 函数输出int和String型数据:

[mw_shl_code=cpp,true]/*
使用print函数输出数据到LCD
图形显示器:OpenJumper MINI 12864
控制器:Arduino UNO
*/

#include "U8glib.h"

U8GLIB_MINI12864 u8g(10, 9, 8);

String t1="OpenJumper";
String t2="MINI";
int t3=12864;

// draw函数用于包含实现显示内容的语句
void draw(void) {
  // 设定字体->指定输出位置->输出数据
  u8g.setFont(u8g_font_ncenB14);
  u8g.setPrintPos(0, 20);
  u8g.print(t1);
  u8g.setFont(u8g_font_unifont);
  u8g.setPrintPos(50, 40);
  u8g.print(t2);
  u8g.setPrintPos(45, 60);
  u8g.print(t3);
}

void setup(void) {
}

void loop(void){
// u8glib图片循环结构:
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
// 等待一定时间后重绘
  delay(500);
}[/mw_shl_code]

下载以上程序后,你会看到如图8-17的效果。

图8-17 u8g数据显示效果
12864-2.jpg

你可以尝试使用print() 函数将传感器,或者其他要显示的数据输出到LCD上。


8.3.6        实验:绘制图形
u8glib还提供了一些绘图函数,用于在LCD上绘制简单的图形。

[mw_shl_code=cpp,true]drawFrame()[/mw_shl_code]
绘制一个矩形。
如使用u8g.drawFrame(10,12,30,20),可以得到如图8-18的矩形,其左上角坐标为(10,12),长30个像素,高20个像素。

图8-18 绘制矩形
18.png

[mw_shl_code=cpp,true]drawBox()[/mw_shl_code]
绘制一个实心矩形。
例如使用u8g.drawBox(10,12,20,30),即可得到如图8-19的效果。

图8-19 绘制实心矩形
19.png
[mw_shl_code=cpp,true]drawCircle()[/mw_shl_code]
绘制圆形和圆弧。
如使用u8g.drawCircle(20, 20, 14),可绘制如图8-20的效果,即一个圆心坐标为20,20,半径14的圆型。

图8-20 绘制圆形
20.png
你还可以添加以下参数用于绘制4分之一圆弧:
U8G_DRAW_UPPER_RIGHT
U8G_DRAW_UPPER_LEFT
U8G_DRAW_LOWER_LEFT
U8G_DRAW_LOWER_RIGHT

如使用u8g.drawCircle(20, 20, 14, U8G_DRAW_UPPER_RIGHT),则绘制了一个右上部分的四分之一圆弧,效果如图8-21所示。

图8-21 绘制圆弧
21.png

[mw_shl_code=cpp,true]drawLine()[/mw_shl_code]
给定两个坐标点,绘制一条直线。使用u8g.drawLine(7, 10, 40, 55) 的效果如图8-22所示。

图8-22 绘制线段
22.png

[mw_shl_code=cpp,true]drawPixel()[/mw_shl_code]
绘制一个点。使用u8g.drawPixel(14,23) 的效果如图8-23所示。

图8-23 绘制点
23.png

你可以自己尝试使用这些函数,在图形液晶显示器上绘制一些简单的图像。




摘自《Arduino程序设计基础(第二版)》,转载请注明出处
发表于 2016-4-2 10:06 | 显示全部楼层
本帖最后由 笨小鼬 于 2016-4-2 10:33 编辑

多谢分享,支持一下楼主
发表于 2016-9-20 23:42 | 显示全部楼层
你好,我买一块了晶奥的屏,现在想要实现按键切换两个页面,不知道U8glib库中有什么命令可以直接实现切换,还是要写两端显示代码,然后通过设置屏幕CS端的高低电平来清屏,然后再调用相应的显示代码段?谢谢噢。。。
发表于 2017-4-2 12:42 | 显示全部楼层
LZ 我用这个教程显示怎么老是乱码的?求解!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 01:10 , Processed in 0.093736 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表