一、随机数生成
1、加入头文件:#include "stdlib.h"
2、定义一个用作生成随机数种子的变量并加入到滴答定时器中不断自增:uint32_t run_times = 0;
3、设置种子:srand(run_times);//每次生成随机数前调用一次为佳
4、生成一个随机数:uint16_t date = rand()%(b-a+1)+a;//生成a~b区间的随机数
注:如果要在同一时间频繁生成随机数,最好错开1ms的时间
二、波形显示(采用正点原子4.3寸屏,480*800)
1、设置储存波形数据的数组指针(我这里采用动态分配内存):uint16_t *wave_date = 0;
2、给储存波形数据的数组指针分配内存:wave_date = (uint16_t *)mymalloc(SRAMEX, 720*sizeof(uint16_t));//屏幕宽800px,但只有前720px用来显示波形
3、给波形数组赋值:
for(x=0;x<720;x++)
{srand(run_times);wave_date[x] = 40+ rand()%(400-0+0)+0; //产生 0~400之间随机数,前面+40是为了让波形整体下移HAL_Delay(1);
}
4、波形显示
while(1){/*显示网格线*/for(x=0;x<760;x+=40)//竖线{lcd_draw_line(x,40,x,440,GRAY);} for(y=40;y<480;y+=40)//横线{lcd_draw_line(0,y,720,y,GRAY);} for(x=0;x<720;x++)//竖线{if(x==0){lcd_draw_point(0,wave_date[0],RED);}else{lcd_draw_line(x-1, wave_date[x-1], x, wave_date[x], RED);}}for(x=0;x<(720-1);x++) wave_date[x] = wave_date[x+1];//保留前719个点的值srand(run_times);wave_date[719] = 40+ rand()%(400-0+0)+0; //随机生成第720个点的值HAL_Delay(100);lcd_fill(0,40,720,440,g_back_color); //清空波形显示区域}
效果如下图:
问题:频繁刷新导致看起来一直在闪