当前位置: 首页 > news >正文

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

效果如下图:

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

http://www.xdnf.cn/news/14095.html

相关文章:

  • 【最后203篇系列】028 FastAPI的后台任务处理
  • JVM之经典垃圾回收器
  • C++数据结构与二叉树详解
  • Kubernetes》》k8s》》Namespace
  • ProfibusDP转ModbusRTU网关,流量计接入新方案!
  • React 中如何获取 DOM:用 useRef 操作非受控组件
  • 珈和科技:无人机技术赋能智慧农业,精准施肥与病虫害监控全面升级
  • Perf学习
  • 使用最新threejs复刻经典贪吃蛇游戏的3D版,附完整源码
  • Spring Boot配置文件优先级全解析:如何优雅覆盖默认配置?
  • 盲超分-双循环对比学习退化网络(蒸馏)
  • Cursor 生成java测试用例
  • k8s低版本1.15安装prometheus+grafana进行Spring boot数据采集
  • npx 的作用以及延伸知识(.bin目录,npm run xx 执行)
  • AI 推理框架详解,包含如COT、ReAct、LLM+P等的详细说明和分类整理,涵盖其原理、应用场景及对比分析
  • Linux 线程互斥
  • Power BI 中 EXCEPT() 函数的使用指南
  • 悟空CRM系统部署+迁移
  • Vue.directive自定义v-指令
  • 【AI部署】腾讯云GPU-常见故障—SadTalker的AI数字人视频—未来之窗超算中心 tb-lightly
  • JAVA中多线程的经典案例
  • 4.黑马学习笔记-SpringMVC(P43-P47)
  • 学习设计模式《一》——简单工厂
  • 算法驱动光场革命:SLM技术引领智能光学新时代
  • 用 NLP + Streamlit,把问卷变成能说话的反馈
  • 红宝书第五十一讲:Web Components:创造你自己的HTML标签
  • 习题2.3 数列求和-加强版
  • PHP发送邮件
  • 【刷题Day19】HTTP的各个版本(浅)
  • 记录git stash误删除恢复方法