方法一:定时器直接随机取值 每按一次按键生成一个随机数,这个随机数实际是把定时器的值给取出来了,并不能算绝对的随机、方法二才是真正意义上的随机。 仿真如下: #include sbit k1=P1^0; void delay(unsigned int i) { unsigned int j,k; for(j=0;j #include //包含 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