采用先把所有一屏所需數據全采集好再作處理的方法,明顯提高了工作速度,最簡潔的代碼如下:
#include <U8glib.h> //聲明庫
U8GLIB_ST7920_128X64_4X u8g(13, 12, 11); // 聲明液晶屏 13=SCLK, 12=SID, 11=CS
int x,y; int Buffer[128];//
void setup( ) { }
void loop( )
{
for(x = 0;x < 128;x++) //信號采樣
Buffer[x] = 63-(analogRead(A0)>>4);
u8g.firstPage(); //清屏
do //顯示
{
for(x = 0;x < 127;x++)
u8g.drawLine(x,Buffer[x],x,Buffer[x+1]); //畫相鄰兩點連線
}
while(u8g.nextPage( ));
}
用arduino代碼,完成一次AD轉換約需112微秒,這樣顯示頻率在1500Hz以下的輸入信號的波形。
如果想在程序上加坐標軸和邊框,代碼如下:
#include <U8glib.h> //聲明庫
U8GLIB_ST7920_128X64_4X u8g(13, 12, 11); // 聲明液晶屏 13=SCLK, 12=SID, 11=CS
int x,y; int Buffer[128];
void setup( )
{
analogReference(INTERNAL); //ADC使用單片機內部1.1V基準
}
void loop( )
{
for(x = 0;x < 128;x++) //信號采樣
Buffer[x] = 63-(analogRead(A0)>>4);
u8g.firstPage(); //清屏
do //顯示
{
for(x = 0;x < 127;x++)
u8g.drawLine(x,Buffer[x],x,Buffer[x+1]); //畫相鄰兩點連線
u8g.drawLine(64,0,64,63); // 畫坐標軸
u8g.drawLine(0,32,128,32);
for(x=0;x<128;x+=8) //畫坐標軸刻度
u8g.drawLine(x,31,x,33);
for(x=0;x<64;x+=8)
u8g.drawLine(63,x,65,x);
u8g.drawFrame(0,0,128,64); //畫邊框
}
while( u8g.nextPage( ));
}