【SSD1306 OLED屏幕测试程序 (开源)orangepi zero2 全志H616 】.md updata: 23/11/07

orangepi zero2 H616 SSD1306 OLED屏幕测试程序

orangepi zero2 配置wiringpi 库后,突发奇想构建一个测试oled屏幕的程序,放一个蜗牛每次移动一个像素点,实时显示蜗牛的步数,后面要显示其他内容在此代码上修改即可,如此一来,岂不妙哉!便捷型max!!

测试效果展示:(狂飙蜗牛128)

全志H616 编写SSD1306 OLED屏幕测试程序 已附源码 (orangepi zero2)

源码:(记着装wiringpi库)

复制代码
/*
 * SSD1306 demo of block and font drawing.
 * by @Ty 
 * Create time:2023/11/04
 */
//
//
 
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdint.h>

#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;
}
相关推荐
ysu_03141 天前
08-二叉树遍历:四种方式详解
c语言·数据结构·算法·leetcode
ocean21031 天前
2025-2026年C语言专题面试高频知识点洞察
c语言·面试·面试经验
Lzh编程小栈1 天前
STM32 DMA深度解析|原理、完整工作流程、寄存器、中断联动,嵌入式面试高频考点(F1系列)
c语言·stm32·单片机·mcu·面试
刃神太酷啦1 天前
Redis 核心进阶:哨兵、集群、缓存问题与分布式锁详解----《Hello Redis!》(6)
linux·c语言·数据库·c++·redis·分布式·缓存
luj_17681 天前
生物体如何应对功能击穿?
c语言·开发语言·c++·经验分享·算法
wuyk5551 天前
从零吃透 MQTT 通信|第 11 章 MQTT 项目调试验证、性能优化、常见疑难问题、OTA 升级基础
c语言·开发语言·stm32·学习·性能优化
白色的北极熊1 天前
C 语言 保留 2 位小数并且四舍五入输出
c语言
程序猿阿森1 天前
C语言预处理完全指南:宏定义、条件编译与头文件规范,一篇搞懂工程化编程
c语言·c++·编译
wuminyu1 天前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
Blockbuater_drug1 天前
FreeSASA: 开源 SASA 计算库,pip 一条命令替代 NACCESS
c语言·开源·sasa·freesasa·溶剂可及表面积·naccess·python api