测试效果展示:(狂飙蜗牛128)
全志H616 编写SSD1306 OLED屏幕测试程序 已附源码 (orangepi zero2)
源码:(记着装wiringpi库)
/*
* SSD1306 demo of block and font drawing.
* by @Ty
* Create time:2023/11/04
*/
//
//
#include
#include
#include
#include
#include
#include
#include "oled.h"
#include "font.h"
int oled_demo(struct display_info *disp) {
int i;
char buf[100];
//第一行显示内容 disp是oled设备的识别信息
oled_putstrto(disp, 0, 10, "Welcome Ty demo");
//使用字体1 即font1
disp->font = font1;
//下一行显示内容 disp是oled设备的识别信息
oled_putstrto(disp, 0, 20, "----Test Snail----");
//使用字体1 即font2
disp->font = font2;
//反复发送新的界面打印,达到动画效果
for (i=0; i<129; i++) {
//显示蜗牛爬了多少步,一步一个像素点;
sprintf(buf, "Snail Steps: %d ", i);
oled_putstrto(disp, 0, 0, buf);
//打印空格实时清屏蜗牛残留内存
oled_putstrto(disp, 120-i, 36+4, " ");
//打印移动蜗牛
oled_putstrto(disp, 128-i, 36+4, "@..");
//打印空格实时清屏蚂蚁残留内存
oled_putstrto(disp, 120, 56-i/2, " ");
//打印移动蚂蚁
oled_putstrto(disp, 120, 68-i/2, ".");
// 将要显示内容发送到oled
oled_send_buffer(disp);
}
return 0;
}
void show_error(int err, int add) {
//const gchar* errmsg;
//errmsg = g_strerror(errno);
printf("\nERROR: %i, %i\n\n", err, add);
//printf("\nERROR\n");
}
void show_usage(char *progname) {
printf("\nUsage:\n%s < I2C bus device node >\n (demo:/dev/i2c-3)\n", progname);
}
int main(int argc, char **argv) {
int e;
char filename[32];
struct display_info disp;
//在运行时要输入驱动文件 /dev/i2c-3,缺少参数就报错
if (argc < 2) {
show_usage(argv[0]);
return -1;
}
memset(&disp, 0, sizeof(disp));
sprintf(filename, "%s", argv[1]);
disp.address = OLED_I2C_ADDR;
disp.font = font2;
//打开设备 并检测是否成功 &disp是oled设备的识别信息
e = oled_open(&disp, filename);
if (e < 0) {
show_error(1, e);
} else {
//成功则继续执行oled显示函数 并判断是否成功
e = oled_init(&disp);
if (e < 0) {
show_error(2, e);
} else {
//成功则继续,打印start标志
printf("---------start--------\n");
//当打印完ole显示内容后,打印end标志
if (oled_demo(&disp) < 0)
show_error(3, 777);
printf("----------end---------\n");
}
}
return 0;
}