极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10927|回复: 5

大家帮我看看这段代码问题出在什么地方?

[复制链接]
发表于 2015-3-7 20:37:32 | 显示全部楼层 |阅读模式
就这样一段简单的代码,在12864屏上每一行都只显示一半是怎么回事?
  1. u8g.firstPage();  
  2. do {
  3.    if (nexttime-time>=1 || time_status==1){
  4.      draw();
  5.      u8g.setPrintPos(7,28);
  6.      u8g.print(PM25);
  7.      u8g.setPrintPos(54,60);
  8.      u8g.print(AQI);
  9.      u8g.setPrintPos(96,28);
  10.      u8g.print(temp);
  11.      u8g.drawBitmapP(111, 17, 2,12, duc);
  12.      u8g.setPrintPos(95,60);
  13.      u8g.print(humi);
  14.      u8g.drawStr(114, 60, "%");
  15.      u8g.setPrintPos(54,28);
  16.      u8g.print(VOC);
  17.      //u8g.drawBitmapP(111, 35, 2,12, wei);
  18.      nexttime=millis();
  19.      time=millis();
  20.      time_status=0;
  21.    }
  22.    else{
  23.      nexttime=millis();
  24.      time_status=0;
  25.    }
  26. }
  27. while(u8g.nextPage());
复制代码

如果把  nexttime-time>=1 改成>=0,就可以全部显示,如果改成>=2或者以上的就全部不显示了,这是为什么

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-3-7 22:10:52 | 显示全部楼层
firstPage()跟nextPage()畫的都是同一個畫面,請把下面這串當做不可改

u8g.firstPage();
do{
  draw();
} while(u8g.nextPage());

u8g.setPrintPos()那些內容就寫在draw()裡面,if else擺到最外面
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-7 22:18:09 | 显示全部楼层
u8g.firstPage();和u8g.nextPage()分别起什么作用啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-7 22:29:53 | 显示全部楼层
搞定,谢谢Be1ieve,但我还是不明白为什么会齐刷刷的削掉一半?
回复 支持 反对

使用道具 举报

发表于 2015-3-8 00:59:11 | 显示全部楼层
u8g繪圖的方式很特殊,不過結果很簡單:每次跑完上面那一整串才算完成一個畫面

有沒有算過儲存一個128*64的黑白畫面要多少內存?1KB!
整個328P也只有2KB可以用而已,1KB可說是非常奢侈的
為了節省內存,u8g必須將一個畫面分成好幾次繪製。例如樓主的畫面至少是8分割
於是就出現了上面那串,作者稱為picture loop的東西,作為處理分割畫面的手段
也就是從firstloop()開始一直到nextloop()回傳0,程式跳出do{}為止才算是一個完整畫面的完成
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-8 21:58:38 | 显示全部楼层
明白了,谢谢be1ieve
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 14:05 , Processed in 0.041538 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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