去年冬天在帮学校附近一家密室逃脱店做一些电子机关,其中一个打地鼠项目需要用到单片机产生随机数,用于实现随机让几个地鼠“钻”出来。一开始想法很单纯,不就是随机函数么,之前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

单片机生成随机数的方法总结相关推荐

  1. python生成规定随机数_python生成随机数的方法

    python生成随机数的方法 发布时间:2020-08-21 14:50:04 来源:亿速云 阅读:110 作者:小新 这篇文章主要介绍了python生成随机数的方法,具有一定借鉴价值,需要的朋友可以 ...

  2. python生成50个随机数_Python内置random模块生成随机数的方法

    本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的ran ...

  3. 利用计算机可产生随机数,一种利用计算机生成随机数的方法

    一种利用计算机生成随机数的方法 (2012-07-16 23:22:33) 标签: 随机数 函数 数值 计数器 程序运行 杂谈 这里介绍一种利用计算机生成随机数的方法,微机都有系统计数器记录自运行开始 ...

  4. python产生随机数random.random_Python内置random模块生成随机数的方法

    本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的ran ...

  5. python中的random模块_Python内置random模块生成随机数的方法

    本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的ran ...

  6. php生成随机数random,PHP生成随机数的方法实例分析

    通常情况下,当我们要生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生成php随机数,从字符池中随机选取字符,最后拼凑出需要的长度. function ra ...

  7. mysql默认值是随机数_mysql生成指定位数的随机数及批量生成随机数的方法

    1. 先介绍几个常用的 mysql 函数 rand()    随机生成 0~1 之间的小数(0<1) ceiling    向上取整 floor    向下取整 2. 生成随机数 -- 生成 3 ...

  8. java生成随机数的方法_Java获取随机数的3种方法

    随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串.数字.或者随即生成一个不定长度的数字.或者进行一个模拟的随机选择等等.Java提供了最基本的工具,可以帮助开发者来实现这一切. 一.Jav ...

  9. [Rust笔记]Rust生成随机数的方法

    1.前言 在项目当中,生成随机数.随机密码等经常会使用到.这里总结下Rust随机数生成的方法.Rust我们要用到包模块 rand.具体实现如下: 2.添加模块依赖 [dependencies] ran ...

最新文章

  1. centos使用yum安装gcc
  2. linux裁剪—定制自己所需要的linux
  3. 初学者如何选出最适合自己深度学习框架?
  4. Scala类构造方法的参数可以作为属性来使用
  5. 杭电1018 Big Number
  6. 从零开始编写深度学习库(五)ConvolutionLayer CPU编写
  7. python opencv人脸解锁_教你使用python+Opencv完成人脸解锁
  8. matlab练习程序(图像放大/缩小,双线性插值)
  9. 《图像处理、分析与机器视觉 第四版》 摄像机 相机概述——学习笔记
  10. 五类千万不要吃的动物部位
  11. bandgap中简并点理解与仿真
  12. ubuntu20.04 root用户 登录桌面 / kubuntu20.04 root用户 登录桌面
  13. java引入外部字体_Java中如何自定义字体文件(引用外部字体)?-字体文件
  14. 深度技术ghost win8 32位/64位装机旗舰版V2014
  15. glibc 知:系统调用
  16. 《黄花黄》曈曈诗作品摘录
  17. element日历组件只显示月和日,把年份隐藏掉
  18. 使用awk截取IP地址前三段的办法
  19. 《国际联网安全保护管理办法》
  20. U2-net网络详解

热门文章

  1. java_ant详解
  2. CFile类打开文件的有趣现象
  3. readv和writev函数
  4. C#设计模式之享元模式(Flyweight)
  5. vue 保留两位小数 不能直接用toFixed(2) ?
  6. 工作经验(体感开发篇)
  7. Android Gradle 配置Java src目录、Res 目录
  8. React Native Windows 环境搭建(适合有Android 开发基础的同学)
  9. android stadio open recent 在同一窗口打开
  10. RandomAecessFile open failed: EISDIR (Is a directory)