8051

電子輪盤抽獎遊戲之隨機顯示

實驗版

這個東西的出現其實是因為一個店家的老闆請我做的,不過目前我還沒有把它交出去(被毆),因為我還沒有想好怎麼把版子洗出來…

在這個小小的東西裡,最重要的東西就是隨機選取燈號的部分,不過卻也是最簡單的,因為他只是幾條涵式再加上一點硬體的小配合而已。

我們先來看看隨機選取的這段小程式長甚麼樣子吧!

甚麼!? 竟然就只有這麼短短的一行而已? 是的,你沒看錯。其中的

rand() 就是最重要的主角,但別以為這樣子就結束了!因為在C語言中的rand()涵式是要再搭配一個種子,也就是另一個會變換的數字來搭配,才能達到真正的隨機。

其中的 srand() 即是讓 rand() 獲得種子的涵式,也是最重要的一個小涵式,少了它,你的rand就不會random了,而是永遠保持在同1個數值(這就不叫隨機了吧!)。

再來,因為是使用8051來實現的關係,因此我們不能像在電腦裡寫C時的方法一樣用系統時間的方式來獲得種子數字,這時候就需要硬體的搭配了!

我是利用RC充放電的原理達到種子產生的效果,從上面可以看出,電容會在放電後執行充電的動作。

而每次充電的時間其實都有些許不同,做過相關實驗便知道RC充放電的函數圖形呈曲線狀態,然後利用這一特性,讓 i 在這段時間中累加,最後取得最終數值。 最後將這些小片段組合起來,再加上一些小設定便可以達到隨機顯示的效果了! 如何? 是不是很有趣呢? 我剛把這個雛形弄出來的時候也玩了很久,哈哈~:P

. .

機率是不可確定的,你永遠只能知道它的數值但無法預知它出現的時機。

在〈電子輪盤抽獎遊戲之隨機顯示〉中有 18 則留言

  1. 請問電容的硬體電路能提供給我嗎?

    謝謝

  2. 請問可以 PO 上完整的電路圖 和程式嗎??
    最近對亂數 很頭痛 需要一個參考

    1. 近日忙,這篇有點久了,要想想我當時怎麼弄的,周末補上!

      p.s. 這次真的會補!

    2. 找不到歷史資料了 XD

      簡單說明一下當時的做法,我是利用 RC 充放電原理來做的,電路就一顆電容串電阻,電阻接地,然後電阻再跟一個按鈕開關並聯。電容接到正極,負極端接到電阻,然後兩者相連的部分連接至 8051。

      8051 程式部分則是用 while( P1^0 == 0) i++; 的方式來做 rand() 的種子,因為每次的 RC 時間都會有些不同,所以可以利用這方式來做種子。

您的見解

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料