找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4245|回復(fù): 5
收起左側(cè)

基于51單片機(jī)的隨機(jī)抽獎(jiǎng)器。十萬(wàn)火急! 求幫助

[復(fù)制鏈接]
ID:276259 發(fā)表于 2018-3-28 18:47 | 顯示全部樓層 |閱讀模式
人工方式,按下開(kāi)始按鈕,能輸出3~8個(gè)的隨機(jī)數(shù)(隨機(jī)數(shù)需要兩位數(shù)的),并顯示出來(lái)。例如:我選定中獎(jiǎng)人數(shù)是3人,數(shù)字范圍是50,按下抽獎(jiǎng)鍵后,你的顯示應(yīng)該是諸如25 36 17 之類(lèi)的三個(gè)數(shù)字,一共6位數(shù)。求大神幫忙,真的急!。。。
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2018-3-28 21:59 | 顯示全部樓層
做一個(gè)1-50的計(jì)數(shù)器,永遠(yuǎn)一直循環(huán),
設(shè)置一個(gè)緩沖區(qū)放8個(gè)數(shù)據(jù)
當(dāng)有鍵按下是,取出計(jì)數(shù)器的的數(shù)放入緩沖區(qū),事先多敲幾次鍵,讓緩沖區(qū)中充滿(mǎn)這樣的數(shù),這些數(shù)字可以認(rèn)為的隨機(jī)的。注意每次放不同的位置。
現(xiàn)在開(kāi)始:按下后,從緩沖區(qū)中取出你所要的數(shù)據(jù)即可,同事再被補(bǔ)入一個(gè)。
這只是較方便的一種。你可以想像出許多種隨機(jī)的方式。

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:248705 發(fā)表于 2018-3-28 23:58 | 顯示全部樓層
送給樓主,剛寫(xiě)的,我也是初學(xué),可能有些不太完善的地方,但是你說(shuō)的功能都實(shí)現(xiàn)了,數(shù)碼管為共陰,位選使用了138
  1. #include"reg52.h"
  2. #include"stdlib.h"                        //   //包含隨機(jī)數(shù)函數(shù)的頭文件

  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define max 50                   //max
  6. #define min 1                                //min
  7. uint a,c,d,e,f=0;
  8. uchar code smgduan[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
  9. DisplayData[8];
  10. bit gg;
  11. sbit LSA=P2^2;
  12. sbit LSB=P2^3;
  13. sbit LSC=P2^4;
  14. sbit k1=P3^0;                        //按鍵
  15. sbit k2=P3^1;       
  16. void inittimer()
  17. {
  18. TMOD|=0x11;                               
  19. TH0=(65535-1000)/256;
  20. TL0=(65535-1000)%256;
  21. EA=1;
  22. ET0=1;
  23. TR0=1;
  24. }
  25. void delay(uint x)
  26. {
  27. while(x--);
  28. }
  29. void DigDisplay()                        //138位選
  30. {
  31.         uchar i;
  32.         for(i=0;i<8;i++)
  33.         {
  34.                 switch(i)         
  35.                 {
  36.                         case(0):
  37.                                 LSA=0;LSB=0;LSC=0; break;
  38.                         case(1):
  39.                                 LSA=1;LSB=0;LSC=0; break;
  40.                         case(2):
  41.                                 LSA=0;LSB=1;LSC=0; break;
  42.                         case(3):
  43.                                 LSA=1;LSB=1;LSC=0; break;
  44.                         case(4):
  45.                                 LSA=0;LSB=0;LSC=1; break;
  46.                         case(5):
  47.                                 LSA=1;LSB=0;LSC=1; break;
  48.                         case(6):
  49.                                 LSA=0;LSB=1;LSC=1; break;
  50.                         case(7):
  51.                                 LSA=1;LSB=1;LSC=1; break;       
  52.                 }
  53.                 P0=DisplayData[7-i];
  54.                 if(c>=200){c=0;};

  55.                 P0=0x00;
  56.         }               
  57. }
  58. void datapros()          //段選
  59. {
  60.         DisplayData[0] = smgduan[a/10];                               
  61.         DisplayData[1] = smgduan[a%10];                                 
  62.         DisplayData[2] = 0x40;
  63.         DisplayData[3] = smgduan[d/10];                               
  64.         DisplayData[4] = smgduan[d%10];       
  65.         DisplayData[5] = 0x40;
  66.         DisplayData[6] = smgduan[e/10];                               
  67.         DisplayData[7] = smgduan[e%10];
  68. }
  69. void main()
  70. {       
  71.         double b;
  72.         inittimer();
  73.         haha:for(b=0;b<50000000;b++)
  74.                 {
  75.                         srand(b);
  76.                         a = rand()%49+1;
  77.                         srand(c);
  78.                         d = rand()%49+1;
  79.                         srand(b-c);
  80.                         e = rand()%49+1;
  81.                         datapros();
  82.                         if(k1==0)
  83.                         {
  84.                         delay(1000);if(k1==0)
  85.                         {
  86.                         TR0=0;;while(k2){DigDisplay();};TR0=1;
  87.                         }
  88.                         }
  89.                         delay(5500);                        //更改括號(hào)內(nèi)數(shù)字來(lái)更改刷新速度
  90.                 }
  91.                 goto haha;
  92. }
  93. void init()interrupt 1
  94. {
  95. TH0=(65535-1000)/256;
  96. TL0=(65535-1000)%256;
  97. DigDisplay();
  98. c++;
  99. }
復(fù)制代碼


評(píng)分

參與人數(shù) 1黑幣 +60 收起 理由
admin + 60 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:248705 發(fā)表于 2018-3-29 00:38 | 顯示全部樓層
祖國(guó)的花朵 發(fā)表于 2018-3-28 23:58
送給樓主,剛寫(xiě)的,我也是初學(xué),可能有些不太完善的地方,但是你說(shuō)的功能都實(shí)現(xiàn)了,數(shù)碼管為共陰,位選使用 ...

數(shù)組里0x00那個(gè)是沒(méi)有用到的哈,上個(gè)程序留下的,沒(méi)注意到,不妨礙顯示
回復(fù)

使用道具 舉報(bào)

ID:248705 發(fā)表于 2018-3-29 22:49 | 顯示全部樓層
祖國(guó)的花朵 發(fā)表于 2018-3-29 00:38
數(shù)組里0x00那個(gè)是沒(méi)有用到的哈,上個(gè)程序留下的,沒(méi)注意到,不妨礙顯示

沒(méi)有考慮到相同情況。。。。
回復(fù)

使用道具 舉報(bào)

ID:335855 發(fā)表于 2018-5-26 20:39 | 顯示全部樓層
這個(gè)應(yīng)該可以用

應(yīng)用實(shí)例9 電子抽獎(jiǎng)系統(tǒng).rar

83.23 KB, 下載次數(shù): 50

電子抽獎(jiǎng)系統(tǒng)

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表