[arduino][u8g2][12864] oled—u8g2庫使用說明(例子是12864液晶屏)
首先說一下寫這個文檔的目的,一是給自己做個筆記來以備後邊使,二是寫個文檔給大家看,我從網上找了很多相關的文檔,但真正的能讓人看明白的卻是不多,當然我寫的你也有可能看不懂,哈哈!
1.12864引腳
我們采用的是7線的spi接口的ssd1306_128x64 oled顯示屏
它包含7個引腳:
1.vcc:這個就沒啥能說的了,就是接電源3.3v或者5v
2.gnd:接地
3.D0:spi接口的時鐘線
4.D1:spi接口的資料線
5.RES:複位線,上電後需要一次複位
6.D/C:spi的資料指令選擇指令
7.CS:spi片選,低電平有效,如不想用必須接地

2.軟體部分
1.建立對象
聲明函數:
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* D0=*/ 13, /* D1=*/ 11, /* CS=*/ 10, /* DC=*/ 9, /* RES=*/ 8);
這個你需要知道你所有的顯示器的資訊(其實就是你要知道顯示器的型号),然後從arduino中u8g2庫中随便打開一個例子,上邊就會有一排注釋的型号,找到你的型号,然後複制粘貼就好了,這個對象就建立好了。
就像這樣:
2.firstPage(),nextPage()
# include<Arduino.h>
# include<SPI.h>
# include<U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* D0=*/ 13, /* D=*/ 11, /* CS=*/ 10, /* DC=*/ 9, /* RES=*/ 8);
void setup() {
u8g2.begin();//選擇u8g2模式
}
void loop() {
u8g2.firstPage();//調用此過程,标值着圖像循環的開始
do{
u8g2.drawBox(48,20,25,15);//drawBox(x,y,w,h);x:矩形左上角的 橫坐标;y:矩形左上角的 縱坐标;w:矩形的 寬;h:矩形的 高
}while(u8g2.nextPage());//nextPage()調用此過程,标志着圖像循環的結束
delay(1000);
}
3.圖形函數
1.drawPixel(x,y);//作用:畫一個點 x:點的橫坐标,y:點的縱坐标
2.drawLine(x1,y1,x2,y2);//作用:畫一條線段 x1: 線段起點 橫坐标,y1: 線段起點 縱坐标,x2: 線段終點橫坐标,y2: 線段終點 縱坐标
3.drawHLine(x,y,w);//作用:畫一條向右的水準線段 x:線段起點 橫坐标,y:線段起點 縱坐标,w:水準寬度(w個像 //素點)
4.drawVLine(x,y,w);//作用:畫一條向下的水準線段 x:線段起點 橫坐标,y:線段起點 縱坐标,w:垂直高度(w個像素點)
5.drawTriangle(x0,y0,x1,y1,x2,y2);//作用:畫一個實心三角形(空心三角形, 可以用drawLine畫出) x0:其中一角的 橫坐标,y0:其中一角的 縱坐标,x1:另一角的 橫坐标,y1:另一角的 縱坐标,x2:最後一角的 橫坐标,y2:最後一角的 縱坐标
6.drwaFrame(x,y,w,h);//作用:畫一個空心矩形 x:方框左上角點的橫坐标,y:方框左上角點的縱坐标,w:方框的寬,h:方框的高
7.drawRFrame(x,y,w,h,r);//作用:畫一個[color=Red]圓角空心矩形其中 最好滿 足:w>=2x(r+1), h>=2x(r+1) x:圓角矩形左上角 橫坐标,y:圓角矩形左上角 縱坐标,w:圓角矩形寬度,h:圓角矩形高度,r:圓角弧度的半徑
8.drawBox(x,y,w,h)//作用:畫一個實心矩形 x:矩形左上角的 橫坐标,y:矩形左 上角的 縱坐标,w:矩形的 寬,h:矩形的 高
9.drawRBox(x,y,w,h,r);//作用: 畫一個圓角實心矩形,與drawTFrame類似 x:圓角矩形左上角 橫坐标,y:圓角矩形左上角 縱坐标,w:矩形的 寬,h:矩形的 高,r:圓角弧度半徑
10.drawCircle(x0,y0,rad,opt);//作用:畫一個空心圓 , x0:圓心 橫坐标y0:圓心 縱坐标,rad:半徑;
//opt:
// U8G_DRAW_UPPER_RIGHT 上部右側 1/4 圓弧
// U8G_DRAW_UPPER_LEFT 上部左側 1/4 圓弧
// U8G_DRAW_LOWER_LEFT 下部左側 1/4 圓弧
// U8G_DRAW_LOWER_RIGHT 下部右側 1/4 圓弧
// U8G_DRAW_ALL 整圓(預設)
//空心圓例子:
u8g.drawCircle(20,20, 14); //整圓
u8g.drawCircle(20,20, 14, U8G_DRAW_UPPER_RIGHT); //1/4圓
11.drawDisc(x0,y0,rad,opt);//同10
12.drawEllipse(x0,rx,ry,opt);//作用:畫一個橢圓
13.drawFilledEllipse(x0,rx,ry,opt);//作用:畫一個橢圓(實心)
4.設定
1.setFront();//設定要顯示的字元的字型。
2.setPrintPos(x,y);//作用:設定下文中print()的顯示位置 x:橫坐标,y:縱坐标
3.setColorIndex(color_index);//作用:對于本文使用的單色oled來說,此函數的功能為顯示對象。可以了解為透明或不透明。對于灰階值得螢幕則是一個灰階值 color_index:0 或 1;
4.setRot90(),setRot180(),setRot270()//作用:将顯示得結果旋轉90,180,270.
5.setFrontPosTop();//使用drawStr顯示字元串時,預設标準為顯示字元的左下角坐标,本函數可了解為将坐标位置改為顯示字元串的左上角為坐标标準.
5.顯示字元
1.drawStr(x,y,*c);//功能:使用前要使用setFont函數設定顯示字元的字型另外還有drawStr90(),drawStr180(),drawStr270();将字元順時針旋轉相應的角度 x:字元左下角的橫坐标,y:字元左下角的縱坐标,*c:要顯示的字元
2.print(...);//功能:列印要顯示的字元,包括變量值、字元串等,使用前要使用setPrintPos()函數設定位置。
6.圖像
1.drawXBMP(x,y,w,h,*bitmap);//功能:顯示一個位圖的方法 x:位圖左上角的橫坐标 y:位圖左上角的縱坐标 w:位圖的寬 h:位圖的高 *bitmap:位圖對象
2.drawBitmapP(x,y,cnt,h,*bitmap);//作用:顯示位圖的方法 x:位圖左上角的橫坐标 y:位圖左上角的縱坐标 cnt:在水準方向上位圖的位元組數,該位圖的寬度是cnt*8 h:位圖的高 *bitmap:位圖對象
7.獲得圖像
1.getHeight();//作用:獲得螢幕高度放在picture loop裡面和外面均可以,傳回:螢幕高度
2.getWidth();//作用:獲得螢幕寬度放在picture loop 裡面和外面都可以,傳回:螢幕寬度
3.getStrWidth();//作用:獲得顯示字元串的寬度,按照不同字型顯示的字元串高度共占了多少像素 傳回值:字元串的寬度
3.安裝u8g2庫
4.參考的大神連結
1. u8glib, u8g2的常用函數說明
這個大神裡面各個函數都有例子
2.【原創】OLED屏-U8glib庫 增強版 U8G2庫
這個大神寫的不錯
3.感覺不錯的話,打個賞呗,雖然我還不知道咋打賞
4.如有侵權請聯系我
qq:2640014603