‘壹’ 怎么让51单片机产生随机数
源代码不提供,你可以使用srand函数或是启用一个定时器,需要的随机数取自定时器的计数值或是以计数值作为种子,按照一定的算法产生随机数。
‘贰’ 51单片机如何生成随机数
计算机
只能产生伪随机数
(计算机不具有自发性)
你可以用定时器来产生伪随机数
比如事先运行定时器
然后再读定时器的值
‘叁’ 51单片机产生随机数c程序
刚写的程序,我的思想是用定时器加rand()随机函数来实现的,单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取随机数的话,那每次上电随机的结果都是一样的。然后是0到9不重复的随机数,程序中用了循环来判断是否和前面取的随机数相同,相同则进入下次取随机数,不同则存入数组。程序如下:#include<reg52.h>
#include<stdlib.h> //包含rand()随机函数的头文件
unsigned char t,k,i,j,a,f,n[10];
//t是计时变量,k是按键标志,i是数组下标,f是随机数重复标志,n[10]是存放随机数的数组
void init() //初始化函数
{
t=0;
i=0;
f=0;
k=0;
TMOD=0x02; //设置定时器0为工作方式2
TH0=7; //装初值
TL0=7;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时0
EX0=1; //开外部中断0,同按键的效果一样
IT0=1; //下降沿触发
}
void main()
{
init();
while(1)
{
while(k) //外部中断0触发循环
{
if(!i) //i=0时取第一个随机数放入数组n[0]
{
srand(t); //随机数初始化
a=(char)(rand()%10); //取随机数(0~9)
n[0]=a; //存入数组
i++; //数组下标加1
}
else
while(i<10) //存放剩下的9个随机数
{
srand(t); //随机数初始化
a=(char)(rand()%10); //取随机数
for(j=0;j<i;j++) //与前面的随机数比较
{
if(n[j]==a) //与前面的随机数相同
f=1; //标志置1
}
if(f) //有重复执行
{
f=0; //标志清0
continue; //结束本次循环
}
n[i]=a; //不同则存入数组中
i++; //数组下标加1
}
}
}
}
void inter0() interrupt 0 //外部中断0
{
k=1; //按键标志置1,主函数执行取随机数
}
void time0() interrupt 1 //定时器0中断
{
t++; //时间加1
if(t==100) t=0;
}
‘肆’ 单片机 51 随机数输出0到100
把 num=rand();
num=num-32667;
这两句改成
num=rand()%101;
不过单片机内如果没有时钟做srand种子的话,虽然是随机,
但是单片机重启后出现的随机数和上次重启出现的随机数是一样的,不是真正意义上的随机数
‘伍’ 求高手赐教:51单片机怎么产生随机数
启动定时器,需要随机数时从定时器里读一个值出来当作随机数。
或者调用random()函数,不过得到的是伪随机数。
‘陆’ 求51单片机汇编语言取随机数子程序
其实不必要写成子程序,看你需要多少位的随机数,要是8位的,就在主循环程序中放一条
INC NUMBER 指令,NUMBER是定义的某个内部RAM单元,如:NUMBER EQU 30H,需要随机数时,从NUMBER中读取就行了,随机读取的,这个数也是随机的了。要是需要16位的,就用两个内部RAM单元来随机计数,一个做低8位,一个做8位就行了。在主循环程序中放如下指令:
MOV A , NUMBERL
INC A
MOV NUBBERL, A ;保存低8位
JNZ TONEXT
INC NUMBERH ;高8位加1
TONEXT: 其它指令
同样,用随机数时就从这两个单元中读取就行了。
‘柒’ [请教高手]单片机怎么实现产生随机数
对于51单片机里有两个定时器/计数器,可以利用其中的一个来产生随机数。但要设置成方式2,自己计数状态。这样,只有8位数。但不要开中断,只要计数就行。需要时就读一次定时器的低8位就行了。
汇编程序,用定时器T1
MOV
TMOD,#20H
MOV
TH1,#0
MOV
TL1,#0
SETB
TR1
需要的时候,读TL1,是8位数
MOV
A,
TL1
如果需要16位数,可以对读出的8位数进行加或乘计算
‘捌’ 51单片机用C语言产生一个100以内的随机数 怎么生成
C语言本身并不能产生随机数。
介绍一个比较简单的随机数获取方法:启动单片机的定时器,让它自己跑不要发生溢出中断,用户操作时直接读计数器数值,那基本上就是个随机数。
‘玖’ 51单片机串口发送随机数
不是串口的错.
是你的代码写错误了.
改成
printf("I = %d,RAND = %u\n",(int)i,num);
%d是需要 16位的有符合的参数的.
%u才是需要16位无符号参数的.