|
pcbboy 發(fā)表于 2019-11-17 08:09
產(chǎn)生隨機(jī)數(shù):
rand()是一個(gè)可以生成隨機(jī)數(shù)的函數(shù)隨機(jī)數(shù),函數(shù)返回的隨機(jī)數(shù)在0-RAND_MAX(32767)之間;
rand ...
是不是下面rand()隨機(jī)函數(shù),如果用單片機(jī)控制12864隨機(jī)顯示圖片或控制語音模塊隨機(jī)播報(bào)聲音,用rand()隨機(jī)函數(shù)像下面一定要用定時(shí)器嗎
#include<reg52.h>
#include<stdlib.h> //包含 rand()隨機(jī)函數(shù)的頭文件
unsigned char t,k,i,j,a,f,n[10];
//t 是計(jì)時(shí)變量,k 是按鍵標(biāo)志,i 是數(shù)組下標(biāo),f 是隨機(jī)數(shù)重復(fù)標(biāo)志,n[10]
是存放隨機(jī)數(shù)的數(shù)組
void init() //初始化函數(shù)
{
t = 0;
i = 0;
f = 0;
k = 0;
TMOD = 0x02; //設(shè)置定時(shí)器 0 為工作方式 2
TH0 = 7; //裝初值
TL0 = 7;
EA = 1; //開總中斷
ET0 = 1; //開定時(shí)器 0 中斷
TR0 = 1; //啟動(dòng)定時(shí) 0
EX0 = 1; //開外部中斷 0,同按鍵的效果一樣
IT0 = 1; //下降沿觸發(fā)
}
void main()
{
init();
while(1)
{
while(k) //外部中斷 0 觸發(fā)循環(huán)
{
if(!i) //i=0時(shí)取第一個(gè)隨機(jī)數(shù)放入數(shù)組
n[0]
{
srand(t); //隨機(jī)數(shù)初始化
a = (char)(rand() % 10); //取隨機(jī)數(shù)(0~9)
n[0] = a; //存入數(shù)組
i++; //數(shù)組下標(biāo)加 1
}
else
while(i < 10) //存放剩下的 9 個(gè)隨機(jī)數(shù)
{
srand(t); //隨機(jī)數(shù)初始化
a = (char)(rand() % 10); //取隨機(jī)數(shù)
for(j = 0; j < i; j++) //與前面的隨機(jī)數(shù)比較
{
if(n[j] == a) //與前面的隨機(jī)數(shù)相同
f = 1; //標(biāo)志置 1
}
if(f) //有重復(fù)執(zhí)行
{
f = 0; //標(biāo)志清 0
continue; //結(jié)束本次循環(huán)
}
n = a; //不同則存入數(shù)組中
i++; //數(shù)組下標(biāo)加 1
}
}
}
}
void inter0() interrupt 0 //外部中斷 0
{
k = 1; //按鍵標(biāo)志置 1,主函數(shù)執(zhí)行取隨機(jī)數(shù)
}
void time0() interrupt 1 //定時(shí)器 0 中斷
{
t++; //時(shí)間加 1
if(t == 100)
{
t = 0;
}
}
|
|