找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

U8glib写的oled电量显示

查看数: 9124 | 评论数: 5 | 收藏 2
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-1-17 20:10

正文摘要:

用的U8glib写的,用了两种方式,位图和字符输出

回复

ID:371527 发表于 2018-12-18 20:34
谢谢!看看你的显示效果,如果上贴图片更直观
ID:429183 发表于 2018-11-22 12:27
膜拜大神。。。
ID:373684 发表于 2018-10-21 16:48
楼上都是大神啊。
ID:277903 发表于 2018-5-13 09:45
代码帮你改了下 现在正常可以使用

  1. #include "U8glib.h"
  2. //U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);        // I2C / TWI
  3. U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);        // I2C / TWI  SDA A4 SCL   A5
  4. //static unsigned char u8g_logo_bits[] = {
  5. int flash = 0;
  6. const uint8_t rook_bitmap5[] U8G_PROGMEM = {
  7.   0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFE, 0x00, 0x00
  8. };//电池满
  9. const uint8_t rook_bitmap4[] U8G_PROGMEM = {
  10.   0x00, 0x00, 0xFE, 0xFD, 0xFD, 0xFE, 0x00, 0x00
  11. };
  12. const uint8_t rook_bitmap3[] U8G_PROGMEM = {
  13.   0x00, 0x00, 0xFE, 0xF9, 0xF9, 0xFE, 0x00, 0x00
  14. };
  15. const uint8_t rook_bitmap2[] U8G_PROGMEM = {
  16.   0x00, 0x00, 0xFE, 0xE1, 0xE1, 0xFE, 0x00, 0x00
  17. };
  18. const uint8_t rook_bitmap1[] U8G_PROGMEM = {
  19.   0x00, 0x00, 0xFE, 0x81, 0x81, 0xFE, 0x00, 0x00
  20. };
  21. const uint8_t rook_bitmap0[] U8G_PROGMEM = {
  22.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  23. }; //电池空
  24. //读取vcc电压
  25. long readVcc() {
  26.   long result;
  27.   // Read 1.1V reference against AVcc
  28.   ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  29.   delay(2); // Wait for Vref to settle
  30.   ADCSRA |= _BV(ADSC); // Convert
  31.   while (bit_is_set(ADCSRA, ADSC));
  32.   result = ADCL;
  33.   result |= ADCH << 8;
  34.   result = 1126400L / result; // Back-calculate AVcc in mV
  35.   return result;
  36. }
  37. void loop(void) {
  38.   float vcc_vol = readVcc() / 1000;            //将读取的vcc电压mv转换为v
  39.   //旋转90°
  40.   //u8g.setRot90(); //or setRot180();  setRot270();
  41.   u8g.firstPage();
  42.   do {
  43.     u8g.setFont(u8g_font_gdr14r);//坐标函数 字体osb18
  44.     if (vcc_vol >= 4.5 ) {
  45.       u8g.drawBitmapP(0, 0, 1, 8, rook_bitmap5);
  46.     }
  47.     if (vcc_vol < 4.5 && vcc_vol >= 4 ) {
  48.       u8g.drawBitmapP(0, 0, 1, 8, rook_bitmap4);
  49.     }
  50.     if (vcc_vol < 4 && vcc_vol >= 3.5 ) {

  51.       u8g.drawBitmapP(0, 0, 1, 8, rook_bitmap3);
  52.     }
  53.     if (vcc_vol < 3.5 && vcc_vol >= 3 ) {

  54.       u8g.drawBitmapP(0, 0, 1, 8, rook_bitmap2);
  55.     }
  56.     if (vcc_vol < 3 ) {                //当VCC电压小于3v时图标闪烁,电池电量不足警告
  57.       switch (flash) {
  58.         case 0:
  59.           u8g.drawBitmapP(0, 0, 1, 8, rook_bitmap1);
  60.           flash = 1;
  61.           break;
  62.         case 1:
  63.           u8g.drawBitmapP(0, 0, 1, 8, rook_bitmap0);
  64.           flash = 0;
  65.           break;
  66.       }
  67.     }
  68.   } while ( u8g.nextPage() );
  69. }

  70. void setup(void) {
  71.   // flip screen, if required
  72.   // u8g.setRot180();
  73. }


复制代码
ID:255921 发表于 2018-1-19 17:18
代码有点问题了,不过现在没时间改了

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

Powered by 单片机教程网

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