怡春院2017,日韩av网页,717韩国三级理伦电影,欧美久草网,亚洲欧美日韩综合,一级特黄色片子

您現在的位置: 主頁 > 技術分享 > 硬件知識 > MCU & ARM

單片機生成隨機數的方法總結

bug現象:程序像是寫死的,復位后每次的順序都是固定的,并沒有隨機的效果,下面總結了單片機生成隨機數的幾種常見方法。
 
     首先,要明確一點:一個獨立的單片機系統,如果不引入一個隨機信號,永遠不能實現隨機的效果。這里的隨機信號可以是用戶的交互、時間、采集的外部數據等等,我們常用偽隨機數列+隨機數種子的方式實現隨機的效果,而這些隨機信號就是用來做隨機數種子。
 
     我使用的生成偽隨機數代碼如下:
 
……
#include<stdlib.h>
……
#define MAX              16             //隨機數**值
#define MIN              1              //隨機數***小值
unsigned int random(unsigned int xxx)
{
  unsigned int value,iii;
  for(iii=0;iii<xxx;iii++)
  {
    value = rand() % (MAX + 1- MIN) + MIN;               //獲取一個隨機數(1-16)
  }
  return value;
}
或者利用srand()函數,將上述函數改寫成
 
unsigned int random(unsigned int xxx)
{
unsigned int value;
  srand(xxx);
  value = rand() % (MAX + 1 - MIN)+ MIN;               //獲取一個隨機數(1-16)
  return value;
}
說明:
srand()函數位于<stdlib.h>表頭文件中,用來設置rand()產生隨機數時的隨機數種子。
定義函數 void srand (unsigned int seed);
參數seed必須是個整數,如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。
在上述程序中將用戶按下按鍵時定時器中的ms時間值后兩位作為函數的輸入參數,這樣就能獲得一個隨機值。
 
 
 
單片機生成隨機數的幾種常用隨機信號如下:
 
1. 用一路AD采集溫度或電源噪聲,取后幾位作為隨機信號;
 
2. 將用戶的交互信號時間作為隨機信號;
 
3. 利用時鐘芯片或RTC獲取當前時間再經處理作為隨機信號;
 
4. 自己搭一個硬件電路用來產生隨機信號,如利用單片機的內置時鐘設為1M,外接一個用溫度敏感電阻搭建一個特征頻率10M的RC振蕩電路,用慢時鐘去采集快時鐘,然后經過簡單處理,就可以得到一個真正的隨機數了。

版權*轉載申明:
本站內容為本站編輯或整理,所以轉載務必通知本站并以超鏈接形式注明內容來自本站,以免帶來不必要麻煩。文章出處:http://www.360doc.com/content/18/0815/15/6973384_778474888.shtml
 

?