单片机随机数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

首先头文件写上:#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来说,可以读取系统时间,对于单片机一般没有时钟芯片,也无法读取时间.
程序:
简易程序,部分引脚及函数定义网友自己添加。

#include<reg52.h>
#include<stdlib.h>
uint tt;
void init_time0()
{
tt=0;
TMOD=0x02; //设置定时器0为工作方式2
TH0=6;
TL0=7;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0 }
void time0() interrupt 1
{
tt++;
}
main()
{
uint u;
init_time0();
if(tt==100)tt=0;
srand(tt);
u=(rand()%100); //随机数获得}。

相关文档
最新文档