找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2869|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机电子抽奖系统源程序+Proteus仿真电路

[复制链接]
跳转到指定楼层
楼主
(二)设计要求
1.随机产生抽奖号码。
2.可以随时启动和停止抽奖
3.实时显示抽奖结果

(三)设计方法
   本设计由三部分组成:CPU处理模块,按键抽奖控制模块,抽奖信息显示模块。其中CPU处理模块控制所有的电路,当抽奖启动键按下后,CPU识别到按键按下,开始持续产生随机数(抽奖号码),当抽奖停止键按下后,CPU识别到按键按下,立刻停止随机数的产生,并在显示模块显示出当前随机数(抽奖号码)。

二 硬件设计
(一)硬件设计方案
   本设计使用AT89C51芯片作为主芯片,使用两个独立按键作为抽奖的启动键和停止键,以及四位共阴数码管作为抽奖号码的显示模块。硬件设计结构简单可靠,不需要额外的电路部分节省了制造生产成本。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


(三)按键电路设计
   本设计按键部分使用两个独立按键,一个作为抽奖的启动键,一端与接芯片P1.0口相接,一端与地线相接。一个作为抽奖的停止键,一端与接芯片的P1.4口相接,一端与地线相接。按键按下即可送出低电平信号。如图三所示。
图三(按键电路)

(四)数码管显示部分
   本设计的显示部分采用7SEG-MPX4-CC,即四位共阴极数码管,该数码管刚好可以满足稍复杂的4位抽奖号,既确保了有足够的抽奖号数量同时又方便记录和查看。数码管的A,B,C,D,E,F,G,DP分别与芯片的P2.0至P2.7相连,以控制数码管所显示的内容,而数码管的1,2,3,4分别与芯片的P3.0至P3.3相连,用于控制数码管所显示数字的位置。如图四所示。


   程序开始后,进入while循环等待按键K1的按下,待K1按下后定时器开始计时,将TL0,TH0的值分别赋给sum1和sum2,sum1和sum2进行除以10取余10和直接取余10后得到不同的个位数,再以此为数组下标分别从数组led[ ]中取数码管的数值显示,在条件循环while(counter==1)里循环等待按键K2的按下,若K2按下,则跳出while(counter==1)循环,停止随机数的产生,将当前随机数一直显示在数码管上,完成一次抽奖。


(二)各部分代码分析
1.主函数
void main()
{
        TMOD=0x01;
        TH0=0x00;
        TL0=0x00;
        EA=1;
        ET0=1;
        TR0=1;
        key();                        
}
主函数,设定了定时器的工作方式,定时器初值,调用了key函数。
2.按键逻辑函数
void key()
{
                 while(1)
        {
                        if(k1==0)
                        {
                        counter=1;
                        while(counter==1)
                        {         
                        sum1=TL0;
                        sum2=TH0;
                        display();
                        delay(35);
                        TR0=1;
                        if(k2==0)
                        {break;}
                        }        
                        }
                if(k2==0)
                {

                        P2=0x00;
                        P3=0x00;
                        sum1=TL0;
                        sum2=TH0;
                        TR0=0;
                        if(k1==0)
                        {break;}
                }
                display();                 
        }                        
}
按键函数中设定了按键控制随机数的产生和显示逻辑,只有K1按下后才会产生随机数,K2按下后会停止并显示当前随机数。
3.显示函数
void display()
{
        P2=led[sum1%10];
        P3=0xfe;
        delay(2);
        P3=0xff;

        P2=led[sum1/10%10];
        P3=0xfd;
        delay(2);
        P3=0xff;

        P2=led[sum2%10];
        P3=0xfb;
        delay(2);
        P3=0xff;

        P2=led[sum2/10%10];
        P3=0xf7;
        delay(2);
        P3=0xff;
        }
显示函数通过对sum1和sum2的运算得到个位数,并以此为下标在数组内找到对应数字从P3口送出。

全部资料51hei下载地址(Proteus仿真+源程序):
基于51单片机的电子抽奖.zip (64.41 KB, 下载次数: 52)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:752754 发表于 2020-7-12 14:31 | 只看该作者
第一次发,谢谢审核小哥
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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