八路抢答器-51单片机(附Proteus仿真、C代码、原理图及PCB、论文和元器件清单)

获取全套设计资源,请见后文说明…

设计要求
1)抢答器同时供8名选手或2个代表队比赛,分别用8个按钮S0-S7表示;
2)设置一个系统清除和抢答控制开关S,该开关由主持人控制;
3)抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止;
4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30s等)。当主持人启动“开始”按键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续时间为0.5s左右;
5)参赛选手在设定时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手编号和抢答时间,并保持到主持人将系统清除为止;
6)如果定时时间到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00;
7)设计出软件编程方法,并写出源代码;
8)主机与从机实现无线抢答;
9)用Proteus进行仿真,Altium Designer绘制原理图和PCB;

概述
本文介绍了数码显示八路抢答器电路的组成、设计及功能,该抢答器除具有基本的抢答功能外,还具有计时和报警的功能。主持人通过时间预设开关预设供抢答的时间,系统将完成自动倒计时。

若在规定的时间有人抢答,则计时将自动停止,若在规定的时间无人抢答,则系统中的蜂鸣器将发响,提示主持人本轮抢答无效,实现报警功能,若超过抢答时间则抢答无效。

本系统采用51单片机作为整个控制核心。控制系统主要由:显示模块、控制模块、报警模块和抢答模块组成。

工作时,该系统通过矩阵键盘输入抢答信号,经单片机的处理后,输出控制信号,利用一个4位数码管来完成显示功能并伴随蜂鸣器报警,用按键来让选手进行抢答,在数码管上显示哪一组先答题,从而实现整个抢答过程。

系统结构图.jpg

proteus仿真电路图

仿真电路图.jpg
操作说明.jpg

系统原理图

原理图.jpg

PCB图
PCB.jpg

仿真结果分析
加载“八路抢答器.hex”文件到51单片机,点击运行。八路抢答器程序初始化后,数码管显示:----。等待主持人按键输入。
图1.jpg

按下“主持人”键,数码管显示:00-0。此时,可以通过“计时+”和“计时-”键,设置计时时间。本例中,我们设置计时时间为30秒。
图2.jpg

图3.jpg

再次按下“主持人”键,蜂鸣器哔的一声,倒计时开始,8位选手可以开始进行抢答。假设3号选手,在计时时间内抢答成功。此时,计数停止,数码管显示剩余计时数和当前选手号,其对应的3号LED灯点亮。


图4.jpg

倒计时,还剩5秒时,若仍没有选手抢答,此时蜂鸣器发出连续提示音。若计时结束,无人抢答,此时数码管显示:00-0;按下“主持人”键,数码管显示:----;再次按下“主持人”键,显示30-0;如果不对计时时间作修改,再次按下“主持人”键,新一轮计时开始。

如果,在主持人未开始计时时,即抢答未开始前,有人抢答。假设2号选手抢答,此时数码管显示:FF-2,蜂鸣器长鸣,2号红色LED灯点亮。选手犯规抢答后,按下‘主持人’键,蜂鸣器停止,数码管显示:00-0,主持人设置时间,重新开始。

图5.png

部分C代码

/********************************************************
函数名称:void scan(void)
函数作用:按键检测函数
参数说明:
********************************************************/ 
void scan(void)
{   
    uchar qiangda_num=0;
    //主持人键
    if(key_zhu==0)         //按键按下
    {
        delayms(7);        //显示消抖
        if(key_zhu==0&&zhu_f!=2&&qiang_f==0&&wan_f==0)//判断是否有人犯规或者抢答是否开始或者抢答是否完成
        {
            zhu_f++;       //比赛阶段标记+1
            if(zhu_f==2)   //比赛正式开始
            {
                TR0=1;     //比赛开始,开启定时
                wan_f=0;   //清除比赛完成标志
                bajing();  //提示比赛开始
            }           
        }
        else
            if(key_zhu==0&&qiang_f==1)   //判断是否有人犯规
            {
                buzz=1;                  //清除报警
                qiang_f=0;               //清除抢答标志
                number=0;                //清除选手编号
                time=EEPROM_read(0x2000);//重新读取存储的抢答总时长
                led_kongzhi(0,0,0);
            }
            else                         
                if(key_zhu==0&&wan_f==1) //判断是否有人完成
                {
                    buzz=1;              //清除报警
                    wan_f=0;             //清除完成标志
                    number=0;            //清除选手编号
                    time=EEPROM_read(0x2000);//重新读取存储的抢答总时长
                    led_kongzhi(0,0,0);
                }
                else
                    if(key_zhu==0&&zhu_f==2) //暂停比赛
                    {
                        TR0=0;               //关闭定时
                        zhu_f=1;             //重新回到设置比赛时间阶段
                        bajing();            //提示暂停比赛
                    }
        while(!key_zhu);//检测按键松开
    }

    //加值键,支持连按
    if(key_jia==0&&zhu_f==1&&qiang_f==0)     //判断是否在设置倒计时时间
    {
        delayms(7);                          //延时消抖
        if(key_jia==0)                       //再次判断按键按下
        {
            if(time<99)                      //比赛时间最大值99S
                time++;                      //比赛时间+1S
            EEPROM_delete(0x2000);           //擦除EEPROM煽区
            EEPROM_write(0x2000,time);       //写入【比赛时间】数据保存
            display(time/10,time%10,10,0);   //显示设置比赛时间
        }
    }

    //减值键,支持连按
    if(key_jian==0&&zhu_f==1&&qiang_f==0)    //判断是否在设置倒计时时间
    {
        delayms(7);                          //延时消抖
        if(key_jian==0)                      //再次判断按键按下
        {
            if(time!=0)                      //比赛时间最小值0S
                time--;                      //比赛时间-1S
            EEPROM_delete(0x2000);           //擦除EEPROM煽区
            EEPROM_write(0x2000,time);       //写入【比赛时间】数据保存
            display(time/10,time%10,10,0);   //显示设置比赛时间
        }
    }
    //选手按键
    qiangda_num=qianda();
    if(qiangda_num!=0)                              //判断是否有选手按下按键
    { 
        if(zhu_f!=2&&qiang_f==0&&wan_f==0)//如果还没有开始抢答时按下
        {
            zhu_f=1;
            buzz=0;                       //蜂鸣器报警
            qiang_f=1;                    //抢答犯规标记
            number=qiangda_num;
            led_kongzhi(number,1,0);
        }
        else
            if(zhu_f==2&&wan_f==0)           //在开始抢答时按下
            {
                wan_f=1;                     //标记抢答完成
                zhu_f=0;                     //主持人标记复位
                TR0=0;                       //关闭倒计时定时器
                number=qiangda_num;
                led_kongzhi(number,1,0);
                bajing();                    //提示有人抢答完成
            }
    }  
}

/*********************************************************
函数名称:void main()
函数作用:主函数函数
参数说明:
*********************************************************/
void main()
{
    uchar i=0;
    T0_init();                       //定时器初始化
    if(key_jian==0)   
    {
        delayms(100);
        if(key_jian==0)
        {
            EEPROM_delete(0x2000);   //擦除EEPROM煽区
            EEPROM_write(0x2000,30); //写入【比赛时间】数据保存 
        }
    }
    time=EEPROM_read(0x2000);        //读取存储的【比赛时间】数据

    for(i=0;i<9;i++)
    {
        led_kongzhi(i,1,1);
        delayms(10);    
    }

    for(i=9;i>0;i--)
    {
        led_kongzhi(i-1,0,1);
        delayms(10);    
    }
    led_kongzhi(0,0,0);
    while(1)                         //死循环
    {
        scan();                      //按键检测处理
        if(zhu_f==0&&wan_f==0)       //判断是否还没进入比赛阶段

分享的资源有
(1)基于51单片机的八路抢答器系统设计毕业论文完整版;
(2)Proteus仿真文件;
(3)Keil C程序文件;
(4)元器件清单;
(5)Visio流程图;
(6)原理图及PCB文件;

资源分享如下

资源.jpg

资源.jpg

资源.jpg
资源.jpg
资源.jpg

资源获取方法
资源获取方法
资源获取方法
重要的事情说三遍!!!!!!!!!!!,
获取完整的八路抢答器设计论文、Proteus仿真、C程序、PCB及原理图、Visio流程图、元器件清单等全套资料。请搜索关注我的公众号:交院小智

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容