久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9077|回復: 9
打印 上一主題 下一主題
收起左側

想用keil產生一個隨機數 小白求教

  [復制鏈接]
跳轉到指定樓層
樓主
新人一位  想用kile產生一個隨機數  但是百度上的解釋看不懂 求大神詳解
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:123289 發表于 2017-6-18 23:27 | 只看該作者
本帖最后由 yzwzfyz 于 2017-6-20 02:22 編輯

你能想像一下,如何才能隨機呢?
如果“kile能產生一個隨機數”,它又如何給到單片機中去呢?
回復

使用道具 舉報

板凳
ID:210834 發表于 2017-6-19 21:46 | 只看該作者
yzwzfyz 發表于 2017-6-18 23:27
你能想像一下,如何才能隨機呢?
如果“kile能產生一個隨機數”,它如何時給到單片機中去呢?

我只是想利用kile產生一個隨機數  然后通過隨機數的奇偶性 作為判定條件 。 但是rand函數產生的隨機數是固定的 并不能每次都產生不同的隨機數
回復

使用道具 舉報

地板
ID:123289 發表于 2017-6-20 02:25 | 只看該作者
1、你對單片機是如何工作的不熟悉;
2、你對隨機數是如何隨機未認真考慮過;
所以才會提出這個問題
回復

使用道具 舉報

5#
ID:210834 發表于 2017-6-20 08:49 | 只看該作者
yzwzfyz 發表于 2017-6-20 02:25
1、你對單片機是如何工作的不熟悉;
2、你對隨機數是如何隨機未認真考慮過;
所以才會提出這個問題

..........要是懂了我還來問嗎。
回復

使用道具 舉報

6#
ID:154074 發表于 2017-6-20 09:58 | 只看該作者
打開定時器,取里面的數字作為隨機數
回復

使用道具 舉報

7#
ID:472242 發表于 2019-2-9 03:44 | 只看該作者
rand()產生隨機數,頭文件加#include<stdlib.h> 中
下面是案例:
#include<reg51.h>
#include<intrins.h>
#include<stdlib.h>
#define  uchar unsigned char
#define  uint unsigned int

#define  _nops() {_nop_();_nop_();_nop_();_nop_();}
sbit K1=P1^4;
sbit BEEP=P2^7;
sbit RS=P2^0;

sbit RW=P2^1;
sbit EN=P2^2;

void speak();
bit Busy();
uchar code biaoti   [] = {"^-^99 table ^-^"};  //標題字符串
uchar data plany_num[] = {"               "}; //乘法口訣表達式
void delay(uint x); //延時
void beep();        //蜂鳴器
bit BUSY(void);              //測忙
void Write_cmd(uchar cmd);   //寫指令
void Write_dat(uchar dat);   //寫數據
void LCD_chushihua();             //初始化LCD                                                   


void display(uchar *abc,uchar lineno) //顯示函數

{
        uchar k;
       
    Write_cmd(lineno | 0x80);   // 傳地址
       
    for(k=0;k<16;k++)
               
        Write_dat(abc[k]);         //傳數字與符號過來 a.被乘數 b.乘數 c.積
}

void random_num() //隨機生成被乘數,乘數算出乘積

{
        uchar a,b,c1,c2;
//---------------------------------------------------隨機數處理
        a  = rand()%9+1;   //被乘數 rand()產生隨機數a函數
            //rand()%9表示隨機產生的最大值為(9-1)就是8,因此要加1
        b  = rand()%9+1;   //乘數
       
        c1 = a*b/10; //十位
       
        c2 = a*b%10; //個位

    plany_num[3] = a+'0';    //0x40 + 3,放被乘數
       
    plany_num[5] = '*';      //0x40 + 5,放被乘號
       
    plany_num[7] = b+'0';    //0x40 + 7,放乘數
       
    plany_num[9] = '=';      //0x40 + 9,放被‘=’號
       
    plany_num[11]= c1+'0';   //0x40 + 11或12,放結果
       
    plany_num[12]= c2+'0';  
       
        if( c1 == 0)  plany_num[11]=' ';//當乘積的十位數即數組中的第9位為0時不顯示        
}

void main()

{
    P0= P2=0xff;
       
    delay(10);
       
        LCD_chushihua();  //初始化LCD
       
        display(biaoti,0x00);//在第一行顯示標題
       
    while(1)        
    {
                if(K1==0)         //按鍵取隨機數
                {        
                        speak();
                        delay(10);
                        while(K1==0);    //等待K1鍵釋放
                        random_num();        
        }
               
        display(plany_num,0x40); //指定第二行放數的位置
               
        delay(100);        
    }        
}  


//----------------------------- LCD1602七七八八-------------------------------------------
bit BUSY(void)  //測忙
{
        bit panmang;//定義一個位  panmang(判忙),只有0與1,丟到while(BUSY())中.
        RS = 0;
        RW = 1;
        EN = 1;
        delay(1);
        panmang = (bit)(P0 & 0x80);        //最高位為判忙信號位        panmang = 1為忙,反之不忙,可執行后面語句
        EN = 0;
        return panmang;                               
}

void Write_cmd(uchar cmd)   //寫指令
{
        while(BUSY());                        //測忙
        RS = 0;          //  RS = 0;是寫指令       
        RW = 0;
        EN = 0;       
        P0 = cmd;
        EN = 1;
        delay(1);
        EN = 0;                       
}

void Write_dat(uchar dat)
{
        while(BUSY());                        //測忙
        RS = 1;           //  RS = 1;是寫數據
        RW = 0;
        EN = 0;       
        P0 = dat;
        EN = 1;
        delay(1);
        EN = 0;                       
}

void LCD_chushihua() //LCD初始化
{
           Write_cmd(0x38);                        //功能設置
        delay(1);
        Write_cmd(0x0c);                        //顯示開關控制
        delay(1);
        Write_cmd(0x06);                        //輸入方式設置
        delay(1);
        Write_cmd(0x01);                        //清除LCD的顯示內容
        delay(1);
}   



void delay(uint x) //延時

{
        uchar i;
       
        while(x--)
               
                for(i=0;i<120;i++);                
}

void speak() //蜂鳴器
{        
        uchar i,j;
       
        for(i=0;i<180;i++)
               
        {
                for(j=0;j<50;j++); BEEP=!BEEP;        
    }        
        delay(300);BEEP=0;       
}

評分

參與人數 7黑幣 +198 收起 理由
sheng7533967 + 15
還有誰? + 8
yoxi + 35
Sawardeakar + 35
#include51.h + 35
shuisheng + 35
刀刀見紅 + 35

查看全部評分

回復

使用道具 舉報

8#
ID:475444 發表于 2019-2-9 22:13 | 只看該作者
hblg 發表于 2017-6-20 08:49
..........要是懂了我還來問嗎。

說的好,有些人就是不懂裝懂的

評分

參與人數 1黑幣 +35 收起 理由
shuisheng + 35

查看全部評分

回復

使用道具 舉報

9#
ID:706567 發表于 2020-3-26 18:25 | 只看該作者
就你?呸! 發表于 2019-2-9 22:13
說的好,有些人就是不懂裝懂的

唉。!
我也是不曉得咋弄,看了很多貼子發 現,樓上說的不錯,還是沒有理解透徹,思路開闊一點,方法真的很多。
回復

使用道具 舉報

10#
ID:155507 發表于 2020-3-26 19:39 | 只看該作者
在微控制器上生成真實的隨機數

有時確實存在一個問題,即如何使用微控制器生成真實的隨機數。通常,計算機處理器或任何其他MCU都能夠生成偽隨機數(PRN)。這些數字由所謂的偽隨機數發生器(PRNG)生成。純算法產生的所有東西在某種程度上都是可以預測的。

有許多PRNG算法可生成隨機數,但是當隨機數序列重復其自身時,總是存在定義的迭代次數。有時這是可以接受的。生成偽隨機數的一種流行方法是使用計時器。更多通用算法是線性反饋移位寄存器(LFSR)的概念。 LSFR是一個n位寄存器,由非零種子值啟動,并通過將值左移并將新位加載到bit0進行時鐘控制。新位是通過對LSFR選定抽頭的位進行XOR運算而得出的。在rand()函數中使用此方法。

通常,我們知道隨機數生成的簡單解決方案(以AVR-GCC為例):


//示例如何生成范圍為(0到9)的PRN

uint8_t randNumber;      //獲取一個隨機數(0到255)
randNumber =(uint8_t)rand(); //將數字范圍設置為0到15
randNumber = randNumber&0x0F;   //將數字范圍設置為0到9
if (randNumber> 9)
    randNumber-= 6;


但是,只要為rand()函數使用相同的種子,此算法將始終獲得相同的數字順序。這無非就是數學功能,它在一系列可預測的數字之間循環。如果您需要真正的隨機性,則需要找到可以注入一定熵的真實世界源。這可能是連接到ADC的任何噪聲二極管。這樣的隨機發生器被稱為硬件隨機數發生器。他們經常使用一些微觀現象,例如熱噪聲,光電效應等。市場上有完整的隨機數發生器,可以通過USB與PC相連,例如




關于隨機噪聲源的有趣讀物 http://ciphersbyritter.com/NOISE/NOISRC.HTM ,其中熵源(entropy source)是使用齊納二極管的。使用PC聲卡進行測量。


通常,如果要使用溫度傳感器(例如AD7416)對某種嵌入式平臺進行原型設計,則意味著您已經具有硬件隨機數生成器。由于溫度傳感器芯片會產生噪聲,因此可以將其用作RNG的熵源。而且您無需連接其他設備,例如齊納二極管或光電管。





回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩在线一区二区 | 国产福利在线播放麻豆 | 婷婷激情综合 | 欧美精品欧美精品系列 | 精品日韩 | 亚洲一区视频 | 亚洲精品久久嫩草网站秘色 | www.4567 | 在线中文视频 | 亚洲精品亚洲人成人网 | 欧美日韩在线观看视频网站 | 国产麻豆乱码精品一区二区三区 | 久久精品福利视频 | 免费在线看a | 久久久精品一区二区 | 在线视频 欧美日韩 | 日韩欧美一区二区三区在线播放 | 日韩久久综合 | 欧美性极品xxxx做受 | 午夜av电影| 亚洲精品久久久久中文字幕欢迎你 | 免费的黄色片子 | 亚洲电影中文字幕 | 日日av| 久久久久久亚洲精品 | 日本网站在线看 | www.亚洲一区二区 | 国产精品国产a级 | 日韩毛片在线免费观看 | 成人黄在线观看 | 精品av| 欧美中文字幕在线 | 国产精品久久久久久久久久久免费看 | 99精品在线免费观看 | 亚洲激情av | 黄视频网站免费观看 | 亚洲国产精品一区二区久久 | 国产成人一区在线 | 91精品一区二区三区久久久久 | 欧美激情在线一区二区三区 | 五月天综合网 |