51单片机产生随机数c程序

最好用定时器 或者定时器跟随机函数结合用的 用c语言编写 急!!!产生0~9十个不重复的数 产生之后放在一个数组里面!!!!!

刚写的程序,我的思想是用定时器加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;
}
温馨提示:答案为网友推荐,仅供参考
相似回答