U8g2库的波形生成非常简单,但网上对这方面的代码很少,浅浅写写。
思路,利用一个函数,对点进行判断,若正弦波上有这个点,就输出。
没有,就啥都不干。(十分清晰)
源码:
在Begin 0下写
void function_1(void)
{
unsigned char i; //列坐标
unsigned char j; //行坐标
unsigned int y;
unsigned char a[64][128]={0};
unsigned char column=0;//表示初始相位
for(i=0;i<128;i++)
{
// y=(i+column)*(i+column)/100;
y=(int)((sin((i+column)/3.14/5))*10+20);
for(j=0;j<64;j++)
{
// else
// if(y>63)
// {
// a[j+column][i]=0x00;
// }
if(30<y||y<0) continue;
if(j==y){
u8g2_DrawPixel(&u8g2,i,j);
}
// else
// {
// a[j+column][i]=0x00;
// }
}
}
}
然后在主函数中的while 里调用就行了。
烧录。。。
喜!!
有趣的一点是,加入外面将代表初相的column,在外面套一个大循环,每次循环加1,
就会得到一个螺旋纹
好看。。。()但是笔者一开始在这里干懵逼了,De了好久才找到原因
用这种方法还可以画很多图像,比如二次函数啥的。
网上标准库的方法运用了偏移,太复杂了,笔者就摈弃了。
如果你把column提到定义函数之外,主函数里循环加1,就能得到一个会动的正弦波QAQ
代码:
do
{
function_1();
HAL_Delay(100);
u8g2_SendBuffer(&u8g2);
column+=10;
if(column==128) column=0;
//u8g2_SetFont(&u8g2, u8g2_font_ncenB14_tr);
//u8g2_DrawStr(&u8g2, 0, 15, "Hello World!"); //
//u8g2_DrawCircle(&u8g2, 64, 40, 10, U8G2_DRAW_ALL);
//u8g2_DrawXBMP(&u8g2,0,0,128,64,Img);
}
while (u8g2_NextPage(&u8g2));
然后就是编译。。。
帅不帅
本次均为原创,侵权必。。。算了就侵权吧
累了,睡了(高数作业还没写完呜呜呜)
PS:后来改进发现j可以不用判断直接输出y,直接少了一层循环,谢谢学长提示!
2023.12.22
科协