keil中如何产生随机数?

看了很多帖子,说用srand产生种子,然后rand()产生随机数
但是种子必须每次不一样的
C语言中time.h可以产生种子:srand((unsigned int)time(NULL))

可是keil中没有time.h 即使我把C库函数中的time.h复制到keil相应文件夹下也不管用

请教高手如何产生随机数呢?
谢谢你,我好像是做出来了

用定时计数器0产生中断,记录中断次数作为种子,i=rand();delay(i);

每次延时都是不一样的,你看这样对吗?

这个函数在我一个项目里用过,测试通过,就直接传授给你吧:
首先头文件写上:#include "stdlib.h"
然后在后边就可调用rand()这个函数了.

给你再具体说下吧,这里边还有些细节问题.
实际上,随机函数有两个,srand和rand.要实现你说的功能得配合使用.
函数一:int rand(void);
从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。

函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。

rand()在每次被调用的时候,它会查看:
1)如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用
srand(seed)一次来初始化它的起始值。
2)如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。

总结一下,也就是说:
1)如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。
2)否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed, RAND_MAX(0x7fff))之间的一个随机取得

所以,对于你来说,要想让每次的随机值不同,必需先调用srand函数,即:srand(i),而且要保证每次的i不同,这样才能使得种子不同,每次调用rand后才后有不同的返回值.
一般来说,要使这个i不同,如果你的系统带时钟功能的话,可以把当前时间赋给i,这样每次的i就不同,如果单片机带AD的话也可以把AD引脚悬浮,读取一下AD转换值,因为最末位的数据很不稳定,也可以作为随机数的种子

另外你所说的time.h是不行的,因为这个头文件是针对PC来说,可以读取系统时间,对于单片机一般没有时钟芯片,也无法读取时间.
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-30
我是大一新生,我现在在做项目,遇到同样的问题,但是还是不太明白楼上说的解答,能不能吧代码拿来看看呢?
第2个回答  2012-05-14
能不能把你产生随机数的那部分程序给我看看啊,万分感谢!

keil中如何产生随机数?
1)如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。2)否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed, RAND_MAX(0x7fff))之...

如何用KEIL C实现随机数字的产生
3楼巨好的方法,支持。但好像不使用KEILC产生的!不过KEILC中也有随机函数rand();\/*TEST.c*\/ include<stdlib.h> voidmain(void){ chari,j,k;i=0x5f;j=rand();k=0xf5;} 反编译结果,随机数放在R7中 ;=== Q0003:MOVR4,08H;0003AC08 MOVR5,09H;0005AD09 MOVR6,0AH;0007AE0A MOVR7...

keil 随机数函数
a=rand()*x+y;就能产生[y,x+y)之间的数字 用randomize做序列初始化,然后调用rand函数。

keil 生成随机数的问题,帮忙看一下问题在哪
if((c > 9) && (c < 10)) --就是不成立 不如用 P1 = c; ,直接看一看随机数是多少。

怎么用C语言在keil里产生随机数?51单片机
靠51单片机内部设备是找不到种子的,还得靠外围设备,例如:将外界的亮度、声音频率通过传感器传入单片机作为种子。那种能产生随机数的单片机内部都有个随机数发生器的。

51单片机用random()函数随机产生0和1,LED亮灭表示0和1?
如果没有外界因素介入,51 单片机是不会出现随机数的。C 语言的随机数函数,一般是从定时器取值。但是,单片机的程序是固定的,执行到 random() 时的时刻,也是固定的。如果没有外界因素介入,产生的随机数,也就是确定的值。

keil4 同样的源程序, 每次编译生成的hex文件crc校验码都不一样,为什么...
会自动插入一些随机数,进行冗余计算,这个是为了保密的需要,试想,如果一个编译器不进行保密的冗余计算,那么,稍微有点知识的人,就可以很容易的从HEX文件反推回汇编语言,这样的编译器,哪个厂家敢用?自己辛苦写的软件,很容易的就被人盗版了。所以,这个是没有办法的事情。

在keil上编程和在C++上编程有什么区别。
因为c++你用的vc的IDE,常用的IDE系统给你弄好了,但是如果直接在keil上,那么你就需要看看到底它的系统给你提供了什么头文件,这个一般说明文档什么的都有,所以,先看文档,然后再考虑别的问题。如果他提供了的话,也不一定头文件的名字一样。要知道,vc只是微软公司自己开发的工具,别的公司就不一定...

C51语言中为什么需要包含头文件
功能: rand返回一个0到32767之间的伪随机数,srand用来将随机数发生器初始化成一个已知的(期望)值。 Keil uVision3中的math.h库中,不包含此函数。 extern float sin (float val);extern float cos (float val);extern float tan (float val); 功能: 返回val的正弦,余弦,正切值。val为弧度 fabs(var) <=...

...模仿一个抽奖系统。关键不会产生随机数,请大家帮帮忙。
include <stdlib.h> include <stdio.h> include void main( void ){ int i;\/* Seed the random-number generator with current time so that the numbers will be different every time we run.\/ srand( (unsigned)time( NULL ) );\/* Display 10 numbers. *\/ for( i = 0; i < 1...

相似回答