图片详情

//接线’
#include <SPI.h>![在这里插入图片描述](https://img-blog.csdnimg.cn/8cb13d891ac24a5493d85426976f2af9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55CG5bel56eR55qE5b-n5Lyk,size_20,color_FFFFFF,t_70,g_se,x_16)#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels// Declaration for SSD1306 display connected using software SPI (default case):#define OLED_DC    1
#define OLED_CS     3
#define OLED_RESET  0
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,&SPI, OLED_DC, OLED_RESET, OLED_CS);#define NUMFLAKES     10 // Number of snowflakes in the animation example#define LOGO_HEIGHT   16
#define LOGO_WIDTH    16
static const unsigned char PROGMEM logo_bmp[] =
{ 0b00000000, 0b11000000,0b00000001, 0b11000000,0b00000001, 0b11000000,0b00000011, 0b11100000,0b11110011, 0b11100000,0b11111110, 0b11111000,0b01111110, 0b11111111,0b00110011, 0b10011111,0b00011111, 0b11111100,0b00001101, 0b01110000,0b00011011, 0b10100000,0b00111111, 0b11100000,0b00111111, 0b11110000,0b01111100, 0b11110000,0b01110000, 0b01110000,0b00000000, 0b00110000 };void setup() {Serial.begin(9600);// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internallyif(!display.begin(SSD1306_SWITCHCAPVCC)) {Serial.println(F("SSD1306 allocation failed"));for(;;); // Don't proceed, loop forever}// Show initial display buffer contents on the screen --// the library initializes this with an Adafruit splash screen.display.display();delay(2000); // Pause for 2 seconds// Clear the bufferdisplay.clearDisplay();// Draw a single pixel in whitedisplay.drawPixel(10, 10, SSD1306_WHITE);// Show the display buffer on the screen. You MUST call display() after// drawing commands to make them visible on screen!display.display();delay(2000);// display.display() is NOT necessary after every single drawing command,// unless that's what you want...rather, you can batch up a bunch of// drawing operations and then update the screen all at once by calling// display.display(). These examples demonstrate both approaches...testdrawline();      // Draw many linestestdrawrect();      // Draw rectangles (outlines)testfillrect();      // Draw rectangles (filled)testdrawcircle();    // Draw circles (outlines)testfillcircle();    // Draw circles (filled)testdrawroundrect(); // Draw rounded rectangles (outlines)testfillroundrect(); // Draw rounded rectangles (filled)testdrawtriangle();  // Draw triangles (outlines)testfilltriangle();  // Draw triangles (filled)testdrawchar();      // Draw characters of the default fonttestdrawstyles();    // Draw 'stylized' characterstestscrolltext();    // Draw scrolling texttestdrawbitmap();    // Draw a small bitmap image// Invert and restore display, pausing in-betweendisplay.invertDisplay(true);delay(1000);display.invertDisplay(false);delay(1000);testanimate(logo_bmp, LOGO_WIDTH, LOGO_HEIGHT); // Animate bitmaps
}void loop() {
}void testdrawline() {int16_t i;display.clearDisplay(); // Clear display bufferfor(i=0; i<display.width(); i+=4) {display.drawLine(0, 0, i, display.height()-1, SSD1306_WHITE);display.display(); // Update screen with each newly-drawn linedelay(1);}for(i=0; i<display.height(); i+=4) {display.drawLine(0, 0, display.width()-1, i, SSD1306_WHITE);display.display();delay(1);}delay(250);display.clearDisplay();for(i=0; i<display.width(); i+=4) {display.drawLine(0, display.height()-1, i, 0, SSD1306_WHITE);display.display();delay(1);}for(i=display.height()-1; i>=0; i-=4) {display.drawLine(0, display.height()-1, display.width()-1, i, SSD1306_WHITE);display.display();delay(1);}delay(250);display.clearDisplay();for(i=display.width()-1; i>=0; i-=4) {display.drawLine(display.width()-1, display.height()-1, i, 0, SSD1306_WHITE);display.display();delay(1);}for(i=display.height()-1; i>=0; i-=4) {display.drawLine(display.width()-1, display.height()-1, 0, i, SSD1306_WHITE);display.display();delay(1);}delay(250);display.clearDisplay();for(i=0; i<display.height(); i+=4) {display.drawLine(display.width()-1, 0, 0, i, SSD1306_WHITE);display.display();delay(1);}for(i=0; i<display.width(); i+=4) {display.drawLine(display.width()-1, 0, i, display.height()-1, SSD1306_WHITE);display.display();delay(1);}delay(2000); // Pause for 2 seconds
}void testdrawrect(void) {display.clearDisplay();for(int16_t i=0; i<display.height()/2; i+=2) {display.drawRect(i, i, display.width()-2*i, display.height()-2*i, SSD1306_WHITE);display.display(); // Update screen with each newly-drawn rectangledelay(1);}delay(2000);
}void testfillrect(void) {display.clearDisplay();for(int16_t i=0; i<display.height()/2; i+=3) {// The INVERSE color is used so rectangles alternate white/blackdisplay.fillRect(i, i, display.width()-i*2, display.height()-i*2, SSD1306_INVERSE);display.display(); // Update screen with each newly-drawn rectangledelay(1);}delay(2000);
}void testdrawcircle(void) {display.clearDisplay();for(int16_t i=0; i<max(display.width(),display.height())/2; i+=2) {display.drawCircle(display.width()/2, display.height()/2, i, SSD1306_WHITE);display.display();delay(1);}delay(2000);
}void testfillcircle(void) {display.clearDisplay();for(int16_t i=max(display.width(),display.height())/2; i>0; i-=3) {// The INVERSE color is used so circles alternate white/blackdisplay.fillCircle(display.width() / 2, display.height() / 2, i, SSD1306_INVERSE);display.display(); // Update screen with each newly-drawn circledelay(1);}delay(2000);
}void testdrawroundrect(void) {display.clearDisplay();for(int16_t i=0; i<display.height()/2-2; i+=2) {display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i,display.height()/4, SSD1306_WHITE);display.display();delay(1);}delay(2000);
}void testfillroundrect(void) {display.clearDisplay();for(int16_t i=0; i<display.height()/2-2; i+=2) {// The INVERSE color is used so round-rects alternate white/blackdisplay.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i,display.height()/4, SSD1306_INVERSE);display.display();delay(1);}delay(2000);
}void testdrawtriangle(void) {display.clearDisplay();for(int16_t i=0; i<max(display.width(),display.height())/2; i+=5) {display.drawTriangle(display.width()/2  , display.height()/2-i,display.width()/2-i, display.height()/2+i,display.width()/2+i, display.height()/2+i, SSD1306_WHITE);display.display();delay(1);}delay(2000);
}void testfilltriangle(void) {display.clearDisplay();for(int16_t i=max(display.width(),display.height())/2; i>0; i-=5) {// The INVERSE color is used so triangles alternate white/blackdisplay.fillTriangle(display.width()/2  , display.height()/2-i,display.width()/2-i, display.height()/2+i,display.width()/2+i, display.height()/2+i, SSD1306_INVERSE);display.display();delay(1);}delay(2000);
}void testdrawchar(void) {display.clearDisplay();display.setTextSize(1);      // Normal 1:1 pixel scaledisplay.setTextColor(SSD1306_WHITE); // Draw white textdisplay.setCursor(0, 0);     // Start at top-left cornerdisplay.cp437(true);         // Use full 256 char 'Code Page 437' font// Not all the characters will fit on the display. This is normal.// Library will draw what it can and the rest will be clipped.for(int16_t i=0; i<256; i++) {if(i == '\n') display.write(' ');else          display.write(i);}display.display();delay(2000);
}void testdrawstyles(void) {display.clearDisplay();display.setTextSize(1);             // Normal 1:1 pixel scaledisplay.setTextColor(SSD1306_WHITE);        // Draw white textdisplay.setCursor(0,0);             // Start at top-left cornerdisplay.println(F("Hello, world!"));display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' textdisplay.println(3.141592);display.setTextSize(2);             // Draw 2X-scale textdisplay.setTextColor(SSD1306_WHITE);display.print(F("0x")); display.println(0xDEADBEEF, HEX);display.display();delay(2000);
}void testscrolltext(void) {display.clearDisplay();display.setTextSize(2); // Draw 2X-scale textdisplay.setTextColor(SSD1306_WHITE);display.setCursor(10, 0);display.println(F("scroll"));display.display();      // Show initial textdelay(100);// Scroll in various directions, pausing in-between:display.startscrollright(0x00, 0x0F);delay(2000);display.stopscroll();delay(1000);display.startscrollleft(0x00, 0x0F);delay(2000);display.stopscroll();delay(1000);display.startscrolldiagright(0x00, 0x07);delay(2000);display.startscrolldiagleft(0x00, 0x07);delay(2000);display.stopscroll();delay(1000);
}void testdrawbitmap(void) {display.clearDisplay();display.drawBitmap((display.width()  - LOGO_WIDTH ) / 2,(display.height() - LOGO_HEIGHT) / 2,logo_bmp, LOGO_WIDTH, LOGO_HEIGHT, 1);display.display();delay(1000);
}#define XPOS   0 // Indexes into the 'icons' array in function below
#define YPOS   1
#define DELTAY 2void testanimate(const uint8_t *bitmap, uint8_t w, uint8_t h) {int8_t f, icons[NUMFLAKES][3];// Initialize 'snowflake' positionsfor(f=0; f< NUMFLAKES; f++) {icons[f][XPOS]   = random(1 - LOGO_WIDTH, display.width());icons[f][YPOS]   = -LOGO_HEIGHT;icons[f][DELTAY] = random(1, 6);Serial.print(F("x: "));Serial.print(icons[f][XPOS], DEC);Serial.print(F(" y: "));Serial.print(icons[f][YPOS], DEC);Serial.print(F(" dy: "));Serial.println(icons[f][DELTAY], DEC);}for(;;) { // Loop forever...display.clearDisplay(); // Clear the display buffer// Draw each snowflake:for(f=0; f< NUMFLAKES; f++) {display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, SSD1306_WHITE);}display.display(); // Show the display buffer on the screendelay(200);        // Pause for 1/10 second// Then update coordinates of each flake...for(f=0; f< NUMFLAKES; f++) {icons[f][YPOS] += icons[f][DELTAY];// If snowflake is off the bottom of the screen...if (icons[f][YPOS] >= display.height()) {// Reinitialize to a random position, just off the topicons[f][XPOS]   = random(1 - LOGO_WIDTH, display.width());icons[f][YPOS]   = -LOGO_HEIGHT;icons[f][DELTAY] = random(1, 6);}}}
}

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels// Declaration for SSD1306 display connected using software SPI (default case):#define OLED_DC    1
#define OLED_CS     3
#define OLED_RESET  0
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,&SPI, OLED_DC, OLED_RESET, OLED_CS);void setup() {Serial.begin(9600);// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internallyif(!display.begin(SSD1306_SWITCHCAPVCC)) {Serial.println(F("SSD1306 allocation failed"));for(;;); // Don't proceed, loop forever}// Clear the bufferdisplay.clearDisplay();}void loop() {testscrolltext();
}void testscrolltext(void) {display.clearDisplay();display.setTextSize(2); // Draw 2X-scale textdisplay.setTextColor(SSD1306_WHITE);display.setCursor(10, 0);display.println(F("scroll"));display.display();      // Show initial textdelay(100);// Scroll in various directions, pausing in-between:display.startscrollright(0x00, 0x0F);delay(2000);display.stopscroll();delay(1000);display.startscrollleft(0x00, 0x0F);delay(2000);display.stopscroll();delay(1000);display.startscrolldiagright(0x00, 0x07);delay(2000);display.startscrolldiagleft(0x00, 0x07);delay(2000);display.stopscroll();delay(1000);
}

SPI oled ssd1306 esp8266相关推荐

  1. 联盛德 HLK-W806 (八): 4线SPI驱动SSD1306/SSD1315 128x64 OLED液晶屏

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  2. 物联网开发笔记(48)- 使用Micropython开发ESP32开发板之控制OLED ssd1306屏幕

    一.目的 这一节我们学习如何使用我们的ESP32开发板来控制OLED ssd1306屏幕,此处使用的是I2C协议,大家可自行百度学习一下I2C. 二.环境 ESP32 + OLED ssd1306屏幕 ...

  3. microbit使用oled ssd1306液晶显示汉字和lcd1602液晶显示字符串

    最近几天在研究  microbit使用oled ssd1306液晶显示汉字和lcd1602液晶显示字符串 上图哈:microbit使用oled ssd1306液晶显示汉字 https://github ...

  4. 【开源项目介绍】STC32基于u8g2库DMA驱动IIC or SPI OLED屏幕显示

    [开源项目介绍]STC32基于u8g2库DMA驱动IIC or SPI OLED屏幕显示

  5. STM32—4线SPI驱动SSD1306 OLED

    文章目录 一.OLED简介 二.驱动SSD1306所需知识 1.引脚介绍 2.通信时序 3.显存GRAM 4.字库 5.SSD1306基本命令 三.代码讲解 1.相关引脚配置 2.模拟SPI通信 3. ...

  6. esp8266 OLED SSD1306程序集合

    文章目录 1.农历+时间 2.到元旦还有多少天 3.到指定的日期还有多少天 4.显示农历 +时间+倒计时日期 5.显示农历 +时间+倒计时日期-样式1 5.显示农历 +时间+倒计时日期-样式2 1.农 ...

  7. MSP430 G2553 硬件SPI OLED 单片机 0.96英寸7针OLED SPI 6针OLED

    SSD1306通信方式靠硬件选择: 四线SPI(只针对SSD1306的一个名字)的OLED款式1 D0时钟 D1数据 RST复位 DC数据命令选择 四线SPI(只针对SSD1306的一个名字)的OLE ...

  8. 7脚spi OLED屏幕改造成IIC屏幕

    最近在折腾OLED显示,手上有7脚的1306的OLED显示屏,两个默认的都是spi接口的使用,都是可以改造成IIC接口: 7pin 0.96寸OLED模块支持SPI和IIC接口 默认是4-SPI接口; ...

  9. 基于点灯科技的温湿度传感器设计:STM32C8T6+DHT11+0.96寸oled显示屏+ESP8266

    基于点灯科技的温湿度传感器设计,课程设计自取. 保证可以做出来,接线有手进行,小学生来了都会. 耗时一个礼拜,移植网上各种资料,最终形成了这样一个简洁的版本 并且,oled的显示由单片机控制,设计ap ...

  10. ESP32 开发笔记(二)OLED ssd1306 apds9960 手势控制

    ESP32 OLED Demo ESP32 OLED Demo 实现功能 硬件组成 软件设计 低功耗模式说明 低功耗模式硬件设计 触摸传感器工作周期 低功耗模式使用 OLED Demo 编译与运行 前 ...

最新文章

  1. 狂神说Java 之SpringBoot整合Shiro框架笔记!
  2. CSS属性之字体(Font)
  3. WebService 的创建,部署和使用
  4. HTTP请求消息数据格式分析以及request和response
  5. word自定义模板的存储位置
  6. 2021 年 Linux 界的 12 件大事
  7. linq 获取实体列表中的某个字段返回iliststring
  8. VARCHART XGantt教程之功能介绍
  9. 微信小程序的基本结构
  10. android 模拟器 界面,详细了解雷电安卓模拟器的界面介绍让你更好的使用模拟器...
  11. 晓黑板显示服务器开小差是啥问题,晓黑板怎样写作文
  12. 欧几里得(Euclid)算法
  13. 随想002:设计规范
  14. 想玩IEO又怕跑得慢?LBank的“锁仓释放”了解下
  15. 恐龙快打无限子弹修改方案
  16. 【macOS免费软件推荐】第6期:洛雪音乐
  17. and true和if都是python语言的保留字_python自学 第三章 python语言基础之保留字、标识符与内置函数...
  18. ORA-01210: data file header is media corrupt
  19. 桂林电子科技大学计算机学院钟艳如,桂林电子科技大学考研研究生导师简介-钟艳如...
  20. 阿里云服务器上安装nginx

热门文章

  1. 模糊控制 MATLAB 仿真
  2. JS 获取当前页面url(不含参数)
  3. linux dos2unix用法,Linux命令之dos2unix
  4. java nlpir_java实现NLPIR(ICTCLAS)分词
  5. 一种DC-DC转换器的分析
  6. CGLIB 动态代理
  7. 盒子科技刘恒:聚合支付系统演讲
  8. 影响科学圈的那些计算机代码
  9. web项目01-----项目需求分析,需求文档
  10. 联想笔记本键盘排线,联想笔记本原装键盘价格表 联想笔记本键盘如何更换