0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机C语言如何产生随机数

GReq_mcu168 来源:玩转单片机 2019-11-26 14:25 次阅读

随机数在单片机的应用中也是很多的,当然产生随机数的方法有很多,当中有一个就是利用单片机定时器,取出未知的定时器THX和TLX的值,再加以运算得到一个规定范围内的随机数值。这做法也是可行的。或者预先写好一个随机数表,然后进行取数据。也是可以的。

KEIL里面产生随机数的函数确实是rand(),但头文件是stdlib.h,不是time.h。C语言提供了一些库函数来实现随机数的产生。

C语言中有三个通用的随机数发生器,分别为 rand函数、random函数、randomize 函数,但是rand函数产生的并不是真意正义上的随机数,是一个伪随机数,是根据一个数,称之为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数。

但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。在调用rand函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。

单片机产生随机数的两种方法

方法一

定时器直接随机取值

每按一次按键生成一个随机数,这个随机数实际是把定时器的值给取出来了,并不能算绝对的随机、方法二才是真正意义上的随机。

方法二

用定时器加rand()随机函数来实现

单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取随机数的话,那每次上电随机的结果都是一样的。然后是0 到9不重复的随机数,程序中用了循环来判断是否和前面取的随机数相同,相同则进入,下次取随机数,不同则存入数组。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620825
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128579
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61308

原文标题:教您单片机C语言如何产生随机数

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    全志R128应用开发案例——获取真随机数

    路独立的环形振荡器,由模拟器件电源噪声产生频率抖动,用低频始终重采样,然后进行弹性抽取和熵提取处理,最终输出128bit真随机数。 载入方案 我们使用的开发板是 R128-Devkit,需要开发
    发表于 11-13 16:31

    用rand形成的不是真正的随机数,怎么才能达到真正的随机?

    用rand形成的不是真正的随机数啊,,怎么才能达到真正的随机
    发表于 10-30 06:14

    单片机是如何产生随机数的?

    单片机如何产生随机数
    发表于 10-27 06:44

    AT32的随机数产生

    AT32的随机数产生为设计者使用AT32芯片时,产生符合应用需求的随机数,提供设计建议。
    发表于 10-26 06:04

    全志R128应用开发案例——获取真随机数

    路独立的环形振荡器,由模拟器件电源噪声产生频率抖动,用低频始终重采样,然后进行弹性抽取和熵提取处理,最终输出128bit真随机数。 载入方案 我们使用的开发板是 R128-Devkit,需要开发
    发表于 10-24 17:05

    STM8有随机数发生器吗?

    怎么才能用STM8产生一个随机数
    发表于 10-23 06:55

    求助,为何随机数总是固定数?

    []={0xc00xf90xa40xb00x990x920x820xf80x800x90}; P0=a[rand()%10]; c=0; while (1) ; } 以上是源程序,P0连接共阳数码管,P2.0控制数码管阳极,随机数函数
    发表于 09-28 07:38

    FPGA的伪随机数发生器学习介绍

    随机试验的结果,产生随机数有多种不同的方法。这些方法被称为随机数生成器。随机数最重要的特性是它在产生
    的头像 发表于 09-12 09:13 784次阅读

    Arm真随机数发生器(TRNG)表征应用说明

    本章概述ARM®真随机数生成器(TRNG)及其特性。 ARM®真随机数生成器(TRNG)从物理熵源收集熵,物理熵源是能够生成不可预测或随机输出比特流的组件。 所收集的熵被用来向密码随机
    发表于 08-29 07:19

    【野火 fireFlasher Mini 脱机烧录器】随机数功能测试

    ,查看一下这个地址的默认数据是字符串“1234567890”,截图如下: 下面通过上位随机数功能进行设置,测试使用2组随机数,地址使用0x8010ccc和0x8010cdc,随机数
    发表于 05-21 17:27

    i.MX8QM真随机数生成器符合什么要求?

    大家好, 我们的客户要求我们指定一个真正的随机数生成器。 i.MX8QM 真随机数生成器符合什么要求? 以下是对 SE050 中的随机数生成器的描述。除此之外,请告诉我 i.MX8 中的真正
    发表于 05-18 06:13

    【野火 fireFlasher Mini 脱机烧录器】烧录次数和写入随机数测试

    如图所示: 就先写三个字节的随机数到地址0x08003FA0吧,设置如上图所示,使用数组设置为1,编辑设置为1,表示需要写随机数组1的随机数到指定的地址。设置完成后,下载程序到单片机
    发表于 05-13 18:41

    【野火 fireFlasher Mini 脱机烧录器】随机数测试

    随机数测试 野火mini脱机烧录器支持在指定地址添加指定个数的随机数,最多支持4组,每组4096个随机数。本篇来测试一下随机数的功能。 小试牛刀 先简单测试一下,在地址0x080040
    发表于 05-12 21:42

    【野火 fireFlasher Mini 脱机烧录器】3. 随机数功能测试以及遇到的问题

    fireFlasher Mini 脱机烧录器】1. 上手实测。 在烧录固件到单片机的过程中,会比单独烧录LED.axf慢一些,我猜测是因为随机数是在烧录固件到单片机的时候才生成的,所以会比较慢一点,后边实测也验证了
    发表于 05-07 22:05

    S32K312如何获取随机数

    S32K312如何获取随机数
    发表于 05-06 07:46