久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8739|回復: 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?昭ㄗ⑷雽幽軌驅ζ骷年枠O進行修飾,并可以使來自陽極的空穴順利的注入到空穴傳輸層;空穴傳輸層負責將空穴運輸到發光層;電子阻擋層會把來自陰極的電子阻擋在器件的發光層界面處,增大器件發光層界面處電子的濃度;發光層為器件電子和空穴再結合形成激子然后激子退激發光的地方;空穴阻擋層會將來自陽極的空穴阻擋在器件發光層的界面處,進而提高器件發光層界面處電子和空穴再結合的概率,增大器件的發光效率;電子傳輸層負責將來自陰極的電子傳輸到器件的發光層中;電子注入層起對陰極修飾及將電子傳輸到電子傳輸層的作用;陰極中的電子會在器件外加驅動電壓的驅動下向器件的發光層移動,然后在發光層與來自陽極的空穴進行再結合。

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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区久久久久久久久 | 久草在线在线精品观看 | 九九九视频精品 | 日韩成人在线播放 | 日本大香伊一区二区三区 | 激情网五月天 | h视频在线看 | 国产精品一区久久久 | 欧美一区二区免费 | 国产精品高潮呻吟久久久久 | 一区二区精品 | 日韩亚洲欧美一区 | 国产一区2区 | 国产日韩精品视频 | 久在线精品视频 | 亚洲视频精品 | 欧美激情在线精品一区二区三区 | 午夜无码国产理论在线 | 日韩在线观看网站 | 精品乱人伦一区二区三区 | 亚洲精品中文在线观看 | 国产精品99| 亚洲日本视频 | 97日日碰人人模人人澡分享吧 | 久久精品亚洲精品国产欧美 | 国产精品一区二区欧美黑人喷潮水 | 人人人人人爽 | 日韩精品一区二区三区在线观看 | 久久综合香蕉 | gav成人免费播放视频 | 2019中文字幕视频 | 国产黄色在线 | 成人视屏在线观看 | 国产情侣久久 | 欧美一区二区在线观看 | 在线免费激情视频 | 国产资源在线视频 | 久久久黑人 | 欧美激情在线精品一区二区三区 | 成人午夜精品 | 久在线视频播放免费视频 |