剛寫的程式,我的思想是用定時器加rand()隨機函式來實現的,微控制器上電之後通過按鍵去啟動取隨機數,若是微控制器上電就立即取隨機數的話,那每次上電隨機的結果都是一樣的。然後是0到9不重複的隨機數,程式中用了迴圈來判斷是否和前面取的隨機數相同,相同則進入下次取隨機數,不同則存入陣列。
程式如下:
#include
#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
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;
c51隨機數不重複 scala生成隨機數注意
又是乙個採坑之旅。scala的運算元分為兩類,transformer運算元和action運算元。由於scala是惰性的,在transformer運算元執行時,只是記錄這個操作,而並沒有真正的執行,只有遇到action運算元,才會將之前的所有操作真正執行。因此,當在transformer之後,多次進行...
c51隨機數不重複 微控制器C語言如何產生隨機數?
隨機數在微控制器的應用中也是很多的,當然產生隨機數的方法有很多,當中有乙個就是利用微控制器定時器,取出未知的定時器thx和tlx的值,再加以運算得到乙個規定範圍內的隨機數值,這種做法也是可行的 或者預先寫好乙個隨機數表,然後從表中取資料 也是可以的。keil裡面產生隨機數的函式確實是rand 但標頭...
C 生成不重複的隨機數
在做洗牌演算法的時候用到了隨機數,並且產生的隨機數中不能有重複的元素,因為是用c語言實現的,就把值賦給陣列,然後用隨機數產生陣列的下標,每產生乙個就刪除對應的元素,然後隨機數的生成範圍減一,但是這樣做每次都要迴圈去移動陣列元素,從時間複雜度上來說這樣並不好。於是,後來用c 重新實現 實現的思路並沒有...