1.设计目的作用

1、掌握51单片机最小系统的设计;

2、掌握硬件电路的设计方法;

3、掌握C51的编程方式。

2.设计要求

基于AT89C51单片机设计制作一个抢答器,具体要求如下:

设计一个智力竞赛抢答器,可同时共8名选手参加比赛,编号为1、2、3、4、5、6、7、8,各用一个按键。

用一个按键作为主持人总开关,用来控制系统的清零和抢答的开始。

抢答器开始后,数码管开始10秒倒计时,若有选手按动抢答按钮,在LED数码管上显示选手的编号,同时灯亮且伴随声音提示;倒计时完成后,选手不能再抢答;有人抢答成功后,要禁止其他选手抢答,同时开始显示60秒回答时间倒计时提示;最先抢答选手的编号一直保留到主持人将系统清零。

仿真图(Proteus 8.6版本)

源代码:

#include<at89x51.h>
  sbit zkey=P3^5;        //    主持人按键
  sbit zkey1=P3^6;
  sbit beep=P3^7;        //    蜂鸣器
  sbit led=P3^4;        //指示灯
  sbit shiwei=P3^0;
  sbit gewei=P3^1;
  sbit  ge=P3^3;       //数码管的位选
unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90};//共阳数码管段选值
  unsigned char people;         //    抢答结果
  unsigned char counter;     //    counter每100,minite加1
  unsigned char second;         // 秒表计数值
  unsigned char time1;         //    10秒倒计时
  unsigned char time2;         //    60秒倒计时 
  void delay(unsigned int z) //延时函数
  {
    unsigned i,j;
    for(i=z;i>0;i--)
    for(j=120;j>0;j--);
  }
  void time_display(unsigned char x)//函数功能:时间显示
  {
    unsigned char shi,ge;
    
    shi=x/10;
    ge=x%10;
    shiwei=1;gewei=0;
    P0=seg[ge];
    delay(20);
    shiwei=0;gewei=1;
    P0=seg[shi];
    delay(20);
    shiwei=0;gewei=0;delay(20);
  }
  void xuanshou_display(unsigned char y)//函数功能:选手编号显示
  {
    shiwei=1;gewei=0;
    P2=seg[y];
  }
    unsigned char keyscan()          //键盘扫描函数
  {
    unsigned char keyvalue,temp;    
    keyvalue=0;
    P1=0xff;               //P1口8位置1,作输入
    temp=P1;               //读P1口,送入temp中
    delay(10);               //消抖
    if(~(P1&temp))        
    {
      switch(temp)
      {
        case 0xfe: keyvalue=1; break;
        case 0xfd: keyvalue=2; break;
        case 0xfb: keyvalue=3; break;
        case 0xf7: keyvalue=4; break;
        case 0xef: keyvalue=5; break;
        case 0xdf: keyvalue=6; break;
        case 0xbf: keyvalue=7; break;
        case 0x7f: keyvalue=8; break;
        default: keyvalue=0; break;
      }
    }
    return keyvalue;
  }
  void timer_init()  //定时器T0初始化
 {
   EA=1;
   ET0=1;
   TMOD=0x01;        //定时器T0方式1定时
   TH0=0xd8;        //装入定时器定时常数,设定10ms中断一次
   TL0=0xef;
 }
 void init()          //初始化函数
 {   
     people=0;         //    抢答结果
     counter=0;         //    counter每100,minite加1
     second=0;         // 秒表计数值
     time1=10;         //    10秒倒计时
     time2=60;         //    60秒倒计时 
     P0=seg[0];
     P2=seg[0];
 }
  void main()          //主函数
  {
    init();
    timer_init(); 
    led=0;
    while(1)
    {
      if(zkey==0)             //总开关第一次闭合
      {
      delay(10);                   //消抖
      if(zkey==0)            //总开关第一次闭合
      {
        second=time1;   
        while(second)
        {                 
          TR0=1; 
          time_display(second);      //十秒倒计时显示        
          people=keyscan();           //将抢答结果送入people
          while(people!= 0)                //判断有按键按下
          {            
            TR0=0;                        //停止10秒倒计时                
            led=1;                        //灯亮            
            xuanshou_display(people);   //显示对应选手编号
            beep=0;                        //蜂鸣器响
            delay(2000);
            beep=1;    
            led=0;                        
            second=time2;                //60秒倒计时
            while(second)
            {                
                TR0=1;
                time_display(second);
                if(zkey1==0)                   //总开关第二次闭合
                {
                 delay(10);               //消抖
                if(zkey1==0)                   //总开关第二次闭合
                   init();                
                 }
                }
                }                                                                            
             }
            TR0=0;
            people=0;                   //抢答结果清零,终止循环
            }
       }    
     }
    }             
 void timer0() interrupt 1      //定时器T0中断函数
 {
   if(counter<100)
   {
     counter++;
   }
   else
   {
     counter=0;
     second=second-1;
   }
   TH0=0xd8;              //重新装载
   TL0=0xef;
   TR0=1;
 }

元件清单

元件名称

型号

单位

数量

51最小开发板

STC89C52

1

AC/DC电源

每班5个

万用板

9X15cm(3连孔)

1

按键开关

6*6*5MM/直插/4脚

12

单排插针

1*40P、2.54mm间距

1

电阻

10k/1/8W

13

杜邦线

母对母/1P对1P/20CM/40根一排

半排

红色LED

ø5

1

排母

1*16、2.54mm间距

1

排阻

4.7K(9脚)

1

三极管

9015

3

数码管

2位一体共阳

2

有源蜂鸣器

有源/5V/电磁式/ YHE12-05

1

AT89C51单片机的抢答器的设计(2位一体共阳)相关推荐

  1. 基于AT89C51单片机的抢答器的设计(数码管:四位一体共阳)

    设计要求 基于AT89C51单片机设计制作一个抢答器,具体要求如下: 设计一个智力竞赛抢答器,可同时共8名选手参加比赛,编号为1.2.3.4.5.6.7.8,各用一个按键. 用一个按键作为主持人总开关 ...

  2. 基于AT89C51单片机的抢答器的设计

    基于AT89C51单片机设计制作一个抢答器,具体要求如下: 设计一个智力竞赛抢答器,可同时共8名选手参加比赛,编号为1.2.3.4.5.6.7.8,各用一个按键. 用一个按键作为主持人总开关,用来控制 ...

  3. 51单片机八位抢答器c语言设计,基于51单片机八路抢答器的设计

    基于51单片机八路抢答器的设计 毕业设计(论文)题 目:基于 51 单片机八路抢答器的设计 系 部: 专 业: 学 号: 学生姓名: 指导教师姓名: 指导教师职称: 2013 年 xx 月 xx 日X ...

  4. 51单片机抢答器c语言代码,使用51单片机实现抢答器的设计资料和代码说明

    在知识比赛中, 特别是做抢答题目的时候, 在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务.如果在抢答中,靠视觉是很难判断出哪组先答题.利用单片机系统来设计抢答器,使以 ...

  5. c语言六位抢答器课程设计,51单片机八路抢答器课程设计

    ;说明:本人的这个设计改进后解决了前一个版本中1号抢答优先的问题,并增加了锦囊的设置,当参赛选手在回答问题时要求使用锦囊,则主持人按下抢答开始键,计时重新开始. ;八路抢答器电路请看下图是用ps仿真的 ...

  6. 基于51单片机八路抢答器课程设计(含proteus仿真图及代码)

    一.设计要求: 1.可满足8个选手的抢答 2.具有主持者控制开关,用来控制系统清零和抢答开始 3.抢答器具有数据锁存功能.显示功能和声音提示功能 4.抢答开始后,若有选手按动抢答器按钮,编号立即锁存, ...

  7. 单片机八路抢答器计设计

    详细代码讨论加我QQ:1271370903 一.设计任务与要求 一.题目:8路比赛抢答器 二.基本要求: 利用8051单片机中断系统,制作一个有8个按键的比赛抢答器.在有人按键时进行对应选手显示. 三 ...

  8. 抢答器php源码,单片机四路抢答器课程设计报告 含完整源码

    学院(部) 专    业 班    级 指导教师 题    目     四路抢答器 组    员 目录 设计要求2 方案讨论2 系统软件仿真3 系统硬件实现7 心得体会10 6.仿真代码11 附录17 ...

  9. 单片机四路抢答器课程C语言设计,四路抢答器单片机课程设计.doc

    渝州科技职业学院 单片机四路抢答器课程设计 院 系: 电子信息工程 专业班级: 11级电管本2班 学生姓名: 刘学飞 学 号: 1102120205 指导教师姓名: 何健 指导教师职称: 讲师 目录 ...

最新文章

  1. css 加随机数 引用_在CSS中生成随机数
  2. Android自定义控件:动画类---逐帧动画AnimationDrawable
  3. [CentOS Python系列] 三.阿里云MySQL数据库开启配置及SQL语句基础知识
  4. 外网利用POP3,SMTP访问内网Exchange!!!
  5. jQuery 遍历 each()方法
  6. 图论解决复杂路口红绿灯安排,python语言实现
  7. MySQL实战—更新过程
  8. ad域用户和计算机搭建,Windows Server 6分钟搭建AD域
  9. element Table表格隐藏列
  10. Reflector7.5.2.1的Bug
  11. 挖地雷_1996年分区联赛提高组之三_ssl1071_dfs
  12. 创建Web站点的欢迎页面
  13. 架构师必备!看我如何一步一步攻克面试官,详细解说
  14. html类选择器使用在什么场景,你需掌握的CSS知识都在这了(长文建议收藏,文末有福利)...
  15. 云服务器虚拟手机版,云服务器虚拟手机
  16. 雅西高速交警列16处危险路段 司机需小心行驶
  17. C语言学习—杨辉三角的实现
  18. Omnipeek空口抓包(4):抓取路由器下的无线网络包
  19. 军工企业信息化与信息安全概要
  20. 从滴滴到AirBnB,交易平台战争的秘密

热门文章

  1. (附源码)springboot工单管理系统 毕业设计 964158
  2. 高级信息系统项目管理师十大领域
  3. 帝云CMS-免费可商用的万能PHP建站程序
  4. matlab保存数据用什么指令_MATLAB文件操作及保存文件save load fopen | 学步园
  5. 年终盘点丨2020边缘计算大事记
  6. 【洛谷】【博弈搜索】P4363 [九省联考2018]一双木棋chess
  7. html 做笔记,HTML笔记(一)
  8. 吸烟者问题(有例题!!!)
  9. 手游竞争白热化 虎牙直播率先抢占手游新“蓝海”
  10. sync.map原理解析