如何在SSD1306上显示动态表情符号位图

news/2025/3/27 17:08:57/文章来源:https://www.cnblogs.com/linkstu/p/18789801

解锁您的SSD1306上充满活力的视觉效果!学习毫不费力地显示动态表情符号位图,并以风格增强您的项目。

在本教程中,我们将通过使用PCBX在线模拟环境在SSD1306 OLED显示器上显示位图图像的过程。本教程将介绍设置PCBX模拟,格式化位图数据,配置显示大小和管理图像延迟。

步骤1:设置PCBX仿真

•访问PCBX:进入PCBX在线模拟器页面。

•创建新项目:通过从主菜单中选择新项目来启动新项目。

添加组件:

•搜索Arduino UNO并将其拖到工作空间中。

•搜索SSD1306 OLED Display (I2C)并将其添加到您的工作区。

连接组件:

•将SSD1306的VCC连接到Arduino的5V。

•连接SSD1306的GND到Arduino的GND。

•将SSD1306的SDA连接到Arduino的A4 (SDA)。

•将SSD1306的SCL连接到Arduino的A5 (SCL)。

步骤2:安装所需的库

在PCBX仿真环境下:

•打开库管理器:在PCBX IDE中查找库管理器选项。

搜索库:如果还没有可用的库,安装以下库:

•Adafruit_GFX

•Adafruit_SSD1306

搜索库:安装以下库,如果它们还不可用:Adafruit_GFX

•Adafruit_SSD1306

这些库对于与SSD1306显示器交互以呈现图形(包括位图)是必不可少的。

步骤3:定义位图数据

接下来,您将定义要在SSD1306上显示的位图数据。确保位图数据格式正确,每个字节以逗号分隔,行以分号结尾。

第四步:模拟你的项目

•上传代码:点击PCBX IDE中的上传或编译按钮,编译并上传代码到模拟的Arduino。

•Run the Simulation:启动模拟。你应该看到你的位图图像显示在SSD1306 OLED显示器上,每个2秒。

结论

您已经成功地设置了PCBX在线模拟,以在带有Arduino草图的SSD1306显示器上显示位图图像。您可以随意修改位图数据,添加更多图像,并尝试不同的延迟以获得定制的显示体验。

代码

#include#include#include#define SCREEN_WIDTH 128 // OLED display width, in pixels#define SCREEN_HEIGHT 64 // OLED display height, in pixels#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);// Bitmap data for each image, each array represents one image// Please fill your bitmap data into these arraysconst unsigned char bitmap_nono[] PROGMEM = { /* Bitmap data */0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x7F,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0xFE,0x00,0x07,0xF0,0x00,0x00,0x00,0x01,0xF8,0x00,0x01,0xF8,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0xFC,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x7F,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x0C,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x1C,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x1C,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x1C,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x1C,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x1C,0x00,0x07,0x80,0x00,0x00,0x06,0x00,0x1C,0x00,0x07,0x80,0x0C,0x00,0x07,0xC0,0x1C,0x00,0x07,0x80,0x3E,0x00,0x07,0xF0,0x00,0x00,0x00,0x01,0xFE,0x00,0x07,0xFE,0x00,0x00,0x00,0x07,0xFE,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x0F,0xFC,0x00,0x00,0x00,0x07,0xFE,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0xFE,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};const unsigned char bitmap_unhappy[] PROGMEM = { /* Bitmap data */0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x80,0x1F,0xFF,0x00,0x00,0x00,0x1F,0xFF,0x80,0x1F,0xFF,0x00,0x00,0x00,0x1F,0xFF,0x80,0x1F,0xFF,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};const unsigned char bitmap_angry_demon[] PROGMEM = { /* Bitmap data */0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x07,0xE0,0x1F,0x80,0x7E,0x00,0x00,0x00,0x0F,0x80,0x06,0x00,0x1F,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x1C,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x7C,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,0xFC,0x00,0x00,0x00,0x03,0xF0,0x00,0x01,0xE0,0x0C,0x00,0x03,0x00,0x78,0x00,0x03,0xC0,0x1C,0x00,0x03,0x00,0x3C,0x00,0x03,0x80,0x0C,0x00,0x03,0x00,0x1C,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x1C,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x1C,0x00,0x03,0x80,0x00,0x79,0xE0,0x00,0x1C,0x00,0x03,0x80,0x00,0xFF,0xF0,0x00,0x1C,0x00,0x01,0xE0,0x01,0xFF,0xF8,0x00,0x78,0x00,0x01,0xF8,0x03,0xC7,0xBC,0x01,0xF8,0x00,0x00,0xF8,0x07,0x83,0x9E,0x01,0xF0,0x00,0x00,0x38,0x0F,0x01,0xCF,0x01,0xC0,0x00,0x00,0x00,0x1E,0x01,0xC7,0x80,0x00,0x00,0x00,0x00,0x3C,0x01,0xC3,0xC0,0x00,0x00,0x00,0x00,0x78,0x03,0xC1,0xE0,0x00,0x00,0x00,0x00,0xF0,0x07,0x80,0xF0,0x00,0x00,0x00,0x01,0xE0,0x0F,0x00,0x78,0x00,0x00,0x00,0x03,0xC0,0x1F,0x80,0x3C,0x00,0x00,0x00,0x07,0x80,0x3F,0xC0,0x1E,0x00,0x00,0x00,0x1F,0x00,0x79,0xE0,0x0F,0x80,0x00,0x00,0x0E,0x00,0xF0,0xF0,0x07,0x00,0x00,0x00,0x04,0x01,0xE0,0x78,0x02,0x00,0x00,0x00,0x00,0x03,0xC0,0x3C,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x1E,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x3C,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x18,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x08,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};//const unsigned char bitmap_ogre[] PROGMEM = { /* Bitmap data */ };//const unsigned char bitmap_cold[] PROGMEM = { /* Bitmap data */ };void setup() {Serial.begin(9600);// Initialize OLED displayif(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64Serial.println(F("SSD1306 allocation failed"));while(true); // If initialization fails, enter an infinite loop}display.clearDisplay();display.display();}void loop() {displayBitmap(bitmap_nono, SCREEN_WIDTH, SCREEN_HEIGHT);delay(200);displayBitmap(bitmap_unhappy, SCREEN_WIDTH, SCREEN_HEIGHT);delay(200);//Uncomment the following lines to display additional imagesdisplayBitmap(bitmap_angry_demon, SCREEN_WIDTH, SCREEN_HEIGHT);delay(200);// displayBitmap(bitmap_ogre, SCREEN_WIDTH, SCREEN_HEIGHT);// delay(2000);// displayBitmap(bitmap_cold, SCREEN_WIDTH, SCREEN_HEIGHT);// delay(2000);}void displayBitmap(const unsigned char *bitmap, uint16_t w, uint16_t h) {uint8_t bytes = (w + 7) / 8 * h; // Calculate the number of bytes for the bitmap datadisplay.clearDisplay();display.drawBitmap(0, 0, bitmap, w, h, SSD1306_WHITE);display.display();}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904872.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis基础数据结构——ZipList

ZipList 基于特殊写法实现的双端链表,由一系列特殊编码的连续内存块组成,可以像deque一样在双端压入/弹出,并且时间复杂度在O(1) 整体ZL结构如下zlbytes(uint32):当前zl总的byte数。 zltail(uint32):尾结点的offset,指向的是最后一个entry的起始地址。 zllen(uint16):记…

day:28 postman——环境变量(依赖,关联接口)

一.接口的环境变量 (1)定义变量 可以将需要填写的值设为变量 变量设置:{{}}(2)添加环境变量 方法一:方法二:(3)查看环境变量(4)选择环境,执行二.依赖接口 先登录接口成功,生成cookie值,才能让后面接口依赖 cookie值是保持会话 查看cookie值方法 方法一:方法二:…

L1.1 技术和产品准备度

L1.1 技术和产品准备度 技术和产品准备度 技术与产品的演进 ​ 上面这张图展示了如何在技术尚未完全成熟时,启动产品开发,以及技术如何随着新需求或洞察逐步演进,并支持产品的更新换代。产品1.0:由先前研发的的技术3支撑,加上“产品开发可以在预期的技术开发成果的基础上提…

从故障响应到客户信赖:华为ITR流程的五大核心步骤与实战案例

华为究竟是如何在与西方巨头的激烈竞争中崭露头角、脱颖而出的呢?答案是:凭借卓越的服务。今天我们来探讨一下华为是如何通过卓越的服务赢得全球市场的。 一、华为的三件大事 华为前高管费敏曾经总结过,华为的业务可以分成三件大事:1. 开发产品:这就是 IPD 流程,负责从有…

提升生产效率的关键: ethercat转TCPIP智能通信

大家好。最近在数据互联互通方面,我们迎来了一个重要的突破。作为生产管理系统的核心组成部分,数据互联互通一直是一个亟待解决的挑战。我们知道,EtherCAT和TCP/IP是两种不同的通信协议,它们之间的互通性一直存在问题。不过,现在有一款新产品值得关注,这款产品能够实现Et…

Trae初体验

Trae(国际版)的Ai搭载Claude-3.7-Sonnet(完全免费且速度很快)和DeepSeek-R1以及V3(不存在服务器繁忙)以及GPT-4o Trae国服的Ai搭载DouBao和DeepSeek。用Claude-3.7-Sonnet 写一个简易的贪吃蛇小游戏:这个贪吃蛇游戏包含以下功能:使用方向键控制蛇的移动 吃到食物会增加长度和…

C# 从零开始使用Layui.Wpf库开发WPF客户端

一、简介最近需要开发一个桌面版的工具软件,之前用得更多的是Winform,作为一个全干工程师,我们也要兼顾下WPF,趁此机会再研究下开源控件库。MaQaQ:Winform真好用(有个HZHControls控件库,值得一看)。 二、准备工作找了下开源控件库,诸如MaterialDesignInXAML、HandyCon…

聚点和闭包中点的等价条件

聚点有以下等价描述: 闭包中点有以下等价描述:这些等价描述在与导集和闭包的证明中能起到很大的作用。下面是一个例子。

Itext5生成高质量、易识别、适合小尺寸标签打印的二维码

高质量、易识别、小尺寸二维码生成 1.增大二维码的原始尺寸(例如 1000 x 1000 或更大),再缩放为 PDF 所需的大小。这样可以保留更多像素细节,提高识别率。 2.降低容错级别到 L 或 M,如果你的内容不是特别长或复杂的话,这样能减少密集度。 3.优化缩放方式: • 使用 Buffe…

【Docker】安装部署jenkins

docker安装部署jenkinsdocker安装jenkins  1、下载jenkins  2、创建挂载目录  3、启动jenkins容器  4、验证jenkins是否启动成功  5、获取管理员密码  6、下载安装插件 docker安装jenkins【1】下载jenkins拉取jenkins镜像 docker pull jenkins/jenkins:2.426.2-lts…

焊接保护气体智能调节控制器|节气装置

机器人焊接节气装置在焊接流程中扮演着至关重要的角色,它犹如一道坚实的屏障,为熔融金属营造一个纯净的焊接环境,有效抵御空气中氧气、氮气、水蒸气等不良因素的侵扰。具体而言,保护气体的多重功效可详尽阐述为以下几个层面:对焊缝的精心呵护。在诸如氩弧焊等精密焊接工艺…