单片机生成随机数的方法总结
去年冬天在帮学校附近一家密室逃脱店做一些电子机关,其中一个打地鼠项目需要用到单片机产生随机数,用于实现随机让几个地鼠“钻”出来。一开始想法很单纯,不就是随机函数么,之前C语言课上就学过啦。可是真正用这个方法做了之后却发现并没有想象之中那么简单,程序像是写死的,复位后每次的顺序都是固定的,并没有随机的效果,于是我仔细研究了一下,总结了单片机生成随机数的几种常见方法。
首先,要明确一点:一个独立的单片机系统,如果不引入一个随机信号,永远不能实现随机的效果。这里的随机信号可以是用户的交互、时间、采集的外部数据等等,我们常用伪随机数列+随机数种子的方式实现随机的效果,而这些随机信号就是用来做随机数种子。
我使用的生成伪随机数代码如下:
……
#include<stdlib.h>
……
#define MAX 16 //随机数最大值
#define MIN 1 //随机数最小值unsigned int random(unsigned int xxx)
{unsigned int value,iii;for(iii=0;iii<xxx;iii++){value = rand() % (MAX + 1- MIN) + MIN; //获取一个随机数(1-16)}return value;
}
或者利用srand()函数,将上述函数改写成
unsigned int random(unsigned int xxx)
{
unsigned int value;srand(xxx);value = rand() % (MAX + 1 - MIN)+ MIN; //获取一个随机数(1-16)return value;
}
说明:
srand()函数位于<stdlib.h>表头文件中,用来设置rand()产生随机数时的随机数种子。
定义函数 void srand (unsigned int seed);
参数seed必须是个整数,如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
在上述程序中将用户按下按键时定时器中的ms时间值后两位作为函数的输入参数,这样就能获得一个随机值。
单片机生成随机数的几种常用随机信号如下:
1. 用一路AD采集温度或电源噪声,取后几位作为随机信号;
2. 将用户的交互信号时间作为随机信号;
3. 利用时钟芯片或RTC获取当前时间再经处理作为随机信号;
4. 自己搭一个硬件电路用来产生随机信号,如利用单片机的内置时钟设为1M,外接一个用温度敏感电阻搭建一个特征频率10M的RC振荡电路,用慢时钟去采集快时钟,然后经过简单处理,就可以得到一个真正的随机数了。
转载于:https://www.cnblogs.com/yucen/p/9343587.html
单片机生成随机数的方法总结相关推荐
- python生成规定随机数_python生成随机数的方法
python生成随机数的方法 发布时间:2020-08-21 14:50:04 来源:亿速云 阅读:110 作者:小新 这篇文章主要介绍了python生成随机数的方法,具有一定借鉴价值,需要的朋友可以 ...
- python生成50个随机数_Python内置random模块生成随机数的方法
本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的ran ...
- 利用计算机可产生随机数,一种利用计算机生成随机数的方法
一种利用计算机生成随机数的方法 (2012-07-16 23:22:33) 标签: 随机数 函数 数值 计数器 程序运行 杂谈 这里介绍一种利用计算机生成随机数的方法,微机都有系统计数器记录自运行开始 ...
- python产生随机数random.random_Python内置random模块生成随机数的方法
本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的ran ...
- python中的random模块_Python内置random模块生成随机数的方法
本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的ran ...
- php生成随机数random,PHP生成随机数的方法实例分析
通常情况下,当我们要生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生成php随机数,从字符池中随机选取字符,最后拼凑出需要的长度. function ra ...
- mysql默认值是随机数_mysql生成指定位数的随机数及批量生成随机数的方法
1. 先介绍几个常用的 mysql 函数 rand() 随机生成 0~1 之间的小数(0<1) ceiling 向上取整 floor 向下取整 2. 生成随机数 -- 生成 3 ...
- java生成随机数的方法_Java获取随机数的3种方法
随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串.数字.或者随即生成一个不定长度的数字.或者进行一个模拟的随机选择等等.Java提供了最基本的工具,可以帮助开发者来实现这一切. 一.Jav ...
- [Rust笔记]Rust生成随机数的方法
1.前言 在项目当中,生成随机数.随机密码等经常会使用到.这里总结下Rust随机数生成的方法.Rust我们要用到包模块 rand.具体实现如下: 2.添加模块依赖 [dependencies] ran ...
最新文章
- centos使用yum安装gcc
- linux裁剪—定制自己所需要的linux
- 初学者如何选出最适合自己深度学习框架?
- Scala类构造方法的参数可以作为属性来使用
- 杭电1018 Big Number
- 从零开始编写深度学习库(五)ConvolutionLayer CPU编写
- python opencv人脸解锁_教你使用python+Opencv完成人脸解锁
- matlab练习程序(图像放大/缩小,双线性插值)
- 《图像处理、分析与机器视觉 第四版》 摄像机 相机概述——学习笔记
- 五类千万不要吃的动物部位
- bandgap中简并点理解与仿真
- ubuntu20.04 root用户 登录桌面 / kubuntu20.04 root用户 登录桌面
- java引入外部字体_Java中如何自定义字体文件(引用外部字体)?-字体文件
- 深度技术ghost win8 32位/64位装机旗舰版V2014
- glibc 知:系统调用
- 《黄花黄》曈曈诗作品摘录
- element日历组件只显示月和日,把年份隐藏掉
- 使用awk截取IP地址前三段的办法
- 《国际联网安全保护管理办法》
- U2-net网络详解
热门文章
- java_ant详解
- CFile类打开文件的有趣现象
- readv和writev函数
- C#设计模式之享元模式(Flyweight)
- vue 保留两位小数 不能直接用toFixed(2) ?
- 工作经验(体感开发篇)
- Android Gradle 配置Java src目录、Res 目录
- React Native Windows 环境搭建(适合有Android 开发基础的同学)
- android stadio open recent 在同一窗口打开
- RandomAecessFile open failed: EISDIR (Is a directory)