用的U8glib寫的,用了兩種方式,位圖和字符輸出
QQ圖片20180117200534.png (13.14 KB, 下載次數: 93)
下載附件
2018-1-17 20:06 上傳
,代碼直接打包放下面,默認i2c接線A4 A5。我用的arduino nano ,OLED顯示屏顯示的位置根據自己需要改代碼中相應位置
源程序如下:
- #include "U8glib.h"
- U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
- //U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI SDA A4 SCL A5
- #define u8g_logo_width 38
- #define u8g_logo_height 24
- //static unsigned char u8g_logo_bits[] = {
- int flash=0;
- const uint8_t rook_bitmap5[] U8G_PROGMEM = {
- 0x00,0x00,0xFE,0xFF,0xFF,0xFE,0x00,0x00};//電池滿
- const uint8_t rook_bitmap4[] U8G_PROGMEM = {
- 0x00,0x00,0xFE,0xFD,0xFD,0xFE,0x00,0x00};
- const uint8_t rook_bitmap3[] U8G_PROGMEM = {
- 0x00,0x00,0xFE,0xF9,0xF9,0xFE,0x00,0x00};
- const uint8_t rook_bitmap2[] U8G_PROGMEM = {
- 0x00,0x00,0xFE,0xE1,0xE1,0xFE,0x00,0x00};
- const uint8_t rook_bitmap1[] U8G_PROGMEM = {
- 0x00,0x00,0xFE,0x81,0x81,0xFE,0x00,0x00};
- const uint8_t rook_bitmap0[] U8G_PROGMEM = {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //電池空
- //讀取vcc電壓
- long readVcc() {
- long result;
- // Read 1.1V reference against AVcc
- ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
- delay(2); // Wait for Vref to settle
- ADCSRA |= _BV(ADSC); // Convert
- while (bit_is_set(ADCSRA,ADSC));
- result = ADCL;
- result |= ADCH<<8;
- result = 1126400L / result; // Back-calculate AVcc in mV
- return result;
- }
- void loop(void) {
- float vcc_vol=readVcc()/1000; //將讀取的vcc電壓mv轉換為v
- //旋轉90°
- //u8g.setRot90(); //or setRot180(); setRot270();
- u8g.setFont(u8g_font_gdr14r);//坐標函數 字體osb18
- // u8g.setPrintPos(0, 20); //定位電池電量圖標的起始位置
- if (vcc_vol >=4.5 ){
- u8g.drawXBMP( 0, 0, u8g_logo_width, u8g_logo_height, rook_bitmap5);// u8g.drawXBMP( 0, 0, u8g_logo_width, u8g_logo_height, rook_bitmap0);
- }
- if (vcc_vol <4.5 && vcc_vol>=4 ){
- u8g.drawXBMP( 0, 0, u8g_logo_width, u8g_logo_height, rook_bitmap4);
- }
- if (vcc_vol <4 && vcc_vol>=3.5 ){
- u8g.drawXBMP( 0, 0, u8g_logo_width, u8g_logo_height, rook_bitmap3);
- }
- if (vcc_vol <3.5 && vcc_vol>=3 ){
- u8g.drawXBMP( 0, 0, u8g_logo_width, u8g_logo_height, rook_bitmap2);
- }
- if (vcc_vol <3 ){ //當VCC電壓小于3v時圖標閃爍,電池電量不足警告
- switch (flash){
- case 0:
- u8g.drawXBMP( 0, 0, u8g_logo_width, u8g_logo_height, rook_bitmap1);
- flash=1;
- break;
- case 1:
- u8g.drawXBMP( 0, 0, u8g_logo_width, u8g_logo_height, rook_bitmap0);
- flash=0;
- break;
- }
- }
-
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
XBM.zip
(1.24 KB, 下載次數: 65)
2018-1-17 20:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|