找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3870|回复: 5
收起左侧

基于51单片机的随机抽奖器。十万火急! 求帮助

[复制链接]
ID:276259 发表于 2018-3-28 18:47 | 显示全部楼层 |阅读模式
人工方式,按下开始按钮,能输出3~8个的随机数(随机数需要两位数的),并显示出来。例如:我选定中奖人数是3人,数字范围是50,按下抽奖键后,你的显示应该是诸如25 36 17 之类的三个数字,一共6位数。求大神帮忙,真的急!!!!!
回复

使用道具 举报

ID:123289 发表于 2018-3-28 21:59 | 显示全部楼层
做一个1-50的计数器,永远一直循环,
设置一个缓冲区放8个数据
当有键按下是,取出计数器的的数放入缓冲区,事先多敲几次键,让缓冲区中充满这样的数,这些数字可以认为的随机的。注意每次放不同的位置。
现在开始:按下后,从缓冲区中取出你所要的数据即可,同事再被补入一个。
这只是较方便的一种。你可以想像出许多种随机的方式。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:248705 发表于 2018-3-28 23:58 | 显示全部楼层
送给楼主,刚写的,我也是初学,可能有些不太完善的地方,但是你说的功能都实现了,数码管为共阴,位选使用了138
  1. #include"reg52.h"
  2. #include"stdlib.h"                        //   //包含随机数函数的头文件

  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);                        //更改括号内数字来更改刷新速度
  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. }
复制代码


评分

参与人数 1黑币 +60 收起 理由
admin + 60 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:248705 发表于 2018-3-29 00:38 | 显示全部楼层
祖国的花朵 发表于 2018-3-28 23:58
送给楼主,刚写的,我也是初学,可能有些不太完善的地方,但是你说的功能都实现了,数码管为共阴,位选使用 ...

数组里0x00那个是没有用到的哈,上个程序留下的,没注意到,不妨碍显示
回复

使用道具 举报

ID:248705 发表于 2018-3-29 22:49 | 显示全部楼层
祖国的花朵 发表于 2018-3-29 00:38
数组里0x00那个是没有用到的哈,上个程序留下的,没注意到,不妨碍显示

没有考虑到相同情况。。。。
回复

使用道具 举报

ID:335855 发表于 2018-5-26 20:39 | 显示全部楼层
这个应该可以用

应用实例9 电子抽奖系统.rar

83.23 KB, 下载次数: 50

电子抽奖系统

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表