欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > STM32使用rand()生成随机数并显示波形

STM32使用rand()生成随机数并显示波形

2025/9/23 12:36:49 来源:https://blog.csdn.net/qq_44712722/article/details/147337814  浏览:    关键词:STM32使用rand()生成随机数并显示波形

一、随机数生成

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);	//清空波形显示区域}

效果如下图:

问题:频繁刷新导致看起来一直在闪

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词