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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9133|回復: 9
收起左側

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

  [復制鏈接]
ID:210834 發表于 2017-6-18 21:36 | 顯示全部樓層 |閱讀模式
新人一位  想用kile產生一個隨機數  但是百度上的解釋看不懂 求大神詳解
回復

使用道具 舉報

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、你對隨機數是如何隨機未認真考慮過;
所以才會提出這個問題
回復

使用道具 舉報

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

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

使用道具 舉報

ID:154074 發表于 2017-6-20 09:58 | 顯示全部樓層
打開定時器,取里面的數字作為隨機數
回復

使用道具 舉報

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

查看全部評分

回復

使用道具 舉報

ID:475444 發表于 2019-2-9 22:13 | 顯示全部樓層
hblg 發表于 2017-6-20 08:49
..........要是懂了我還來問嗎。

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

評分

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

查看全部評分

回復

使用道具 舉報

ID:706567 發表于 2020-3-26 18:25 | 顯示全部樓層
就你?呸! 發表于 2019-2-9 22:13
說的好,有些人就是不懂裝懂的

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

使用道具 舉報

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相連,例如
images (1).jpg



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

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





回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频一二三区 | 亚洲精品视频免费观看 | av大片在线 | 精久久久久 | 久久久婷| 精品久久久久久亚洲综合网 | 国产在线一区二区三区 | 欧美一级在线观看 | 欧美精品在线播放 | 欧美日韩精品区 | 美女逼网站| 日韩欧美三级电影在线观看 | 国产视频福利在线观看 | 免费三级网 | 日韩一区二区三区在线视频 | 国产精品国产精品国产专区不片 | 国产精品网页 | 伊人伊人 | 在线成人精品视频 | 久草网址 | 日本精品视频一区二区 | www国产成人免费观看视频,深夜成人网 | 中文字幕视频在线 | 久久黄色 | 久久婷婷色 | 亚洲网站在线观看 | 精品一级 | 成人午夜影院 | 国产成人精品区一区二区不卡 | 天天天天天天天干 | 免费观看国产视频在线 | 久久小视频 | 亚洲综合天堂 | 91免费在线看 | 国产国语精品 | 伊人精品国产 | 久久精品国产99国产精品 | 亚洲精品乱码久久久久久蜜桃91 | 草逼网站 | 亚洲精品美女在线观看 | 日韩精品久久一区二区三区 |