Godzilla 发表于 2015-3-7 20:37:32

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

就这样一段简单的代码,在12864屏上每一行都只显示一半是怎么回事?
u8g.firstPage();
do {
   if (nexttime-time>=1 || time_status==1){
   draw();
   u8g.setPrintPos(7,28);
   u8g.print(PM25);
   u8g.setPrintPos(54,60);
   u8g.print(AQI);
   u8g.setPrintPos(96,28);
   u8g.print(temp);
   u8g.drawBitmapP(111, 17, 2,12, duc);
   u8g.setPrintPos(95,60);
   u8g.print(humi);
   u8g.drawStr(114, 60, "%");
   u8g.setPrintPos(54,28);
   u8g.print(VOC);
   //u8g.drawBitmapP(111, 35, 2,12, wei);
   nexttime=millis();
   time=millis();
   time_status=0;
   }
   else{
   nexttime=millis();
   time_status=0;
   }
}
while(u8g.nextPage());
如果把nexttime-time>=1 改成>=0,就可以全部显示,如果改成>=2或者以上的就全部不显示了,这是为什么

Be1ieve 发表于 2015-3-7 22:10:52

firstPage()跟nextPage()畫的都是同一個畫面,請把下面這串當做不可改

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

u8g.setPrintPos()那些內容就寫在draw()裡面,if else擺到最外面

Godzilla 发表于 2015-3-7 22:18:09

u8g.firstPage();和u8g.nextPage()分别起什么作用啊

Godzilla 发表于 2015-3-7 22:29:53

搞定,谢谢Be1ieve,但我还是不明白为什么会齐刷刷的削掉一半?

Be1ieve 发表于 2015-3-8 00:59:11

u8g繪圖的方式很特殊,不過結果很簡單:每次跑完上面那一整串才算完成一個畫面

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

Godzilla 发表于 2015-3-8 21:58:38

明白了,谢谢be1ieve
页: [1]
查看完整版本: 大家帮我看看这段代码问题出在什么地方?