基于51单片机的抢答器
一、实验介绍
这是一个用单片机开发板做的抢答器,用独立按键进行抢答,用数码管显示。
二、使用说明
使用说明烧录完毕按,(这里四个独立从左到右依次为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单片机的抢答器相关推荐
- 单片机四路抢答器课程C语言设计,基于51单片机四路抢答器设计
内容简介: 毕业设计 基于51单片机四路抢答器设计 共25页,9905字 随着经济水平的不断提高,人们在物质文明得到满足的同时更注重精神文明的追求,各种娱乐节目不断涌现,提高节目的质量尤为重要..本次 ...
- 51单片机八位抢答器c语言设计,基于51单片机八路抢答器的设计
基于51单片机八路抢答器的设计 毕业设计(论文)题 目:基于 51 单片机八路抢答器的设计 系 部: 专 业: 学 号: 学生姓名: 指导教师姓名: 指导教师职称: 2013 年 xx 月 xx 日X ...
- 基于51单片机八路抢答器课程设计(含proteus仿真图及代码)
一.设计要求: 1.可满足8个选手的抢答 2.具有主持者控制开关,用来控制系统清零和抢答开始 3.抢答器具有数据锁存功能.显示功能和声音提示功能 4.抢答开始后,若有选手按动抢答器按钮,编号立即锁存, ...
- 51单片机 八路抢答器+Proteus仿真
51单片机 八路抢答器+Proteus仿真 Proteus仿真 实例代码1 直观,任意看懂 #include <reg52.h> unsigned char code led[17]={0 ...
- c语言写51单片机八路抢答器,基于AT89C51单片机的八路抢答器设计方案.doc
基于AT89C51单片机的八路抢答器设计方案 毕业设计(论文)-基于AT89C51单片机的八路抢答器设计 图书分类号:密 级: 毕业论文 基于AT89C51的八路抢答器设计OCTAL ANSWER D ...
- c语言六位抢答器课程设计,51单片机八路抢答器课程设计
;说明:本人的这个设计改进后解决了前一个版本中1号抢答优先的问题,并增加了锦囊的设置,当参赛选手在回答问题时要求使用锦囊,则主持人按下抢答开始键,计时重新开始. ;八路抢答器电路请看下图是用ps仿真的 ...
- 基于AT89C51单片机的抢答器的设计(数码管:四位一体共阳)
设计要求 基于AT89C51单片机设计制作一个抢答器,具体要求如下: 设计一个智力竞赛抢答器,可同时共8名选手参加比赛,编号为1.2.3.4.5.6.7.8,各用一个按键. 用一个按键作为主持人总开关 ...
- 基于AT89C51单片机的抢答器的设计
基于AT89C51单片机设计制作一个抢答器,具体要求如下: 设计一个智力竞赛抢答器,可同时共8名选手参加比赛,编号为1.2.3.4.5.6.7.8,各用一个按键. 用一个按键作为主持人总开关,用来控制 ...
- 51单片机抢答器c语言代码,使用51单片机实现抢答器的设计资料和代码说明
在知识比赛中, 特别是做抢答题目的时候, 在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务.如果在抢答中,靠视觉是很难判断出哪组先答题.利用单片机系统来设计抢答器,使以 ...
最新文章
- Windows客户端C/C++编程规范“建议”——结构
- C#中object的使用
- 架构师之路 — 分布式系统 — Protocol Buffers 序列化协议
- 没有与这些操作数【】匹配的运算符_[02]java数据类型和运算符等知识
- 数据库相关中间件收录集
- python web框架 多线程_python 简单web框架: Bottle
- string转short java_[Java基础]之 数据类型转换
- 抽象类与抽象方法 abstrack java
- 可视化查看依赖关系_图可视化分析解决方案KeyLines介绍
- android 消息系统Handler、MessageQueue、Looper源代码学习
- C语言课设贪吃蛇说明书,c语言课设贪吃蛇.doc
- STM8S项目创建(STVD创建)---使用 COSMIC 创建 C 语言项目
- DHT爬虫和使用BEP协议完成metadata的下载(BT下载)
- 苹果手机如何分享wifi密码_怎样用手机改wifi密码
- diskpart 删除磁盘OEM分区 及设置活动分区
- H.266/VVC相关技术学习笔记3:帧内色度预测模式中的DM模式及其在N次会议上相关的提案总结
- odoo 慎用related(计算字段)
- 苹果 开发者账号如下
- JDK 8 JVM性能优化
- for 和 for...in 和 for...of