一、实验介绍

这是一个用单片机开发板做的抢答器,用独立按键进行抢答,用数码管显示。

二、使用说明

使用说明烧录完毕按,(这里四个独立从左到右依次为s1,s2,s3,s4),按下s3开始抢答数码管开始倒计时,在倒计时内按下s1或s2则为抢答成功数码管就会显示抢答者编号和答题倒计时,在答题完毕按下s4表示答题结束蜂鸣器响起数码管倒计时暂停延时数秒结束,可重新开始下一轮抢答。在没有开始抢答时可以按下s4设置抢答时间和答题时间,按一次数码管显示抢答时间,这时按s1、s2进行抢答时间的加减,按下s4第二次设置答题时间,这时按s1、s2进行答题时间的加减,按下s4第三次数码管熄灭,这时可以按s3进行抢答。

三、代码

代码如下:

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0X07,0x7f,0x6f}; //数码管0-9/*********按键I/O口定义*******/
sbit buzzer=P2^3;
sbit x1=P3^0;
sbit x2=P3^1;
sbit x3=P1^2;
sbit x4=P1^3;
sbit x5=P1^4;
sbit x6=P1^5;
sbit judge=P3^2;
sbit set=P3^3;
sbit dula=P2^6;
sbit wela=P2^7;uchar flag,flag1=0,choose;
uint time,time1,i;
uchar race_time=5,answer_time=20;    //初始抢答时间为5s,初始答题时间为20s
void digital_q (uchar race_time);   //数码管显示抢答时间函数
void digital_d (uchar race_time);   //数码管显示答题时间函数
void digital_x (uchar race_time);    //数码管显示抢答选手函数
void choose_p (uchar x);         //选手抢答后+抢答倒计时函数
uchar keyscan (uchar);         //设置抢答时间和答题时间的加减按键函数
uchar keyscan_set(uchar flag);     //设置键flag累加函数
void digital_clc (void);    //数码管清屏函数
void delay(uint a)
{uint x,y;for(x=a;x>0;x--)for(y=110;y>0;y--);
}
void main()
{
/**********中断变量*********/TMOD = 0x11;  TH0  = (65536-2000)/256;    TL0  = (65536-2000)%256; EA   = 1;   ET0  = 1;TH1  = (65536-2000)/256;    TL1  = (65536-2000)%256; EA   = 1;   ET1  = 1;
/**********中断变量完*******/while(1){
/*********************************设置****************************/flag1=keyscan_set(flag1);if(flag1==1){digital_q (race_time);race_time=keyscan(race_time);  }if(flag1==2)           //设置答题时间,与上同理{digital_d (answer_time);answer_time=keyscan(answer_time);}//可随意设置抢答时间和2·答题时间if(flag1==3)digital_clc();/***************************抢答**********************************/if(judge==0)//总开关,标志抢答开始{delay(10);buzzer=1; flag=1;TR0=1;while(!judge);}while(flag==1)  //倒计时5秒{if(flag==1)digital_q (race_time);while(race_time==0)//||TR0==0){buzzer=0;flag=2;TR1=0;choose=0;answer_time=0;digital_q (race_time);}if(x1==0)//选手1按下{choose_p(1);}if(x2==0)//选手1按下{choose_p(2);}if(x3==0)//选手1按下{choose_p(3);}if(x4==0)//选手1按下{choose_p(4);}if(x5==0)//选手1按下{choose_p(5);}if(x6==0)//选手1按下{choose_p(6);}}if(flag==2){for(i=1000;i>0;i--){digital_x (choose);delay(1);digital_d (answer_time);delay(1);}buzzer=1;race_time=5;answer_time=20;flag=0;digital_clc();}}
}           /**********抢答倒计时中断***********/
void timer0 () interrupt 1
{TH0 = (65536-2000)/256;    TL0 = (65536-2000)%256;time++;     if(time==500)   {time=0;race_time--;if(race_time==-1){TR0=0;}}
}
/**********答题倒计时中断***********/
void timer1 () interrupt 3
{TH1 = (65536-2000)/256;    TL1 = (65536-2000)%256;time1++;     if(time1==500)   {time1=0;answer_time--;if(answer_time==0){TR1=0;}}
}void digital_q (uchar race_time)
{wela=1;            P0=0xfe;wela=0;dula=1;P0=table[race_time/10];  dula=0;delay(1);                                       wela=1;             P0=0xfd;wela=0;dula=1;P0=table[race_time%10];   dula=0;delay(1);
}void digital_d (uchar race_time)
{wela=1;             P0=0xef;wela=0;dula=1;P0=table[race_time/10];  dula=0;delay(1);                                      wela=1;              P0=0xdf;wela=0;dula=1;P0=table[race_time%10];  dula=0;delay(1);
}void digital_x (uchar race_time)
{                                       wela=1;              P0=0xf7;wela=0;dula=1;P0=table[race_time];      dula=0;delay(1);
}void digital_clc (void)
{wela=1;             P0=0xff;wela=0;dula=1;P0=0xff;      dula=0;
}void choose_p (uchar x)
{uint i,j,k;choose=x;TR0=0;   TR1=1;buzzer=0;delay(10);buzzer=1;while(1)//显示1序号和20倒计时{digital_x (choose);digital_d (answer_time);if(answer_time==2){for(k=3;k>0;k--){if(set==0)break;buzzer=0;for(i=2;i>0;i--){if(set==0)break;for(j=110;j>0;j--){digital_x (choose);digital_d (answer_time);}}buzzer=1;for(i=100;i>0;i--){if(set==0)break;for(j=2;j>0;j--)  {digital_x (choose);digital_d (answer_time);}}}}if(set==0){delay(10);while (!set);TR1=0;flag=2;buzzer=0;delay(10);buzzer=1;delay(10);digital_x (choose);digital_d (answer_time);buzzer=0;delay(10);break;}if(answer_time==0){flag=2;buzzer=0;choose=0;digital_x (choose);digital_d (answer_time);break;}}
}uchar keyscan(uchar race_time)
{if(x2==0){delay(10);race_time++;while(!x2);}if(x1==0){delay(10);race_time--;while(!x1);}return race_time;
}uchar keyscan_set(uchar flag)
{if(set==0)         {delay(10);flag++;       if(flag==4)flag=1;while(!set);}return flag;
}

基于51单片机的抢答器相关推荐

  1. 单片机四路抢答器课程C语言设计,基于51单片机四路抢答器设计

    内容简介: 毕业设计 基于51单片机四路抢答器设计 共25页,9905字 随着经济水平的不断提高,人们在物质文明得到满足的同时更注重精神文明的追求,各种娱乐节目不断涌现,提高节目的质量尤为重要..本次 ...

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

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

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

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

  4. 51单片机 八路抢答器+Proteus仿真

    51单片机 八路抢答器+Proteus仿真 Proteus仿真 实例代码1 直观,任意看懂 #include <reg52.h> unsigned char code led[17]={0 ...

  5. c语言写51单片机八路抢答器,基于AT89C51单片机的八路抢答器设计方案.doc

    基于AT89C51单片机的八路抢答器设计方案 毕业设计(论文)-基于AT89C51单片机的八路抢答器设计 图书分类号:密 级: 毕业论文 基于AT89C51的八路抢答器设计OCTAL ANSWER D ...

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

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

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

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

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

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

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

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

最新文章

  1. Windows客户端C/C++编程规范“建议”——结构
  2. C#中object的使用
  3. 架构师之路 — 分布式系统 — Protocol Buffers 序列化协议
  4. 没有与这些操作数【】匹配的运算符_[02]java数据类型和运算符等知识
  5. 数据库相关中间件收录集
  6. python web框架 多线程_python 简单web框架: Bottle
  7. string转short java_[Java基础]之 数据类型转换
  8. 抽象类与抽象方法 abstrack java
  9. 可视化查看依赖关系_图可视化分析解决方案KeyLines介绍
  10. android 消息系统Handler、MessageQueue、Looper源代码学习
  11. C语言课设贪吃蛇说明书,c语言课设贪吃蛇.doc
  12. STM8S项目创建(STVD创建)---使用 COSMIC 创建 C 语言项目
  13. DHT爬虫和使用BEP协议完成metadata的下载(BT下载)
  14. 苹果手机如何分享wifi密码_怎样用手机改wifi密码
  15. diskpart 删除磁盘OEM分区 及设置活动分区
  16. H.266/VVC相关技术学习笔记3:帧内色度预测模式中的DM模式及其在N次会议上相关的提案总结
  17. odoo 慎用related(计算字段)
  18. 苹果 开发者账号如下
  19. JDK 8 JVM性能优化
  20. for 和 for...in 和 for...of

热门文章

  1. 【代码随想录刷题记录】 232.用栈实现队列 、225. 用队列实现栈
  2. 5G基站用电难题的转机?8大突破案例、25项政策支持!
  3. 刚三岁的拼多多赴美上市!活跃用户数近3亿,仅次于淘宝京东……
  4. Arduino Uno微控制器采用的是Atmel的ATmega328
  5. java后端面试题总结(持续更新)
  6. 魔金多商户商城商户管理
  7. VS2019 preview 卡在正在加载解决方案
  8. 一个人可以搭建数仓吗
  9. 男人患罕见“臭鱼症” 满身腥臭体味像死鱼
  10. SpringBoot MultipartFile 监控上传文件进度