標題:
U8glib寫的oled電量顯示
[打印本頁]
作者:
韓洪壯
時間:
2018-1-17 20:10
標題:
U8glib寫的oled電量顯示
用的U8glib寫的,用了兩種方式,位圖和字符輸出
QQ圖片20180117200534.png
(13.14 KB, 下載次數(shù): 93)
下載附件
2018-1-17 20:06 上傳
,代碼直接打包放下面,默認i2c接線A4 A5。我用的arduino nano ,OLED顯示屏顯示的位置根據(jù)自己需要改代碼中相應(yīng)位置
源程序如下:
#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轉(zhuǎn)換為v
//旋轉(zhuǎn)90°
//u8g.setRot90(); //or setRot180(); setRot270();
u8g.setFont(u8g_font_gdr14r);//坐標函數(shù) 字體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, 下載次數(shù): 65)
2018-1-17 20:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
韓洪壯
時間:
2018-1-19 17:18
代碼有點問題了,不過現(xiàn)在沒時間改了
作者:
createskyblue
時間:
2018-5-13 09:45
代碼幫你改了下 現(xiàn)在正?梢允褂
#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
//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轉(zhuǎn)換為v
//旋轉(zhuǎn)90°
//u8g.setRot90(); //or setRot180(); setRot270();
u8g.firstPage();
do {
u8g.setFont(u8g_font_gdr14r);//坐標函數(shù) 字體osb18
if (vcc_vol >= 4.5 ) {
u8g.drawBitmapP(0, 0, 1, 8, rook_bitmap5);
}
if (vcc_vol < 4.5 && vcc_vol >= 4 ) {
u8g.drawBitmapP(0, 0, 1, 8, rook_bitmap4);
}
if (vcc_vol < 4 && vcc_vol >= 3.5 ) {
u8g.drawBitmapP(0, 0, 1, 8, rook_bitmap3);
}
if (vcc_vol < 3.5 && vcc_vol >= 3 ) {
u8g.drawBitmapP(0, 0, 1, 8, rook_bitmap2);
}
if (vcc_vol < 3 ) { //當VCC電壓小于3v時圖標閃爍,電池電量不足警告
switch (flash) {
case 0:
u8g.drawBitmapP(0, 0, 1, 8, rook_bitmap1);
flash = 1;
break;
case 1:
u8g.drawBitmapP(0, 0, 1, 8, rook_bitmap0);
flash = 0;
break;
}
}
} while ( u8g.nextPage() );
}
void setup(void) {
// flip screen, if required
// u8g.setRot180();
}
復制代碼
作者:
cr8526
時間:
2018-10-21 16:48
樓上都是大神啊。
作者:
白魚
時間:
2018-11-22 12:27
膜拜大神。。。
作者:
1113634577
時間:
2018-12-18 20:34
謝謝!看看你的顯示效果,如果上貼圖片更直觀
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1