oled有两种接线方式:SPI和IIc,本文采用的OLED连接方式为SPI四线
使用的设备为:Arduino UNO 0.96寸 OLED-128X64 SPI 接口
oled的原理与LCD相同,点亮每个像素点组成图形.
对于特殊字符图形(如汉字)需要使用文字取模软件生成相应字模,以数组形式写入程序,最后扫描在oled上显示.
取模软件:链接:https://pan.baidu.com/s/1vWB0sEvODR9X5cWlBBQArg 密码:sepr
对于常用字符(数字,英文字母等)可以直接使用库函数,方便省事.
U8glib是一个在ARM,C51,Arduino等常用MCU上都可以得到支持的图形绘制库,用途广泛,兼容性优秀,功能也十分强大,U8glib可以直接从arduino编译环境中的库管理下载
注意:使用drawStr函数之前,需要使用setFont函数来设置一下要画出的字符的显示字体
1)方法定义
u8g_uint_t U8GLIB::drawStr(u8g_uint_t x, u8g_uint_t y, const char *s)
2)功能
显示字符,使用前要使用setFont函数设置要显示字符的字体(详见七楼 设置)
另外还有 drawStr90(); drawStr180(); drawStr270(); 使字符顺时针旋转响应的角度。
//注意:使用drawStr函数之前,需要使用setFont函数来设置一下要画出的字符的显示字体。
3)参数
x:字符左下角的横坐标
y:字符左下角的纵坐标
*s:要显示的字符
例子
u8g.setFont(u8g_font_osb18); //设置字体
u8g.drawStr(0, 20, "ABC"); //画出字符在(0,20)的位置
print()函数可以打印字符,字符串,变量值等。但是用之前需要用setPrintPos()来设置位置
print(...)
//参数为要打印的内容
例子
u8g.setPrintPos(0,15); //设置位置
u8g.print("Error Code: "); //打印内容
1)方法定义
void U8GLIB::drawXBMP(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, const u8g_pgm_uint8_t *bitmap)
2)功能
此函数是一个显示一个位图的方法。
3)参数
x:位图左上角的横坐标
y:位图左上角的纵坐标
w:位图的宽
h:位图的高
*bitmap:位图对象
例子
const uint8_t rook_bitmap[] U8G_PROGMEM = {
0x00, // 00000000
0x55, // 01010101
0x7f, // 01111111
0x3e, // 00111110
0x3e, // 00111110
0x3e, // 00111110
0x3e, // 00111110
0x7f // 01111111
};
u8g.drawBitmapP(0,0, 1, 8, rook_bitmap);
firstPage 图像显示
nextPage
drawPixe 点
drawLine 线
drawHLine 水平线
drawVLine 垂直线
drawTriangle 三角(实心)
drawFrame 矩形框
drawRFrame 圆角矩形框
drawBox 矩形(实心)
drawRBox 圆角矩形(实心)
drawCircle 圆
drawDisc 圆形(实心)
drawEllipse 圆弧
drawFilledEllipse 扇形(实心)
drawStr 显示字符串
print 输出
drawBitmapP 画位图
drawXMBP 画大尺寸位图
getHeight 获得显示器高度
getWidth 获得显示器宽度
getStrWidth 获得字符串宽度
setFont 设置字体
setPrintPos 设置输出位置
setColorIndex 设置显示与否
setRot90 /180 /270 显示内容旋转
setFontPosTop
常用函数使用方法
u8glib库资料整理
使用规格方法参考
绘图过程,必须依照下面的框架执行,将绘图显示的代码,放在firstPage和nextPage组成的循环内执行。
u8g.firstPage();
do {
// 此处放置显示代码
} while( u8g.nextPage() );
u8g.drawStr(0,0, “”);
###位图数据制作方法
打开软件 进行设置
设置选项界面不能关闭!否则会恢复初始状态!
输入汉字,选择字体和大小,点击生成字模,拷贝到程序即可
OLED屏 | arduino开发板 |
---|---|
GND | GND |
VCC | 3.3V 或 5V |
SCL /D0 | 10 |
GND | GND |
SDA/D1 | 9 |
RES | 13 |
DC | 11 |
CS | 12 七针模块有cs脚;直接连接就好了;如果是用六针的CS默认已经接地;不接就可以了 |
#include
#include "stdio.h"
#include "stdlib.h"
#include "U8glib.h"
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
U8GLIB_SSD1306_128X64 u8g(10, 9, 12, 11); // SW SPI Com: SCL = 10, SDA = 9, CS = 12, DC = 11,RES=RESET
void draw(void)
{
u8g.setFont(u8g_font_osb18);//设置要显示字符的字体
u8g.drawStr(0, 20, "Hello");//显示字符
u8g.drawStr(0, 50, "World");
u8g.setColorIndex(1);//显示对象为不透明
}
void setup(void)
{
}
void loop(void)
{
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
}
#include "stdio.h"
#include "stdlib.h"
#include "U8glib.h"
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
U8GLIB_SSD1306_128X64 u8g(10, 9, 12, 11); // SW SPI Com: SCL = 10, SDA = 9, CS = 12, DC = 11,RES=RESET
static const unsigned char sudu[2][32] PROGMEM={
{0x00,0x02,0x04,0x02,0xE8,0x3F,0x08,0x02,0xC0,0x1F,0x40,0x12,0x4F,0x12,0xC8,0x1F,
0x08,0x07,0x88,0x0A,0x48,0x12,0x28,0x22,0x08,0x02,0x14,0x00,0xE2,0x7F,0x00,0x00},/*"速",0*/
/* (16 X 16 , 宋体 )*/
{0x80,0x00,0x00,0x01,0xFC,0x7F,0x44,0x04,0x44,0x04,0xFC,0x3F,0x44,0x04,0x44,0x04,
0xC4,0x07,0x04,0x00,0xF4,0x0F,0x24,0x08,0x42,0x04,0x82,0x03,0x61,0x0C,0x1C,0x70},/*"度",1*/
/* (16 X 16 , 宋体 )*/
};
void draw(void) {
//画出速度16*16
u8g.drawXBMP( 0, 0,16, 16, sudu[0]);
u8g.drawXBMP( 16, 0,16, 16, sudu[1]);
}
void setup(void) {
}
void loop(void) {
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
}
效果