标题: 各位好,51单片机产生5到10之间随机数方法 [打印本页]

作者: 已飞的鹰    时间: 2021-8-2 22:12
标题: 各位好,51单片机产生5到10之间随机数方法
要设计一个随机等待时间的程序,求问各位大佬51单片机产生5到10之间随机数方法,不知用c语言中的办法能否顺利实现?谢谢

作者: Hephaestus    时间: 2021-8-2 23:26
开个定时器,按下期间取定时器的值即可。
作者: bbxyliyang    时间: 2021-8-3 07:29
void timer1() interrupt 3
{
        static uchar count1=0;
        TH1=(65535-20000)/256;
        TL1=(65535-20000)%256;
        count1++;                                                      
        if(count1==20)  //1秒到达
        {
              count1=0;
              num=1+(unsigned char)(20.0*rand()/(RAND_MAX));
     }
}
作者: 王秋冬    时间: 2021-8-3 08:16
这是一个好方法
作者: sustlixin    时间: 2021-8-3 08:30
直接按照C语言中产生的随机数即可
作者: man1234567    时间: 2021-8-3 08:54
1、用 rand() 乘 5 后加 5 取整 ,结果你懂;
2、用中断计数,计数范围 5 到 10 ,抽取。
作者: 已飞的鹰    时间: 2021-8-3 10:26
这样实现的,但51单片机好像容易死机。。。
#define MAX              10             //随机数最大值
#define MIN               5              //随机数最小值
unsigned int random(unsigned int m)
{
unsigned int value;
  srand(m);
value = rand() % (MAX + 1)+ MIN;     //获取一个随机数(5-10)
  return value;
}
作者: pcf2000    时间: 2021-8-3 10:38
使用C语言的随机函数就可以了,
作者: angmall    时间: 2021-8-3 12:11
已飞的鹰 发表于 2021-8-3 10:26
这样实现的,但51单片机好像容易死机。。。
#define MAX              10             //随机数最大值
#d ...

你这个是伪随机数

计算机的伪随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就是固定的。

作者: unknown379    时间: 2021-8-3 14:37
开个ADC, 连续采样4次后取最低位,组合成一个0~15的数. ADC引脚悬空并尽量短
作者: wufa1986    时间: 2021-8-3 14:47
sustlixin 发表于 2021-8-3 08:30
直接按照C语言中产生的随机数即可

那对于单片机是假的
作者: 已飞的鹰    时间: 2021-8-7 12:15
各位请问:这个1秒计时到达后产生的随机数如何保存作为计数的初始值?谢谢
作者: lkc8210    时间: 2021-8-7 12:54
已飞的鹰 发表于 2021-8-7 12:15
各位请问:这个1秒计时到达后产生的随机数如何保存作为计数的初始值?谢谢

写入EEProm,开机时读取
作者: npn    时间: 2021-8-7 13:09
不要用那个rand函数,不知道是什么算法 以及内存占用,容易造成堆栈溢出。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1