找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7778|回复: 55
收起左侧

【Arduino】168种传感器模块系列实验(145)---0.91寸OLED液晶屏

  [复制链接]
ID:513258 发表于 2020-2-19 13:13 | 显示全部楼层 |阅读模式
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
实验一百四十四:0.91寸OLED液晶屏显示模块 IIC 12832液晶屏 兼容3.3v-5V


0.jpg



0-.jpg

回复

使用道具 举报

ID:513258 发表于 2020-2-19 14:26 | 显示全部楼层
本帖最后由 eagler8 于 2020-2-19 14:55 编辑

0-0.jpg

OLED
OLED是英文Organic Light Emitting Display(有机发光显示器)的简称,它的发光原理是指有机半导体材料和发光材料在电场驱动下,通过载流子注入和复合导致发光。通过搭配不同的有机材料,就可以发出不同颜色的光,来达到彩显示器的要求。也有人把OLED拼写为 Organic Light Emitting Diode (有机发光二极管),两种写法意思基本一样。

由于OLED是自发光器件,每个像素自己都会发光,并且透光率很高,因此,与时下液晶电视都采用的LCD面板相比,其亮度与对比度都比LCD胜出一筹,视角可达170度,图像更加鲜艳,耗电量更小。另外,OLED的发光层比较轻,因此它的基层可使用富于柔韧性的材料,而不会使用刚性材料。OLED基层为塑料材质,而LCD、PDP、SED、TDEL等显示器则需使用玻璃基板,因此,OLED显示器的发光效率是目前所有显示器中排名最高。

最近几年,在欧洲还诞生了一种用高分子有机材料制造发光二极管的技术,称为POLED(Polymer Organic Light Emitting Display)技术,由于高分子有机材料可以溶于有机溶剂,因此,POLED显示器将来可以用印刷技术来进行生产,从而可以大大降低生产成本。

回复

使用道具 举报

ID:513258 发表于 2020-2-19 14:41 | 显示全部楼层
OLED结构
OLED器件由基板、阴极、阳极、空穴注入层(HIL)、电子注入层(EIL)、空穴传输层(HTL)、电子传输层(ETL)、电子阻挡层(EBL)、空穴阻挡层(HBL)、发光层(EML)等部分构成。其中,基板是整个器件的基础,所有功能层都需要蒸镀到器件的基板上;通常采用玻璃作为器件的基板,但是如果需要制作可弯曲的柔性OLED器件,则需要使用其它材料如塑料等作为器件的基板。阳极与器件外加驱动电压的正极相连,阳极中的空穴会在外加驱动电压的驱动下向器件中的发光层移动,阳极需要在器件工作时具有一定的透光性,使得器件内部发出的光能够被外界观察到;阳极最常使用的材料是ITO。空穴注入层能够对器件的阳极进行修饰,并可以使来自阳极的空穴顺利的注入到空穴传输层;空穴传输层负责将空穴运输到发光层;电子阻挡层会把来自阴极的电子阻挡在器件的发光层界面处,增大器件发光层界面处电子的浓度;发光层为器件电子和空穴再结合形成激子然后激子退激发光的地方;空穴阻挡层会将来自阳极的空穴阻挡在器件发光层的界面处,进而提高器件发光层界面处电子和空穴再结合的概率,增大器件的发光效率;电子传输层负责将来自阴极的电子传输到器件的发光层中;电子注入层起对阴极修饰及将电子传输到电子传输层的作用;阴极中的电子会在器件外加驱动电压的驱动下向器件的发光层移动,然后在发光层与来自阳极的空穴进行再结合。

01.jpg


回复

使用道具 举报

ID:513258 发表于 2020-2-19 14:54 | 显示全部楼层
01-.jpg

OLED特性
OLED技术之所以能够获得广泛的应用,在于其与其它技术相比,具有以下优点:
(1)功耗低
与LCD相比,OLED不需要背光源,而背光源在LCD中是比较耗能的一部分,所以OLED是比较节能的。例如,24in的AMOLED模块功耗仅仅为440mw,而24in的多晶硅LCD模块达到了605mw。
(2)响应速度快
OLED技术与其他技术相比,其响应速度快,响应时间可以达到微秒级别。较高的响应速度更好的实现了运动的图像。根据有关的数据分析,其响应速度达到了液晶显示器响应速度的1000倍左右。
(3)较宽的视角
与其他显示相比,由于OLED是主动发光的,所以在很大视角范围内画面是不会显示失真的。其上下,左右的视角宽度超过170度。
(4)能实现高分辨率显示
大多高分辨率的OLED显示采用的是有源矩阵也就是AMOLED,它的发光层可以是吸纳26万真彩色的高分辨率,并且随着科学技术的发展,其分辨率在以后会得到更高的提升。
(5)宽温度特性
与LCD相比,OLED可以在很大的温度范围内进行工作,根据有关的技术分析,温度在-40摄氏度到80摄氏度都是可以正常运行的。这样就可以降低地域限制,在极寒地带也可以正常使用。
(6)OLED能够实现软屏
OLED可以在塑料、树脂等不同的柔性衬底材料上进行生产,将有机层蒸镀或涂布在塑料基衬上,就可以实现软屏。
(7)OLED成品的质量比较轻
与其他产品相比,OLED的质量比较小,厚度与LCD相比是比较小的,其抗震系数较高,能够适应较大的加速度,振动等比较恶劣的环境。

回复

使用道具 举报

ID:513258 发表于 2020-2-19 15:07 | 显示全部楼层
OLED优势
相比传统的LCD技术,OLED显示技术具有明显的优势,OLED屏幕厚度可以控制在1mm以内,而LCD屏幕厚度通常在3mm左右,并且重量更加轻盈。OLED屏幕的液态结构可以保证屏幕的抗衰性能,并且具有LCD不具备的广视角,可以实现超大范围内观看同一块屏幕,画面不会失真。反应速度是LCD屏幕的千分之一。并且OLED屏幕耐低温,可以在-40℃环境下正常显示内容,发光效率更高、能耗低、生态环保,可以制作成曲面屏,从而给人们带来不同的视觉冲击。

OLED是一种利用多层有机薄膜结构产生电致发光的器件,它很容易制作,而且只需要低的驱动电压,这些主要的特征使得OLED在满足平面显示器的应用上显得非常突出。OLED显示屏比LCD更轻薄、亮度高、功耗低、响应快、清晰度高、柔性好、发光效率高,能满足消费者对显示技术的新需求。全球越来越多的显示器厂家纷纷投入研发,大大的推动了OLED的产业化进程。

01-7-.jpg


回复

使用道具 举报

ID:513258 发表于 2020-2-20 10:13 | 显示全部楼层
04.jpg

0.91寸OLED液晶屏显示模块参数
驱动芯片:SSD1306
支持接口:I2C
显示颜色:白色
高分辨率: 128×32
可视角度:大于160°
工作电压:3.3V / 5V
模块大小:36 x 12.5(mm)

回复

使用道具 举报

ID:513258 发表于 2020-2-20 10:39 | 显示全部楼层
驱动芯片SSD1306方块图

04-.jpg

回复

使用道具 举报

ID:513258 发表于 2020-2-20 10:52 | 显示全部楼层
模块电原理图

06-2.jpg

回复

使用道具 举报

ID:513258 发表于 2020-2-20 11:05 | 显示全部楼层
06-0.jpg

06-3.jpg

回复

使用道具 举报

ID:513258 发表于 2020-2-20 11:20 | 显示全部楼层
05.jpg
回复

使用道具 举报

ID:513258 发表于 2020-2-20 11:33 | 显示全部楼层
本帖最后由 eagler8 于 2020-2-20 14:23 编辑

03.jpg
OLED模块引脚说明
GND ------ 地线
VCC ------ 电源
(因为模块内部自带稳压,所以3.3~5V供电都是ok的)
SDA ------ I2C 数据线(接A4)
SCL  ------ I2C 时钟线(接A5)
(可以看到模块后面有一个U2芯片,就是用来稳压的)

回复

使用道具 举报

ID:513258 发表于 2020-2-20 11:48 | 显示全部楼层
下载安装最新库
https://learn.adafruit.com/monoc ... ibrary-and-examples
其中OLED模块的专用库名称是SSD1306,另外需要配合图形库GFX操作
不建议使用NB的U8glib,因为这个库强大到哭,所以编译和下载都太消耗时间了。

07.jpg


回复

使用道具 举报

ID:513258 发表于 2020-2-20 11:58 | 显示全部楼层
09 (1).jpg


将这些OLED与Arduino一起使用需要安装两个库:Adafruit_SSD1306和Adafruit_GFX,Adafruit_SSD1306处理与硬件之间的低级通信,Adafruit_GFX在此基础上构建以添加图形功能,例如线条,圆圈和文本。
回复

使用道具 举报

ID:513258 发表于 2020-2-20 12:50 | 显示全部楼层
Arduino的Adafruit_GFX库为我们所有的LCD和OLED显示器提供了通用语法和图形功能集。这使Arduino草图可以轻松地在显示类型之间进行调整,而不必花太多精力……而且任何新功能,性能改进和错误修复将立即应用于我们完整的彩色显示屏产品中。该Adafruit_GFX库可以使用安装Arduino的库管理 ...这是首选的和现代的方式。从Arduino的“草图”菜单中,选择“包含库”,然后选择“管理库…”。

另有下载库链接  https://codeload.github.com/adaf ... -Library/zip/master

10 (1).jpg


回复

使用道具 举报

ID:513258 发表于 2020-2-20 14:43 | 显示全部楼层
实验开源测试代码


  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料 +代码 +图形 +仿真)
  3.   实验一百四十四:0.91寸OLED液晶屏显示模块 IIC
  4.   安装库:IDE—工具—管理库—搜索Adafruit_SSD1306—安装
  5.   安装库:IDE—工具—管理库—搜索Adafruit_GFX—安装
  6.   实验接线方法
  7.   oled模块    Ardunio Uno
  8.   GND---------GND接地线
  9.   VCC---------5V 接电源
  10.   SDA---------A4
  11.   SCL ------- A5
  12.   实验之一:点亮SSD1306_128x32 OLED_i2c屏
  13. */

  14. #include <SPI.h>
  15. #include <Wire.h>
  16. #include <Adafruit_GFX.h>
  17. #include <Adafruit_SSD1306.h>

  18. #define SCREEN_WIDTH 128 // OLED display width, in pixels
  19. #define SCREEN_HEIGHT 32 // OLED display height, in pixels

  20. // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
  21. #define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
  22. Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

  23. #define NUMFLAKES     10 // Number of snowflakes in the animation example

  24. #define LOGO_HEIGHT   16
  25. #define LOGO_WIDTH    16
  26. static const unsigned char PROGMEM logo_bmp[] =
  27. { B00000000, B11000000,
  28.   B00000001, B11000000,
  29.   B00000001, B11000000,
  30.   B00000011, B11100000,
  31.   B11110011, B11100000,
  32.   B11111110, B11111000,
  33.   B01111110, B11111111,
  34.   B00110011, B10011111,
  35.   B00011111, B11111100,
  36.   B00001101, B01110000,
  37.   B00011011, B10100000,
  38.   B00111111, B11100000,
  39.   B00111111, B11110000,
  40.   B01111100, B11110000,
  41.   B01110000, B01110000,
  42.   B00000000, B00110000
  43. };

  44. void setup() {
  45.   Serial.begin(9600);

  46.   // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  47.   if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32
  48.     Serial.println(F("SSD1306 allocation failed"));
  49.     for (;;); // Don't proceed, loop forever
  50.   }

  51.   // Show initial display buffer contents on the screen --
  52.   // the library initializes this with an Adafruit splash screen.
  53.   display.display();
  54.   delay(2000); // Pause for 2 seconds

  55.   // Clear the buffer
  56.   display.clearDisplay();

  57.   // Draw a single pixel in white
  58.   display.drawPixel(10, 10, SSD1306_WHITE);

  59.   // Show the display buffer on the screen. You MUST call display() after
  60.   // drawing commands to make them visible on screen!
  61.   display.display();
  62.   delay(2000);
  63.   // display.display() is NOT necessary after every single drawing command,
  64.   // unless that's what you want...rather, you can batch up a bunch of
  65.   // drawing operations and then update the screen all at once by calling
  66.   // display.display(). These examples demonstrate both approaches...

  67.   testdrawline();      // Draw many lines

  68.   testdrawrect();      // Draw rectangles (outlines)

  69.   testfillrect();      // Draw rectangles (filled)

  70.   testdrawcircle();    // Draw circles (outlines)

  71.   testfillcircle();    // Draw circles (filled)

  72.   testdrawroundrect(); // Draw rounded rectangles (outlines)

  73.   testfillroundrect(); // Draw rounded rectangles (filled)

  74.   testdrawtriangle();  // Draw triangles (outlines)

  75.   testfilltriangle();  // Draw triangles (filled)

  76.   testdrawchar();      // Draw characters of the default font

  77.   testdrawstyles();    // Draw 'stylized' characters

  78.   testscrolltext();    // Draw scrolling text

  79.   testdrawbitmap();    // Draw a small bitmap image

  80.   // Invert and restore display, pausing in-between
  81.   display.invertDisplay(true);
  82.   delay(1000);
  83.   display.invertDisplay(false);
  84.   delay(1000);

  85.   testanimate(logo_bmp, LOGO_WIDTH, LOGO_HEIGHT); // Animate bitmaps
  86. }

  87. void loop() {
  88. }

  89. void testdrawline() {
  90.   int16_t i;

  91.   display.clearDisplay(); // Clear display buffer

  92.   for (i = 0; i < display.width(); i += 4) {
  93.     display.drawLine(0, 0, i, display.height() - 1, SSD1306_WHITE);
  94.     display.display(); // Update screen with each newly-drawn line
  95.     delay(1);
  96.   }
  97.   for (i = 0; i < display.height(); i += 4) {
  98.     display.drawLine(0, 0, display.width() - 1, i, SSD1306_WHITE);
  99.     display.display();
  100.     delay(1);
  101.   }
  102.   delay(250);

  103.   display.clearDisplay();

  104.   for (i = 0; i < display.width(); i += 4) {
  105.     display.drawLine(0, display.height() - 1, i, 0, SSD1306_WHITE);
  106.     display.display();
  107.     delay(1);
  108.   }
  109.   for (i = display.height() - 1; i >= 0; i -= 4) {
  110.     display.drawLine(0, display.height() - 1, display.width() - 1, i, SSD1306_WHITE);
  111.     display.display();
  112.     delay(1);
  113.   }
  114.   delay(250);

  115.   display.clearDisplay();

  116.   for (i = display.width() - 1; i >= 0; i -= 4) {
  117.     display.drawLine(display.width() - 1, display.height() - 1, i, 0, SSD1306_WHITE);
  118.     display.display();
  119.     delay(1);
  120.   }
  121.   for (i = display.height() - 1; i >= 0; i -= 4) {
  122.     display.drawLine(display.width() - 1, display.height() - 1, 0, i, SSD1306_WHITE);
  123.     display.display();
  124.     delay(1);
  125.   }
  126.   delay(250);

  127.   display.clearDisplay();

  128.   for (i = 0; i < display.height(); i += 4) {
  129.     display.drawLine(display.width() - 1, 0, 0, i, SSD1306_WHITE);
  130.     display.display();
  131.     delay(1);
  132.   }
  133.   for (i = 0; i < display.width(); i += 4) {
  134.     display.drawLine(display.width() - 1, 0, i, display.height() - 1, SSD1306_WHITE);
  135.     display.display();
  136.     delay(1);
  137.   }

  138.   delay(2000); // Pause for 2 seconds
  139. }

  140. void testdrawrect(void) {
  141.   display.clearDisplay();

  142.   for (int16_t i = 0; i < display.height() / 2; i += 2) {
  143.     display.drawRect(i, i, display.width() - 2 * i, display.height() - 2 * i, SSD1306_WHITE);
  144.     display.display(); // Update screen with each newly-drawn rectangle
  145.     delay(1);
  146.   }

  147.   delay(2000);
  148. }

  149. void testfillrect(void) {
  150.   display.clearDisplay();

  151.   for (int16_t i = 0; i < display.height() / 2; i += 3) {
  152.     // The INVERSE color is used so rectangles alternate white/black
  153.     display.fillRect(i, i, display.width() - i * 2, display.height() - i * 2, SSD1306_INVERSE);
  154.     display.display(); // Update screen with each newly-drawn rectangle
  155.     delay(1);
  156.   }

  157.   delay(2000);
  158. }

  159. void testdrawcircle(void) {
  160.   display.clearDisplay();

  161.   for (int16_t i = 0; i < max(display.width(), display.height()) / 2; i += 2) {
  162.     display.drawCircle(display.width() / 2, display.height() / 2, i, SSD1306_WHITE);
  163.     display.display();
  164.     delay(1);
  165.   }

  166.   delay(2000);
  167. }

  168. void testfillcircle(void) {
  169.   display.clearDisplay();

  170.   for (int16_t i = max(display.width(), display.height()) / 2; i > 0; i -= 3) {
  171.     // The INVERSE color is used so circles alternate white/black
  172.     display.fillCircle(display.width() / 2, display.height() / 2, i, SSD1306_INVERSE);
  173.     display.display(); // Update screen with each newly-drawn circle
  174.     delay(1);
  175.   }

  176.   delay(2000);
  177. }

  178. void testdrawroundrect(void) {
  179.   display.clearDisplay();

  180.   for (int16_t i = 0; i < display.height() / 2 - 2; i += 2) {
  181.     display.drawRoundRect(i, i, display.width() - 2 * i, display.height() - 2 * i,
  182.                           display.height() / 4, SSD1306_WHITE);
  183.     display.display();
  184.     delay(1);
  185.   }

  186.   delay(2000);
  187. }

  188. void testfillroundrect(void) {
  189.   display.clearDisplay();

  190.   for (int16_t i = 0; i < display.height() / 2 - 2; i += 2) {
  191.     // The INVERSE color is used so round-rects alternate white/black
  192.     display.fillRoundRect(i, i, display.width() - 2 * i, display.height() - 2 * i,
  193.                           display.height() / 4, SSD1306_INVERSE);
  194.     display.display();
  195.     delay(1);
  196.   }

  197.   delay(2000);
  198. }

  199. void testdrawtriangle(void) {
  200.   display.clearDisplay();

  201.   for (int16_t i = 0; i < max(display.width(), display.height()) / 2; i += 5) {
  202.     display.drawTriangle(
  203.       display.width() / 2  , display.height() / 2 - i,
  204.       display.width() / 2 - i, display.height() / 2 + i,
  205.       display.width() / 2 + i, display.height() / 2 + i, SSD1306_WHITE);
  206.     display.display();
  207.     delay(1);
  208.   }

  209.   delay(2000);
  210. }

  211. void testfilltriangle(void) {
  212.   display.clearDisplay();

  213.   for (int16_t i = max(display.width(), display.height()) / 2; i > 0; i -= 5) {
  214.     // The INVERSE color is used so triangles alternate white/black
  215.     display.fillTriangle(
  216.       display.width() / 2  , display.height() / 2 - i,
  217.       display.width() / 2 - i, display.height() / 2 + i,
  218.       display.width() / 2 + i, display.height() / 2 + i, SSD1306_INVERSE);
  219.     display.display();
  220.     delay(1);
  221.   }

  222.   delay(2000);
  223. }

  224. void testdrawchar(void) {
  225.   display.clearDisplay();

  226.   display.setTextSize(1);      // Normal 1:1 pixel scale
  227.   display.setTextColor(SSD1306_WHITE); // Draw white text
  228.   display.setCursor(0, 0);     // Start at top-left corner
  229.   display.cp437(true);         // Use full 256 char 'Code Page 437' font

  230.   // Not all the characters will fit on the display. This is normal.
  231.   // Library will draw what it can and the rest will be clipped.
  232.   for (int16_t i = 0; i < 256; i++) {
  233.     if (i == '\n') display.write(' ');
  234.     else          display.write(i);
  235.   }

  236.   display.display();
  237.   delay(2000);
  238. }

  239. void testdrawstyles(void) {
  240.   display.clearDisplay();

  241.   display.setTextSize(1);             // Normal 1:1 pixel scale
  242.   display.setTextColor(SSD1306_WHITE);        // Draw white text
  243.   display.setCursor(0, 0);            // Start at top-left corner
  244.   display.println(F("Hello, world!"));

  245.   display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' text
  246.   display.println(3.141592);

  247.   display.setTextSize(2);             // Draw 2X-scale text
  248.   display.setTextColor(SSD1306_WHITE);
  249.   display.print(F("0x")); display.println(0xDEADBEEF, HEX);

  250.   display.display();
  251.   delay(2000);
  252. }

  253. void testscrolltext(void) {
  254.   display.clearDisplay();

  255.   display.setTextSize(2); // Draw 2X-scale text
  256.   display.setTextColor(SSD1306_WHITE);
  257.   display.setCursor(10, 0);
  258.   display.println(F("scroll"));
  259.   display.display();      // Show initial text
  260.   delay(100);

  261.   // Scroll in various directions, pausing in-between:
  262.   display.startscrollright(0x00, 0x0F);
  263.   delay(2000);
  264.   display.stopscroll();
  265.   delay(1000);
  266.   display.startscrollleft(0x00, 0x0F);
  267.   delay(2000);
  268.   display.stopscroll();
  269.   delay(1000);
  270.   display.startscrolldiagright(0x00, 0x07);
  271.   delay(2000);
  272.   display.startscrolldiagleft(0x00, 0x07);
  273.   delay(2000);
  274.   display.stopscroll();
  275.   delay(1000);
  276. }

  277. void testdrawbitmap(void) {
  278.   display.clearDisplay();

  279.   display.drawBitmap(
  280.     (display.width()  - LOGO_WIDTH ) / 2,
  281.     (display.height() - LOGO_HEIGHT) / 2,
  282.     logo_bmp, LOGO_WIDTH, LOGO_HEIGHT, 1);
  283.   display.display();
  284.   delay(1000);
  285. }

  286. #define XPOS   0 // Indexes into the 'icons' array in function below
  287. #define YPOS   1
  288. #define DELTAY 2

  289. void testanimate(const uint8_t *bitmap, uint8_t w, uint8_t h) {
  290.   int8_t f, icons[NUMFLAKES][3];

  291.   // Initialize 'snowflake' positions
  292.   for (f = 0; f < NUMFLAKES; f++) {
  293.     icons[f][XPOS]   = random(1 - LOGO_WIDTH, display.width());
  294.     icons[f][YPOS]   = -LOGO_HEIGHT;
  295.     icons[f][DELTAY] = random(1, 6);
  296.     Serial.print(F("x: "));
  297.     Serial.print(icons[f][XPOS], DEC);
  298.     Serial.print(F(" y: "));
  299.     Serial.print(icons[f][YPOS], DEC);
  300.     Serial.print(F(" dy: "));
  301.     Serial.println(icons[f][DELTAY], DEC);
  302.   }

  303.   for (;;) { // Loop forever...
  304.     display.clearDisplay(); // Clear the display buffer

  305.     // Draw each snowflake:
  306.     for (f = 0; f < NUMFLAKES; f++) {
  307.       display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, SSD1306_WHITE);
  308.     }

  309.     display.display(); // Show the display buffer on the screen
  310.     delay(200);        // Pause for 1/10 second

  311.     // Then update coordinates of each flake...
  312.     for (f = 0; f < NUMFLAKES; f++) {
  313.       icons[f][YPOS] += icons[f][DELTAY];
  314.       // If snowflake is off the bottom of the screen...
  315.       if (icons[f][YPOS] >= display.height()) {
  316.         // Reinitialize to a random position, just off the top
  317.         icons[f][XPOS]   = random(1 - LOGO_WIDTH, display.width());
  318.         icons[f][YPOS]   = -LOGO_HEIGHT;
  319.         icons[f][DELTAY] = random(1, 6);
  320.       }
  321.     }
  322.   }
  323. }
复制代码



回复

使用道具 举报

ID:513258 发表于 2020-2-20 14:55 | 显示全部楼层
11.jpg
回复

使用道具 举报

ID:513258 发表于 2020-2-20 15:24 | 显示全部楼层
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料 +代码 +图形 +仿真)
  3.   实验一百四十四:0.91寸OLED液晶屏显示模块 IIC
  4.   安装库:IDE—工具—管理库—搜索Adafruit_SSD1306—安装
  5.   安装库:IDE—工具—管理库—搜索Adafruit_GFX—安装
  6.   实验接线方法
  7.   oled模块    Ardunio Uno
  8.   GND---------GND接地线
  9.   VCC---------5V 接电源
  10.   SDA---------A4
  11.   SCL ------- A5
  12.   实验之二:自动计数器
  13. */

  14. #include <Arduino.h>
  15. #include <U8x8lib.h>

  16. U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE);


  17. int i = 0;
  18. void setup(void)
  19. {
  20.   u8x8.begin();
  21.   u8x8.setPowerSave(0);
  22. }

  23. void loop(void)
  24. {
  25.   
  26.   //u8x8.setFont(u8x8_font_chroma48medium8_r); //小字体,细
  27.   //u8x8.setFont(u8x8_font_pxplustandynewtv_r); //小字体,粗
  28.   //u8x8.setFont(u8x8_font_lucasarts_scumm_subtitle_r_2x2_r); //两行字体,细
  29.   u8x8.setFont(u8x8_font_px437wyse700a_2x2_r); //两行字体,粗

  30.   
  31.   String s = "PA:" ;
  32.   String s2;
  33.   s2 = s + i;
  34.   u8x8.drawString(0,0,s2.c_str());

  35.   s = "TL:";
  36.   s2 = s + (i * 2);

  37.   u8x8.drawString(0,2,s2.c_str());

  38.   delay(50);
  39.   i ++;
  40. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2020-2-20 15:25 | 显示全部楼层
12.jpg
回复

使用道具 举报

ID:513258 发表于 2020-2-20 16:09 | 显示全部楼层
  1. /*
  2.     【Arduino】168种传感器模块系列实验(资料 +代码 +图形 +仿真)
  3.     实验一百四十四:0.91寸OLED液晶屏显示模块 IIC
  4.     安装库:IDE—工具—管理库—搜索Adafruit_SSD1306—安装
  5.     安装库:IDE—工具—管理库—搜索Adafruit_GFX—安装
  6.     实验接线方法
  7.     oled模块    Ardunio Uno
  8.     GND---------GND接地线
  9.     VCC---------5V 接电源
  10.     SDA---------A4
  11.     SCL ------- A5
  12.     实验之三:显示英文 Hello, world!
  13. */

  14. #include <SPI.h>
  15. #include <Wire.h>
  16. #include <Adafruit_GFX.h>
  17. #include <Adafruit_SSD1306.h>

  18. #define OLED_RESET 4
  19. Adafruit_SSD1306 display(OLED_RESET);

  20. #if (SSD1306_LCDHEIGHT != 32)
  21. #error("Height incorrect, please fix Adafruit_SSD1306.h!");
  22. #endif

  23. void setup()   {
  24.   Serial.begin(9600);

  25.   // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  26.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)
  27.   // init done

  28.   display.clearDisplay();

  29.   //英文字符显示
  30.   display.setTextSize(1);             //设置字体大小
  31.   display.setTextColor(WHITE);        //设置字体颜色白色
  32.   display.setCursor(0, 0);            //设置字体的起始位置
  33.   display.println("Hello, world!");   //输出字符并换行

  34.   display.setTextColor(BLACK, WHITE); //设置字体黑色,字体背景白色
  35.   display.println(3.141592);          //输出数字并换行

  36.   display.setTextSize(2);             //设置字体大小
  37.   display.setTextColor(WHITE);        //设置字体白色
  38.   display.print("0x");                //输出字符
  39.   display.println(0xDEADBEEF, HEX);   //输出为ASCII编码的十六进制
  40.   //display.display();                  //显示以上
  41. }

  42. void loop() {

  43. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2020-2-20 16:14 | 显示全部楼层
13.jpg
回复

使用道具 举报

ID:513258 发表于 2020-2-21 08:59 | 显示全部楼层
I2C驱动的128x32 OLED
I2C (Inter-Integrated Circuit) 集成电路总线是I2CBus的简称,是一种串行通信总线,使用多主从架构。飞利浦公司在1980年代为了让主板,嵌入式系统或手机用以连接低速周边设备而发展。 I2C的正确读法为"I-squared-C"。I2C只使用两条双向漏极开路(Open Drain): 串行数据SDA及串行时钟频率SCL总线,且利用上拉电阻将两条总线的电位上拉。I2C允许相当大的工作电压范围,但典型的电压准位为+3.3V或+5V. I2C的参考设计使用一个7bit长度的地址空间但保留了16个地址,所以在一组总线最多可和112个节点通信。

常见的I2C总线依传输速率的不同而有不同的模式: 标准模式100 Kbit/s,低速模式10 Kbit/s,但时钟频率可被允许下降至零,这代表可以暂停通信。而新一代的I2C总线可以和更多的节点(支持10比特长度的地址空间)以更快的速率通信: 快速模式400 Kbit/s,高速模式3.4 Mbit/s。在单片机中使用I2C通信协议的时候,需要编写程序去模拟I2C总线的通信,对于I2C通信协议需要补充的一点是: 在实际通信传输数据时,SCL总线拉高的时间只要大于1.5μs都能够正常传输数据。

这块128x32 OLED的裸屏是由SSD1306驱动的,该芯片专为共阴极 OLED 面板设计,SSD1306 中嵌入了对比度控制器,显示 RAM 和晶振,并因此减少了外部器件和功耗,有 256级亮度控制,数据/命令的发送有三种接口可选择: 6800/8000串口、I2C接口或 SPI 接口。适用于多数简单的应用,移动电话的屏显, MP3播放器和计算器等。

SSD1306本身支持多种总线驱动方式包括SPI以及并口等,通过芯片的相应IO口拉低拉高来选择哪一种接口。模块通过电阻将相应IO口配置固化使用了I2C接口方式,但可能你买到的同样的驱动芯片的模块会采用其他接口。使用I2C接口时, SSD1306允许有最多两个7位的I2C地址,同样通过相应的IO口拉低拉高来切换, 一般默认是0x3C。在有些模块(不是所有,有些PCB没有预留)的背面,可以看到I2C地址选项提示,需要改变模块I2C地址时只需要把提示位置的电阻取下焊接到另外一端即可。要注意的是版上的I2C地址是加上了第零位读写位后的数值。

14.jpg


回复

使用道具 举报

ID:513258 发表于 2020-2-21 09:22 | 显示全部楼层
本帖最后由 eagler8 于 2020-2-21 09:25 编辑
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料 +代码 +图形 +仿真)
  3.   实验一百四十四:0.91寸OLED液晶屏显示模块 IIC
  4.   安装库:IDE—工具—管理库—搜索Adafruit_SSD1306—安装
  5.   安装库:IDE—工具—管理库—搜索Adafruit_GFX—安装
  6.   实验接线方法
  7.   oled模块    Ardunio Uno
  8.   GND---------GND接地线
  9.   VCC---------5V 接电源
  10.   SDA---------A4
  11.   SCL ------- A5
  12.   实验之四:输出直线和文字以及文字滚动
  13. */

  14. #include <SPI.h>
  15. #include <Wire.h>
  16. #include <Adafruit_GFX.h>
  17. #include <Adafruit_SSD1306.h>

  18. #define OLED_RESET 4
  19. Adafruit_SSD1306 display(OLED_RESET);

  20. #if (SSD1306_LCDHEIGHT != 32)

  21. #endif

  22. void setup() {
  23.   Serial.begin(115200);

  24.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32)
  25.   display.display();
  26.   delay(2000);
  27. }

  28. void loop() {
  29.   display.clearDisplay();
  30.   testdrawline();
  31.   delay(1000);

  32.   display.clearDisplay();
  33.   testdrawchar();
  34.   delay(1000);

  35.   display.clearDisplay();
  36.   testdrawchar2();
  37.   delay(2000);

  38.   display.clearDisplay();
  39.   testscrolltext();
  40.   delay(2000);
  41. }

  42. void testdrawline() {
  43.   for (int16_t i = 0; i < display.width(); i += 2) {
  44.     // x1 y1 x2 y2
  45.     display.drawLine(i, 0, i, display.height(), WHITE);
  46.     display.display();
  47.     delay(5);
  48.   }
  49.   delay(250);
  50.   display.clearDisplay();
  51.   for (int16_t i = 0; i < display.height(); i += 2) {
  52.     display.drawLine(0, i, display.width(), i, WHITE);
  53.     display.display();
  54.     delay(5);
  55.   }
  56. }

  57. void testdrawchar(void) {
  58.   display.setTextSize(1);
  59.   display.setTextColor(WHITE);
  60.   display.setCursor(0, 0);

  61.   for (uint8_t i = 0; i < 168; i++) {
  62.     if (i == '\n') continue;
  63.     display.write(i);
  64.     if ((i > 0) && (i % 21 == 0))
  65.       display.println();
  66.   }
  67.   display.display();
  68.   delay(1);
  69. }

  70. void testdrawchar2(void) {
  71.   display.setTextSize(2);
  72.   display.setTextColor(WHITE);

  73.   uint8_t j = 47;
  74.   for (uint8_t l = 0; l < 4; l++) {
  75.     display.setCursor(0, l * 16);
  76.     for (uint8_t i = 0; i < 10; i++) {
  77.       j++;
  78.       if (j == '\n') continue;
  79.       display.write(j);
  80.       display.display();
  81.       delay(5);
  82.     }
  83.   }
  84. }

  85. void testscrolltext(void) {
  86.   testdrawchar();
  87.   delay(5);
  88.   // startscrollright(uint8_t start, uint8_t stop)
  89.   // Activate a scroll to the right for rows start through stop The display is 16 rows tall. To scroll the whole display, run: display.scrollright(0x00, 0x0F)
  90.   // Parameters: start First row to scroll, stop  Last row to scroll
  91.   display.startscrollright(0x00, 0x02);
  92.   delay(1000);
  93.   display.startscrollright(0x03, 0x05);
  94.   delay(1000);
  95.   display.stopscroll();
  96.   delay(1000);
  97.   // Activate a scroll to the left for rows start through stop The display is 16 rows tall. To scroll the whole display, run: display.startscrollright(0x00, 0x0F)
  98.   display.startscrollleft(0x00, 0x05);
  99.   delay(2000);
  100.   display.startscrollleft(0x00, 0x0F);
  101.   delay(2000);
  102.   display.stopscroll();
  103.   delay(1000);
  104.   // Activate a scroll to the upper right for rows start through stop The display is 16 rows tall.
  105.   display.startscrolldiagright(0x00, 0x03);
  106.   delay(2000);
  107.   display.startscrolldiagright(0x00, 0x07);
  108.   delay(2000);
  109.   // Activate a scroll to the upper left for rows start through stop The display is 16 rows tall.
  110.   display.startscrolldiagleft(0x00, 0x03);
  111.   delay(2000);
  112.   display.startscrolldiagleft(0x00, 0x07);
  113.   delay(2000);
  114.   display.stopscroll();
  115. }
复制代码

回复

使用道具 举报

ID:513258 发表于 2020-2-21 09:40 | 显示全部楼层
21.gif
回复

使用道具 举报

ID:513258 发表于 2020-2-21 09:59 | 显示全部楼层
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料 +代码 +图形 +仿真)
  3.   实验一百四十四:0.91寸OLED液晶屏显示模块 IIC
  4.   安装库:IDE—工具—管理库—搜索Adafruit_SSD1306—安装
  5.   安装库:IDE—工具—管理库—搜索Adafruit_GFX—安装
  6.   实验接线方法
  7.   oled模块    Ardunio Uno
  8.   GND---------GND接地线
  9.   VCC---------5V 接电源
  10.   SDA---------A4
  11.   SCL ------- A5
  12.   实验之五:输出输出位图(及汉字位图)——实验室
  13. */

  14. #include <SPI.h>
  15. #include <Wire.h>
  16. #include <Adafruit_GFX.h>
  17. #include <Adafruit_SSD1306.h>

  18. #define OLED_RESET 4
  19. Adafruit_SSD1306 display(OLED_RESET);

  20. #if (SSD1306_LCDHEIGHT != 32)
  21. #endif

  22. #define NUMFLAKES 5
  23. #define XPOS 0
  24. #define YPOS 1
  25. #define DELTAY 2
  26. #define LOGO16_GLCD_HEIGHT 16
  27. #define LOGO16_GLCD_WIDTH  16
  28. static const unsigned char PROGMEM logo16_glcd_bmp[] =
  29. { B00000000, B11000000,
  30.   B00000001, B11000000,
  31.   B00000001, B11000000,
  32.   B00000011, B11100000,
  33.   B11110011, B11100000,
  34.   B11111110, B11111000,
  35.   B01111110, B11111111,
  36.   B00110011, B10011111,
  37.   B00011111, B11111100,
  38.   B00001101, B01110000,
  39.   B00011011, B10100000,
  40.   B00111111, B11100000,
  41.   B00111111, B11110000,
  42.   B01111100, B11110000,
  43.   B01110000, B01110000,
  44.   B00000000, B00110000 };

  45. //中文:实  
  46. static const unsigned char PROGMEM str_1[] = {   
  47. 0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x88,0x84,0x04,0x80,0x04,0x80,0x10,0x80,  
  48. 0x08,0x80,0x08,0x80,0xFF,0xFE,0x01,0x40,0x02,0x20,0x04,0x10,0x18,0x08,0x60,0x04  
  49. };

  50. //中文:验  
  51. static const unsigned char PROGMEM str_2[] = {   
  52. 0x00,0x20,0xF8,0x20,0x08,0x50,0x48,0x50,0x48,0x88,0x49,0x04,0x4A,0xFA,0x7C,0x00,  
  53. 0x04,0x44,0x04,0x24,0x1D,0x24,0xE4,0xA8,0x44,0x88,0x04,0x10,0x2B,0xFE,0x10,0x00  
  54. };

  55. //中文:室  
  56. static const unsigned char PROGMEM str_3[] = {   
  57. 0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x80,0x04,0x3F,0xF8,0x04,0x00,0x08,0x20,  
  58. 0x1F,0xF0,0x01,0x10,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00  
  59. };

  60. void setup() {
  61.   Serial.begin(115200);

  62.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x64)
  63.   display.display();
  64.   delay(2000);
  65. }

  66. void loop() {
  67.   display.clearDisplay();
  68.   display.drawBitmap(30, 16,  logo16_glcd_bmp, 16, 16, WHITE);
  69.   display.display();
  70.   delay(2000);
  71.   display.drawBitmap(30, 16,  logo16_glcd_bmp, 16, 16, BLACK);
  72.   display.display();
  73.   delay(500);
  74.   display.drawBitmap(30, 16,  logo16_glcd_bmp, 16, 16, WHITE);
  75.   display.display();
  76.   delay(500);
  77.   display.clearDisplay();
  78.   display.drawBitmap(0, 0, str_1, 16, 16, WHITE);
  79.   display.drawBitmap(16, 0, str_2, 16, 16, WHITE);
  80.   display.drawBitmap(32, 0, str_3, 16, 16, WHITE);
  81.   display.display();
  82.   delay(2000);
  83.   display.clearDisplay();
  84.   testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH);
  85. }

  86. void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
  87.   uint8_t icons[NUMFLAKES][3];

  88.   // initialize
  89.   for (uint8_t f=0; f< NUMFLAKES; f++) {
  90.     icons[f][XPOS] = random(display.width());
  91.     icons[f][YPOS] = 0;
  92.     icons[f][DELTAY] = random(8) + 2;
  93.    
  94.     Serial.print("x: ");
  95.     Serial.print(icons[f][XPOS], DEC);
  96.     Serial.print(" y: ");
  97.     Serial.print(icons[f][YPOS], DEC);
  98.     Serial.print(" dy: ");
  99.     Serial.println(icons[f][DELTAY], DEC);
  100.   }

  101.   while (1) {
  102.     // draw each icon
  103.     for (uint8_t f=0; f< NUMFLAKES; f++) {
  104.       display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, WHITE);
  105.     }
  106.     display.display();
  107.     delay(200);
  108.    
  109.     // then erase it + move it
  110.     for (uint8_t f=0; f< NUMFLAKES; f++) {
  111.       display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, BLACK);
  112.       // move it
  113.       icons[f][YPOS] += icons[f][DELTAY];
  114.       // if its gone, reinit
  115.       if (icons[f][YPOS] > display.height()) {
  116.         icons[f][XPOS] = random(display.width());
  117.         icons[f][YPOS] = 0;
  118.         icons[f][DELTAY] = random(8) + 2;
  119.       }
  120.     }
  121.    }
  122. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2020-2-21 10:06 | 显示全部楼层
22.jpg
回复

使用道具 举报

ID:513258 发表于 2020-2-21 11:51 | 显示全部楼层
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料 +代码 +图形 +仿真)
  3.   实验一百四十四:0.91寸OLED液晶屏显示模块 IIC
  4.   实验接线方法
  5.   oled模块    Ardunio Uno
  6.   GND---------GND接地线
  7.   VCC---------5V 接电源
  8.   SDA---------A4
  9.   SCL ------- A5
  10.   实验之八:查询I2C地址(这里为0x3c)
  11. */

  12. #include <Wire.h>  
  13.    
  14. void setup(){  
  15.   Wire.begin();  
  16.   Serial.begin(9600);  
  17.   Serial.println("\nI2C Scanner");  
  18. }  
  19. void loop(){  
  20.   byte error, address;  
  21.   int nDevices;  
  22.   Serial.println("Scanning...");  
  23.   nDevices = 0;  
  24.   for (address = 1; address < 127; address++ ){  
  25.     // The i2c_scanner uses the return value of  
  26.     // the Write.endTransmisstion to see if  
  27.     // a device did acknowledge to the address.  
  28.     Wire.beginTransmission(address);  
  29.     error = Wire.endTransmission();  
  30.     if (error == 0){  
  31.       Serial.print("I2C device found at address 0x");  
  32.       if (address < 16)  
  33.         Serial.print("0");  
  34.       Serial.print(address, HEX);  
  35.       Serial.println(" !");  
  36.       nDevices++;  
  37.     }else if (error == 4){  
  38.       Serial.print("Unknow error at address 0x");  
  39.       if (address < 16)  
  40.         Serial.print("0");  
  41.       Serial.println(address, HEX);  
  42.     }  
  43.   }  
  44.   if (nDevices == 0)  
  45.     Serial.println("No I2C devices found\n");  
  46.   else  
  47.     Serial.println("done\n");  
  48.   delay(5000); // wait 5 seconds for next scan  
  49. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2020-2-21 11:55 | 显示全部楼层
上传到arduino板上,打开串口可查看地址

24.jpg

回复

使用道具 举报

ID:513258 发表于 2020-2-21 12:45 | 显示全部楼层
  1. /*
  2.     【Arduino】168种传感器模块系列实验(资料 +代码 +图形 +仿真)
  3.     实验一百四十四:0.91寸OLED液晶屏显示模块 IIC
  4.     安装库:IDE—工具—管理库—搜索Adafruit_SSD1306—安装
  5.     安装库:IDE—工具—管理库—搜索Adafruit_GFX—安装
  6.     实验接线方法
  7.     oled模块    Ardunio Uno
  8.     GND---------GND接地线
  9.     VCC---------5V 接电源
  10.     SDA---------A4
  11.     SCL ------- A5
  12.     实验之九:综合测试,显示线段、图形与英文字母数字
  13. */

  14. #include <Wire.h>
  15. #include <Adafruit_GFX.h>
  16. #include <Adafruit_SSD1306.h>

  17. #define OLED_RESET 4
  18. Adafruit_SSD1306 display(OLED_RESET);

  19. #define NUMFLAKES 10
  20. #define XPOS 0
  21. #define YPOS 1
  22. #define DELTAY 2

  23. #define LOGO16_GLCD_HEIGHT 16
  24. #define LOGO16_GLCD_WIDTH  16

  25. #if (SSD1306_LCDHEIGHT != 32)
  26. #error("Height incorrect, please fix Adafruit_SSD1306.h!");
  27. #endif

  28. void setup()        //初始化
  29. {
  30.   Serial.begin(9600);
  31.   delay(500);

  32.   // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  33.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32) ,0x3C为I2C协议通讯地址,需根据实际情况更改
  34. }
  35. void loop()
  36. {
  37.   test_SSD1306();     //调用测试函数
  38. }

  39. void test_SSD1306(void)   //测试函数
  40. {
  41.   /*-----------------点亮全屏检测屏幕是否有不正常点亮现象-----------------------------*/

  42.   display.fillScreen(WHITE);
  43.   display.display();
  44.   delay(2000);

  45.   /*------------------------------画点 点坐标(64,16)-------------------------------*/
  46.   display.clearDisplay();   // clears the screen and buffer
  47.   display.drawPixel(64, 16, WHITE);
  48.   display.display();
  49.   delay(2000);

  50.   /*-------------------------- 画线 从(0,0)到(128,32)----------------------------*/
  51.   display.clearDisplay();   // clears the screen and buffer
  52.   display.drawLine(0, 0, 128, 32, WHITE);
  53.   display.display();
  54.   delay(2000);
  55.   display.clearDisplay();   // clears the screen and buffer
  56.   display.drawLine(0, 32, 128, 0, WHITE);
  57.   display.display();
  58.   delay(2000);

  59.   /*--------------.画空心矩形  左上角坐标(x0,y0)  右下角坐标(x1,y1)------------------*/
  60.   display.clearDisplay();   // clears the screen and buffer
  61.   display.drawRect(0, 0, 128, 32, WHITE);
  62.   display.display();
  63.   delay(2000);

  64.   /*-----------------------实心矩形---------------------------*/
  65.   display.clearDisplay();   // clears the screen and buffer
  66.   display.fillRect(0, 0, 128, 32, WHITE);
  67.   display.display();
  68.   delay(2000);

  69.   /*------------------------画空心圆-------------------------*/
  70.   display.clearDisplay();   // clears the screen and buffer
  71.   display.drawCircle(64, 16, 13, WHITE);
  72.   display.display();
  73.   delay(2000);

  74.   /*----------------------画实心圆---------------------------*/
  75.   display.clearDisplay();   // clears the screen and buffer
  76.   display.fillCircle(64, 16, 13, WHITE);
  77.   display.display();
  78.   delay(2000);

  79.   /*---------------------画空心三角形-------------------------*/
  80.   display.clearDisplay();   // clears the screen and buffer
  81.   display.drawTriangle(32, 0, 0, 30, 128, 30, WHITE);
  82.   display.display();
  83.   delay(2000);

  84.   /*------------------------画实心三角形-----------------------*/
  85.   display.clearDisplay();   // clears the screen and buffer
  86.   display.fillTriangle(32, 0, 0, 30, 128, 30, WHITE);
  87.   display.display();
  88.   delay(2000);

  89.   /*-----------------------空心圆角矩形------------------------*/
  90.   display.clearDisplay();   // clears the screen and buffer
  91.   display.drawRoundRect(0, 0, 128, 32, 5, WHITE);
  92.   display.display();
  93.   delay(2000);

  94.   /*----------------------画实心圆角矩形-----------------------*/
  95.   display.clearDisplay();   // clears the screen and buffer
  96.   display.fillRoundRect(0, 0, 128, 32, 5, WHITE);
  97.   display.display();
  98.   delay(2000);

  99.   /*------------------------显示英文 数字---------------------*/
  100.   display.clearDisplay();   // clears the screen and buffer
  101.   display.setTextSize(1); //选择字号
  102.   display.setTextColor(WHITE);  //字体颜色
  103.   display.setCursor(0, 0);  //起点坐标
  104.   display.println("Hello, Arduino!");
  105.   display.setTextColor(BLACK, WHITE); // 'inverted' text
  106.   display.println(3.141592);
  107.   display.setTextSize(2);
  108.   display.setTextColor(WHITE);
  109.   display.print("0x"); display.println(0xDEADBEEF, HEX);
  110.   display.display();
  111.   delay(2000);
  112. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2020-2-21 13:24 | 显示全部楼层
  1. /*
  2.     【Arduino】168种传感器模块系列实验(资料 +代码 +图形 +仿真)
  3.     实验一百四十四:0.91寸OLED液晶屏显示模块 IIC
  4.     安装库:IDE—工具—管理库—搜索U8g2lib—安装
  5.    
  6.     实验接线方法
  7.     oled模块    Ardunio Uno
  8.     GND---------GND接地线
  9.     VCC---------5V 接电源
  10.     SDA---------A4
  11.     SCL ------- A5
  12.     实验之十:综合测试,显示电子钟
  13. */

  14. #include <Arduino.h>
  15. #include <U8g2lib.h>
  16. #include <Wire.h>

  17. //iic驱动方式
  18. U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);

  19. void setup(void) {
  20.   u8g2.begin();
  21. }

  22. uint8_t m = 24;

  23. void loop(void) {
  24.   char m_str[3];
  25.   strcpy(m_str, u8x8_u8toa(m, 2));    /* convert m to a string with two digits */
  26.   u8g2.firstPage();
  27.   do {
  28.     u8g2.setFont(u8g2_font_logisoso62_tn);
  29.     u8g2.drawStr(0, 63, "6");
  30.     u8g2.drawStr(33, 63, ":");
  31.     u8g2.drawStr(50, 63, m_str);
  32.   } while ( u8g2.nextPage() );
  33.   delay(1000);
  34.   m++;
  35.   if ( m == 60 )
  36.     m = 0;
  37. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2020-2-21 13:31 | 显示全部楼层
相关函数
u8g2.begin():U8g2构造函数。
u8g2.clean():清除屏幕显示,清除缓冲区,光标回到原点位置。
u8g2.setFont():设置字体。
u8g2.drawStr():绘制字符串。
u8g2.firstPage()/nextPage():循环刷新显示。

U8g2库提供的API函数有很多,其他的介绍可以参考官方手册。
https://github.com/olikraus/u8g2/wiki/u8g2reference

回复

使用道具 举报

ID:513258 发表于 2020-2-21 13:37 | 显示全部楼层
25.jpg
回复

使用道具 举报

ID:513258 发表于 2020-2-21 13:49 | 显示全部楼层
  1. /*
  2.     【Arduino】168种传感器模块系列实验(资料 +代码 +图形 +仿真)
  3.     实验一百四十四:0.91寸OLED液晶屏显示模块 IIC
  4.     安装库:IDE—工具—管理库—搜索Adafruit_SSD1306—安装
  5.     安装库:IDE—工具—管理库—搜索Adafruit_GFX—安装
  6.     实验接线方法
  7.     oled模块    Ardunio Uno
  8.     GND---------GND接地线
  9.     VCC---------5V 接电源
  10.     SDA---------A4
  11.     SCL ------- A5
  12.     实验之十一:综合测试,中文显示
  13. */

  14. #include <Wire.h>
  15. #include <Adafruit_GFX.h>
  16. #include <Adafruit_SSD1306.h>

  17. #define OLED_RESET     4
  18. Adafruit_SSD1306 display(128, 32, &Wire, OLED_RESET);

  19. //取16X16汉字字模 逐行式 顺向高位在前
  20. static const unsigned char PROGMEM str1[] =
  21. {
  22.   0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x3F, 0xF8, 0x21, 0x08, 0x21, 0x08, 0x21, 0x08,
  23.   0x21, 0x08, 0x21, 0x08, 0x3F, 0xF8, 0x21, 0x08, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00
  24. };/*"中",0*/

  25. static const unsigned char PROGMEM str2[] =
  26. {
  27.   0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0xFF, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x08, 0x20, 0x08, 0x20,
  28.   0x04, 0x40, 0x02, 0x80, 0x01, 0x00, 0x02, 0x80, 0x04, 0x40, 0x08, 0x20, 0x30, 0x18, 0xC0, 0x06
  29. };/*"文",1*/
  30. static const unsigned char PROGMEM str3[] =
  31. {
  32.   0x00, 0x00, 0x1F, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x1F, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x1F, 0xF0,
  33.   0x04, 0x40, 0x44, 0x44, 0x24, 0x44, 0x14, 0x48, 0x14, 0x50, 0x04, 0x40, 0xFF, 0xFE, 0x00, 0x00
  34. };/*"显",2*/

  35. static const unsigned char PROGMEM str4[] =
  36. {
  37.   0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x01, 0x00,
  38.   0x01, 0x00, 0x11, 0x10, 0x11, 0x08, 0x21, 0x04, 0x41, 0x02, 0x81, 0x02, 0x05, 0x00, 0x02, 0x00
  39. };/*"示",3*/

  40. void setup() {
  41.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  42.   display.setTextColor(WHITE);//开像素点发光
  43.   display.clearDisplay();//清屏

  44.   display.setTextSize(2); //设置字体大小
  45.   display.setCursor(0, 0);//设置显示位置
  46.   display.println("-TonyCode-");//输出字符

  47.   display.drawBitmap(32, 16, str1, 16, 16, 1); //画出字符对应点阵数据
  48.   display.drawBitmap(48, 16, str2, 16, 16, 1); //画出字符对应点阵数据
  49.   display.drawBitmap(64, 16, str3, 16, 16, 1); //画出字符对应点阵数据
  50.   display.drawBitmap(80, 16, str4, 16, 16, 1); //画出字符对应点阵数据
  51.   display.display();//开显示

  52. }

  53. void loop() {

  54. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2020-2-21 15:49 | 显示全部楼层
27.jpg
回复

使用道具 举报

ID:513258 发表于 2020-2-22 08:21 | 显示全部楼层
26.jpg
回复

使用道具 举报

ID:513258 发表于 2020-2-23 09:48 | 显示全部楼层
实验之十二:滚动显示字符“Hello World!”

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料 +代码 +图形 +仿真)
  3.   实验一百四十四:0.91寸OLED液晶屏显示模块 IIC
  4.   安装库:FLOW库
  5.   
  6.   实验接线方法
  7.   oled模块    Ardunio Uno
  8.   GND---------GND接地线
  9.   VCC---------5V 接电源
  10.   SDA---------A4
  11.   SCL ------- A5
  12.   实验之十二:滚动显示字符“Hello World!”
  13. */

  14. #include<FLOW.h>
  15. FLOW first;
  16. String s="Hello World!";
  17. void setup(){
  18.   first.Begin();
  19. }
  20. void loop(){
  21.   first.Now(16,6,s,1);
  22.   first.Clear(66);
  23. }
复制代码



回复

使用道具 举报

ID:513258 发表于 2020-2-23 10:01 | 显示全部楼层
28.jpg
回复

使用道具 举报

ID:513258 发表于 2020-2-23 10:06 | 显示全部楼层
【Arduino】168种传感器模块系列实验(资料 +代码 +图形 +仿真)
  实验一百四十四:0.91寸OLED液晶屏显示模块 IIC
  安装库:IDE—工具—管理库—搜索U8g2lib—安装

  实验接线方法
  oled模块    Ardunio Uno
  GND---------GND接地线
  VCC---------5V 接电源
  SDA---------A4
  SCL ------- A5
  实验之六:使用U8g2输出中文(世界很大我想走走)
  (在Example里有PrintUTF8例子, 里面有中文输出, 注意: 这个并非所有汉字都能输出. 根据自己的硬件, 取消对应的注释)

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料 +代码 +图形 +仿真)
  3.   实验一百四十四:0.91寸OLED液晶屏显示模块 IIC
  4.   安装库:IDE—工具—管理库—搜索U8g2lib—安装
  5.   
  6.   实验接线方法
  7.   oled模块    Ardunio Uno
  8.   GND---------GND接地线
  9.   VCC---------5V 接电源
  10.   SDA---------A4
  11.   SCL ------- A5
  12.   实验之六:使用U8g2输出中文(世界很大我想走走)
  13.   (在Example里有PrintUTF8例子, 里面有中文输出, 注意: 这个并非所有汉字都能输出. 根据自己的硬件, 取消对应的注释)
  14. */

  15. #include <Arduino.h>
  16. #include <U8g2lib.h>

  17. //#ifdef U8X8_HAVE_HW_SPI
  18. //#include <SPI.h>
  19. //#endif
  20. #ifdef U8X8_HAVE_HW_I2C
  21. #include <Wire.h>
  22. #endif

  23. /*
  24.   U8glib Example Overview:
  25.     Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption
  26.     Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards.
  27.     U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only.
  28. */

  29. // Please UNCOMMENT one of the contructor lines below
  30. // U8g2 Contructor List (Frame Buffer)
  31. // The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8g2setupcpp
  32. // Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected
  33. //U8G2_NULL u8g2(U8G2_R0);    // null device, a 8x8 pixel display which does nothing
  34. //U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  35. //U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 12, /* dc=*/ 4, /* reset=*/ 6);    // Arduboy (Production, Kickstarter Edition)
  36. //U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  37. //U8G2_SSD1306_128X64_NONAME_F_3W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* reset=*/ 8);
  38. //U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
  39. //U8G2_SSD1306_128X64_ALT0_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);   // same as the NONAME variant, but may solve the "every 2nd line skipped" problem
  40. //U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* reset=*/ 8);
  41. //U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // All Boards without Reset of the Display
  42. //U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 16, /* data=*/ 17, /* reset=*/ U8X8_PIN_NONE);   // ESP32 Thing, pure SW emulated I2C
  43. //U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 16, /* data=*/ 17);   // ESP32 Thing, HW I2C with pin remapping
  44. //U8G2_SSD1306_128X64_NONAME_F_6800 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8);
  45. //U8G2_SSD1306_128X64_NONAME_F_8080 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8);
  46. //U8G2_SSD1306_128X64_VCOMH0_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // same as the NONAME variant, but maximizes setContrast() range
  47. //U8G2_SSD1306_128X64_ALT0_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // same as the NONAME variant, but may solve the "every 2nd line skipped" problem
  48. //U8G2_SH1106_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  49. //U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
  50. //U8G2_SH1106_128X64_VCOMH0_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);        // same as the NONAME variant, but maximizes setContrast() range
  51. //U8G2_SH1106_128X64_WINSTAR_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);        // same as the NONAME variant, but uses updated SH1106 init sequence
  52. //U8G2_SH1107_64X128_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  53. //U8G2_SH1107_128X128_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  54. //U8G2_SH1107_128X128_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8);
  55. //U8G2_SH1107_SEEED_96X96_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  56. //U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 21, /* data=*/ 20, /* reset=*/ U8X8_PIN_NONE);   // Adafruit Feather M0 Basic Proto + FeatherWing OLED
  57. U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // Adafruit Feather ESP8266/32u4 Boards + FeatherWing OLED
  58. //U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);  // Adafruit ESP8266/32u4/ARM Boards + FeatherWing OLED
  59. //U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA);   // pin remapping with ESP8266 HW I2C
  60. //U8G2_SSD1306_64X48_ER_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);   // EastRising 0.66" OLED breakout board, Uno: A4=SDA, A5=SCL, 5V powered
  61. //U8G2_SSD1306_64X32_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
  62. //U8G2_SSD1306_64X32_1F_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
  63. //U8G2_SSD1306_96X16_ER_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);   // EastRising 0.69" OLED
  64. //U8G2_SSD1322_NHD_256X64_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // Enable U8G2_16BIT in u8g2.h
  65. //U8G2_SSD1322_NHD_256X64_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // Enable U8G2_16BIT in u8g2.h
  66. //U8G2_SSD1322_NHD_128X64_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  67. //U8G2_SSD1322_NHD_128X64_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  68. //U8G2_SSD1325_NHD_128X64_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  69. //U8G2_SSD1325_NHD_128X64_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  70. //U8G2_SSD1326_ER_256X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);         // experimental driver for ER-OLED018-1
  71. //U8G2_SSD1327_SEEED_96X96_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);    // Seeedstudio Grove OLED 96x96
  72. //U8G2_SSD1327_SEEED_96X96_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);    // Seeedstudio Grove OLED 96x96
  73. //U8G2_SSD1327_MIDAS_128X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  74. //U8G2_SSD1327_MIDAS_128X128_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  75. //U8G2_SSD1329_128X96_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  76. //U8G2_SSD1329_128X96_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  77. //U8G2_SSD1305_128X32_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  78. //U8G2_SSD1305_128X32_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  79. //U8G2_SSD1309_128X64_NONAME0_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  80. //U8G2_SSD1309_128X64_NONAME0_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  81. //U8G2_SSD1309_128X64_NONAME2_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  82. //U8G2_SSD1309_128X64_NONAME2_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  83. //U8G2_LD7032_60X32_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* cs=*/ 9, /* dc=*/ 10, /* reset=*/ 8);    // SW SPI Nano Board
  84. //U8G2_LD7032_60X32_F_4W_SW_I2C u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* reset=*/ U8X8_PIN_NONE);    // NOT TESTED!
  85. //U8G2_UC1701_EA_DOGS102_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  86. //U8G2_UC1701_EA_DOGS102_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  87. //U8G2_PCD8544_84X48_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);  // Nokia 5110 Display
  88. //U8G2_PCD8544_84X48_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);         // Nokia 5110 Display
  89. //U8G2_PCF8812_96X65_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // Could be also PCF8814
  90. //U8G2_PCF8812_96X65_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);                        // Could be also PCF8814
  91. //U8G2_HX1230_96X68_F_3W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* reset=*/ 8);
  92. //U8G2_HX1230_96X68_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  93. //U8G2_KS0108_128X64_F u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*dc=*/ 17, /*cs0=*/ 14, /*cs1=*/ 15, /*cs2=*/ U8X8_PIN_NONE, /* reset=*/  U8X8_PIN_NONE);     // Set R/W to low!
  94. //U8G2_KS0108_ERM19264_F u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*dc=*/ 17, /*cs0=*/ 14, /*cs1=*/ 15, /*cs2=*/ 16, /* reset=*/  U8X8_PIN_NONE);     // Set R/W to low!
  95. //U8G2_ST7920_192X32_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ U8X8_PIN_NONE, /*dc=*/ 17, /*reset=*/ U8X8_PIN_NONE);
  96. //U8G2_ST7920_192X32_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE);
  97. //U8G2_ST7920_128X64_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18 /* A4 */, /*cs=*/ U8X8_PIN_NONE, /*dc/rs=*/ 17 /* A3 */, /*reset=*/ 15 /* A1 */);    // Remember to set R/W to 0
  98. //U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE);
  99. //U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8);
  100. //U8G2_ST7920_128X64_F_HW_SPI u8g2(U8G2_R0, /* CS=*/ 10, /* reset=*/ 8);
  101. //U8G2_ST7565_EA_DOGM128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  102. //U8G2_ST7565_EA_DOGM128_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  103. //U8G2_ST7565_64128N_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  104. //U8G2_ST7565_64128N_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  105. //U8G2_ST7565_EA_DOGM132_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE);    // DOGM132 Shield
  106. //U8G2_ST7565_EA_DOGM132_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE);    // DOGM132 Shield
  107. //U8G2_ST7565_ZOLEN_128X64_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  108. //U8G2_ST7565_ZOLEN_128X64_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  109. //U8G2_ST7565_LM6059_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);        // Adafruit ST7565 GLCD
  110. //U8G2_ST7565_LM6059_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);        // Adafruit ST7565 GLCD
  111. //U8G2_ST7565_ERC12864_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  112. //U8G2_ST7565_ERC12864_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  113. //U8G2_ST7565_NHD_C12832_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  114. //U8G2_ST7565_NHD_C12832_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  115. //U8G2_ST7565_NHD_C12864_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  116. //U8G2_ST7565_NHD_C12864_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  117. //U8G2_ST7567_PI_132X64_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8);  // Pax Instruments Shield, LCD_BL=6
  118. //U8G2_ST7567_PI_132X64_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8);  // Pax Instruments Shield, LCD_BL=6
  119. //U8G2_ST7567_JLX12864_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8);
  120. //U8G2_ST7567_JLX12864_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8);
  121. //U8G2_ST75256_JLX172104_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  122. //U8G2_ST75256_JLX172104_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  123. //U8G2_ST75256_JLX256128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // Enable U8g2 16 bit mode for this display
  124. //U8G2_ST75256_JLX256128_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);        // Enable U8g2 16 bit mode for this display
  125. //U8G2_ST75256_JLX25664_F_2ND_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8);    // Due, 2nd I2C, enable U8g2 16 bit mode for this display
  126. //U8G2_NT7534_TG12864R_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  127. //U8G2_NT7534_TG12864R_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  128. //U8G2_ST7588_JLX12864_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ 5);
  129. //U8G2_ST7588_JLX12864_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ 5);
  130. //U8G2_IST3020_ERC19264_F_6800 u8g2(U8G2_R0, 44, 43, 42, 41, 40, 39, 38, 37,  /*enable=*/ 28, /*cs=*/ 32, /*dc=*/ 30, /*reset=*/ 31); // Connect WR pin with GND
  131. //U8G2_IST3020_ERC19264_F_8080 u8g2(U8G2_R0, 44, 43, 42, 41, 40, 39, 38, 37,  /*enable=*/ 29, /*cs=*/ 32, /*dc=*/ 30, /*reset=*/ 31); // Connect RD pin with 3.3V
  132. //U8G2_IST3020_ERC19264_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  133. //U8G2_LC7981_160X80_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND
  134. //U8G2_LC7981_160X160_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND
  135. //U8G2_LC7981_240X128_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND
  136. //U8G2_SED1520_122X32_F u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*dc=*/ A0, /*e1=*/ A3, /*e2=*/ A2, /* reset=*/  A4);     // Set R/W to low!
  137. //U8G2_T6963_240X128_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND
  138. //U8G2_T6963_256X64_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND
  139. //U8G2_SED1330_240X128_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FG with GND
  140. //U8G2_SED1330_240X128_F_6800 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8); // A0 is dc pin!
  141. //U8G2_RA8835_NHD_240X128_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect /RD = E with +5V, enable is /WR = RW, FG with GND, 14=Uno Pin A0
  142. //U8G2_RA8835_NHD_240X128_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7,  /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // A0 is dc pin, /WR = RW = GND, enable is /RD = E
  143. //U8G2_UC1604_JLX19264_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  144. //U8G2_UC1604_JLX19264_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  145. //U8G2_UC1608_ERC24064_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);  // SW SPI, Due ERC24064-1 Test Setup
  146. //U8G2_UC1608_ERC240120_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  147. //U8G2_UC1608_240X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);  // SW SPI, Due ERC24064-1 Test Setup
  148. //U8G2_UC1610_EA_DOGXL160_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/  U8X8_PIN_NONE);
  149. //U8G2_UC1610_EA_DOGXL160_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/  U8X8_PIN_NONE);
  150. //U8G2_UC1611_EA_DOGM240_F_2ND_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8);    // Due, 2nd I2C, DOGM240 Test Board
  151. //U8G2_UC1611_EA_DOGM240_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);   // Due, SW SPI, DOGXL240 Test Board
  152. //U8G2_UC1611_EA_DOGXL240_F_2ND_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8);    // Due, 2nd I2C, DOGXL240 Test Board
  153. //U8G2_UC1611_EA_DOGXL240_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);   // Due, SW SPI, DOGXL240 Test Board
  154. //U8G2_UC1611_EW50850_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7,  /*enable=*/ 18, /*cs=*/ 3, /*dc=*/ 16, /*reset=*/ 16); // 240x160, Connect RD/WR1 pin with 3.3V, CS is aktive high
  155. //U8G2_UC1638_160X128_F_4W_HW_SPI u8g2(U8G2_R2, /* cs=*/ 2, /* dc=*/ 3, /* reset=*/ 4);      // Not tested
  156. //U8G2_SSD1606_172X72_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);        // eInk/ePaper Display
  157. //U8G2_SSD1607_200X200_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // eInk/ePaper Display, original LUT from embedded artists
  158. //U8G2_SSD1607_GD_200X200_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // Good Display
  159. //U8G2_IL3820_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display!
  160. //U8G2_IL3820_V2_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display!

  161. // End of constructor list

  162. void setup(void) {
  163.   u8g2.begin();
  164.   u8g2.enableUTF8Print();        // enable UTF8 support for the Arduino print() function
  165. }

  166. void loop(void) {
  167.   u8g2.setFont(u8g2_font_unifont_t_chinese2);  // use chinese2 for all the glyphs of "你好世界"
  168.   u8g2.setFontDirection(0);
  169.   u8g2.clearBuffer();
  170.   u8g2.setCursor(0, 15);
  171.   u8g2.print("Hello World!");
  172.   u8g2.setCursor(0, 30);
  173.   u8g2.print("世界很大我想走走");   
  174.   u8g2.sendBuffer();

  175.   delay(1000);
  176. }
复制代码




回复

使用道具 举报

ID:513258 发表于 2020-2-23 10:08 | 显示全部楼层
23.jpg
回复

使用道具 举报

ID:513258 发表于 2020-2-23 10:11 | 显示全部楼层
实验之七:使用U8g2输出中文(一心一意打击病毒)

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料 +代码 +图形 +仿真)
  3.   实验一百四十四:0.91寸OLED液晶屏显示模块 IIC
  4.   安装库:IDE—工具—管理库—搜索U8g2lib—安装

  5.   实验接线方法
  6.   oled模块    Ardunio Uno
  7.   GND---------GND接地线
  8.   VCC---------5V 接电源
  9.   SDA---------A4
  10.   SCL ------- A5
  11.   实验之七:使用U8g2输出中文(一心一意打击病毒)
  12. */

  13. #include <Arduino.h>
  14. #include <U8g2lib.h>

  15. #ifdef U8X8_HAVE_HW_I2C
  16. #include <Wire.h>
  17. #endif

  18. U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
  19. //SSD1306_128X32 I2C接口

  20. void setup(void) {
  21.   u8g2.begin();
  22.   u8g2.enableUTF8Print();
  23.   // 为Arduino print()函数启用UTF8支持
  24. }

  25. void loop(void) {
  26.   u8g2.clearBuffer();  // 清除缓存
  27.   u8g2.setFont(u8g2_font_victoriabold8_8r);// 设置字母字体
  28.   u8g2.drawStr(0, 7, "I"); // 显示“I”
  29.   u8g2.setFont(u8g2_font_open_iconic_human_1x_t); // 设置心形字体
  30.   u8g2.drawGlyph(8, 7, 66); // 画心
  31.   u8g2.drawGlyph(16, 7, 66); // 画心
  32.   u8g2.setFont(u8g2_font_victoriabold8_8r);// 设置字母字体
  33.   u8g2.drawStr(24, 7, "U"); // 显示“U”
  34.   u8g2.sendBuffer();          // 显示内容
  35.   delay(1000);


  36.   u8g2.setFont(u8g2_font_unifont_t_chinese2);
  37.   // 对“一心一意打击病毒”的所有字形使用chinese2
  38.   u8g2.setFontDirection(0);
  39.   u8g2.clearBuffer();
  40.   u8g2.setCursor(0, 15);
  41.   u8g2.print("Attack virus");
  42.   u8g2.setCursor(0, 30);
  43.   u8g2.print("一心一意打击病毒");
  44.   u8g2.sendBuffer();
  45.   delay(1000);
  46. }
复制代码



回复

使用道具 举报

ID:513258 发表于 2020-2-23 10:19 | 显示全部楼层
29-.gif
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表