标题: 为何单片机C语言产生的随机数总是固定数? [打印本页]

作者: 33943417    时间: 2020-10-25 08:08
标题: 为何单片机C语言产生的随机数总是固定数?
#include<reg51.h>
#include<stdlib.h>
sbit c=P2^0;
void main()
{
unsigned char a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
P0=a[rand()%10];
c=0;
while (1)
        ;
}
以上是源程序,P0连接共阳数码管,P2.0控制数码管阳极,随机数函数产生一个随机数给P0,应该是每次数都不一样,现在是每次运行都产生7,无论重启还是开机。



作者: tyrl800    时间: 2020-10-25 09:34
还要播种呀
作者: KongQuan    时间: 2020-10-25 11:25
因为用的是伪随机数,随机数种子,每次开机都一样。要想办法每次开机能产生不同的随机种子。
srand(int )是设置随机数种子的。
作者: 33943417    时间: 2020-10-25 11:54
KongQuan 发表于 2020-10-25 11:25
因为用的是伪随机数,随机数种子,每次开机都一样。要想办法每次开机能产生不同的随机种子。
srand(int ) ...


作者: hejianmin    时间: 2020-10-25 12:00
加一个时钟
作者: 747414642    时间: 2020-10-25 13:47


作者: wulin    时间: 2020-10-25 16:33
楼主这样写程序根本看不出来数字变化,换一种方式写便于观察。


  1. #include<reg51.h>
  2. #include<stdlib.h>
  3. unsigned char a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  4. unsigned int i;

  5. void main()
  6. {
  7.         while(1)
  8.         {
  9.                 P0=a[rand()%10];
  10.                 i=30000;
  11.                 while(i--);
  12.         }
  13. }
复制代码




作者: TTQ001    时间: 2020-10-26 05:04
这是一个很好的问题,我也从你们那里学到了。
作者: 两仪式    时间: 2020-10-26 07:25
我们程序产生的随机都是伪随机的,也就是需要一个东西来改变它,一般叫做随机数种子,高级语言一般使用系统时间作为随机数种子
作者: jjwangxu2008    时间: 2020-10-26 08:19
伪随机
作者: robinsonlin    时间: 2020-10-26 17:30
这么好的帖子,标记一下。 51黑有你更精彩!
作者: 18292584595    时间: 2020-10-27 10:52
伪随机数每次开机都一样,要使其产生不一样的种子,要用程序改变他
作者: CZ1    时间: 2020-10-27 13:20
rand是伪随机数,你需要加入外部中断才能做到真正的随机数
作者: 我也挺让人    时间: 2020-10-27 16:50
要放随机数种子srand((unsigned) time(NULL) );的,放了就是根据时间的随机

作者: 单片机研究协会    时间: 2020-10-27 21:21
我也挺让人 发表于 2020-10-27 16:50
要放随机数种子srand((unsigned) time(NULL) );的,放了就是根据时间的随机

时间是固定的,不是随机,用AD测空气,这样才是随机




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