c51隨機數不重複 微控制器C語言如何產生隨機數?

2021-10-14 09:54:03 字數 956 閱讀 2711

隨機數在微控制器的應用中也是很多的,當然產生隨機數的方法有很多,當中有乙個就是利用微控制器定時器,取出未知的定時器thx和tlx的值,再加以運算得到乙個規定範圍內的隨機數值,

這種做法也是可行的;

或者預先寫好乙個隨機數表,然後從表中取資料

也是可以的。

keil裡面產生隨機數的函式確實是rand(),但標頭檔案是stdlib.h,不是time.h。

c語言提供了一些庫函式來實現隨機數的產生。

c語言中有三個通用的隨機數發生器,分別為rand函式、random函式、randomize函式,但是rand函式產生的並不是真正意正義上的隨機數,而是乙個偽隨機數,是根據乙個稱之為種子的數為基準以某個遞推公式推算出來的一係數。當這系列數很大的時候,就符合正態分佈,從而相當於產生了隨機數。

但這不是真正的隨機數。當計算機正常開機後,這個種子的值就定下來了,除非系統遭到破壞。為了改變這個種子的值,c提供了srand()函式,它的原形是void srand( int a)。

在呼叫rand函式產生隨機數前,必須先利用srand()設好隨機數種子;如果未設隨機數種子,rand()在呼叫時會自動設隨機數種子為1。

一般用for語句來設定種子的個數。微控制器產生隨機數的兩種方法方法

一、定時器直接隨機取值每按一次按鍵生成乙個隨機數,這個隨機數實際是把定時器的值給取出來了,並不能算絕對的隨機。方法二才是真正意義上的隨機。方法

二、用定時器加rand()隨機函式來實現微控制器上電之後通過按鍵去啟動取隨機數。若是微控制器上電就立即取隨機數的話,那每次上電時隨機的結果都是一樣的。

然後,為了取到0到9不重複的隨機數,程式中用了迴圈來判斷是否和前面取的隨機數相同,相同則進入下次取隨機數,不同則存入陣列。

c51隨機數不重複 怎麼讓51微控制器產生隨機數?

剛寫的程式,我的思想是用定時器加rand 隨機函式來實現的,微控制器上電之後通過按鍵去啟動取隨機數,若是微控制器上電就立即取隨機數的話,那每次上電隨機的結果都是一樣的。然後是0到9不重複的隨機數,程式中用了迴圈來判斷是否和前面取的隨機數相同,相同則進入下次取隨機數,不同則存入陣列。程式如下 incl...

c51隨機數不重複 scala生成隨機數注意

又是乙個採坑之旅。scala的運算元分為兩類,transformer運算元和action運算元。由於scala是惰性的,在transformer運算元執行時,只是記錄這個操作,而並沒有真正的執行,只有遇到action運算元,才會將之前的所有操作真正執行。因此,當在transformer之後,多次進行...

51微控制器與C51

微控制器又稱單片微控制器,是在一塊晶元中整合了cpu 處理器 ram 資料儲存器 rom 程式儲存器 定時器 計數器和多種功能的i o 輸入 輸出 介面等一台計算機所需要的基本功能部件,從而可以完成複雜的運算 邏輯控制 通訊等功能。51微控制器是對所有相容intel 8031指令系統的微控制器的統稱...