是不是下面rand()随机函数,如果用单片机控制12864随机显示图片或控制语音模块随机播报声音,用rand()随机函数像下面一定要用定时器吗
#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 = a; //不同则存入数组中
i++; //数组下标加 1
}
}
}
}
void inter0() interrupt 0 //外部中断 0
{
k = 1; //按键标志置 1,主函数执行取随机数
}
void time0() interrupt 1 //定时器 0 中断
{
t++; //时间加 1
if(t == 100)
{
t = 0;
}
}
|