历史上的今天
今天是:2024年10月13日(星期日)
2021年10月13日 | 基于51单片机的八路抢答器设计
2021-10-13 来源:eefocus
一.硬件方案
本设计 利用STC89C52单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间为60秒,倒计时为5秒时蜂鸣器报警,选手抢答成功后显示选手编号以及剩余时间。
主要由51单片机+最小系统+数码管+蜂鸣器+按键模块;如图:

二.设计功能
(1)采用4位数码管设计;下排按键一一对应八位选手。
(2)竖排三个按键,从上到下依次为:开始、暂停、复位。
(3)操作流程:上电后数码管显示“----”当主持人按下“开始”键后,60秒,开始计时,此时,八位选手就可以抢答,如有紧急情况需要停止的话,主持人按“暂停”键就可以,如果有选手抢答成功,数码管显示“1 25”,1表示是1号选手,25表示剩余还25秒,小于5秒时,蜂鸣器响,提示时间快要结束,当为0秒时,此题结束,表示没有任何选手抢答成功,主持人按“复位”键后从新开始。
(4)可以设定时间,在上电后,数码管显示“----”,此时按下1号选手对应的按键,进入时间设定状态,2号选手对应的按键为时间加,3号选手对应的按键为时间减,设定完成后再按1号选手键退出。
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:

(2)Protues仿真图如下:

(3)PCB图如下:

四.软件设计
主程序源码
void main()
{
int djs1=60;
Timer0_init(); //初始化定时器中断
spk=1; //蜂鸣器不响
djs=60; //倒计时赋值
while(1)
{
LOOP1: djs=djs1;
djsxs22(); //LOOP1是标号,显示 - --
if(key1==0) //在定时器运行状态下,key1==0 则说明1号选手按下按键
{
delayms(3);
if(key1==0)
{
while(!key1); //去除按键抖动后,重新在判断,是否确实按下
djs=60;
while(1)
{
TR0=0; //定时器停止
djsxs();
if(key2==0) //复位按下按下
{
delayms(8); //去除抖动
if(key2==0) //再次判断是否按下复位按键
{
do
{
while(!key2); //如果按下复位键,则回到- --状态
delayms(5);
}
while(key2!=1);
djs++;
djs1=djs;
}
}
if(key3==0) //复位按下按下
{
delayms(8); //去除抖动
if(key3==0) //再次判断是否按下复位按键
{
do
{
while(!key3); //如果按下复位键,则回到- --状态
delayms(5);
}
while(key3!=1);
djs--;
djs1=djs;
}
}
if(key1==0) //复位按下按下
{
delayms(3); //去除抖动
if(key1==0) //再次判断是否按下复位按键
{
while(!key1); //如果按下复位键,则回到- --状态
goto LOOP1; //goto语句,回到loop1表号处
}
}
}
}
}
if(keyks==0)
{
//spk=0;
delayms(3); //去除按键抖动
if(keyks==0)
{
while(!keyks); //以上表示按下开始按键
//spk=1; //蜂鸣器不响
TR0=1; //启动定时器 开始倒计时
while(1)
{
djsxs();
if(keytz==0)
{
delayms(3); //此处表示出去抖动, 以后不一一标出
if(keytz==0)
{
while(!keytz); //以上表示按下停止按键后
{
TR0=0; //定时器停止
flag=0;//
spk=1;
}
}
}
if(keyks==0)
{
//spk=0;
delayms(3);
if(keyks==0)
{
while(!keyks); //以上表示按下清楚按键后
//spk=1; //蜂鸣器不响
TR0=1; //定时器启动
}
}
.......
}
}
}
}
}
}
上一篇:基于51单片机的脉搏体温监测仪
下一篇:基于51单片机的简易计算器设计
史海拾趣
|
准备学一学pcb高速板的布线和仿真,但是遇到很多问题,各位也许能帮上忙的哈; 现在什么仿真软件对原理图和pcb板的仿真最好呢?因为我一直用的portell99se,它的仿真功能太有限了,有没与一个软件能够将protell做的pcb文件仿真的呢?… 查看全部问答> |
|
开始学windows驱动开发有必要学ddk吗?还是直接学wdm? 现在还什么都不懂。只知道wdm是微软新的驱动开发方法,直接学wdm可以吗?用不用学ddk? 我看《Windows驱动开发技术详解》ddk和wdm好像都讲,而《寒江独钓》似乎只讲了wdm,用哪个做主要教材学习好?… 查看全部问答> |
|
各位大侠,小弟不才,问个简单问题:利用GPRS模块在Linux系统拨号上网只需要接口(比如串口)的驱动,而不需要GPRS本身的驱动吗?还是Linux系统自带这个驱动。… 查看全部问答> |
|
在交换机上移植了ucd-snmp,现在在pc上可以通过mib-browser查看到大部分信息,但是遇到以下两个问题: 1.pc上的trap reciever接收不到交换机的trap,trap如何出发? 2.rmon已经加入代码编译,但是通过mib-browser查看rmon节点为“unsupported OID ...… 查看全部问答> |
|
我写了个用ad采样程序,用于采样交流电压,我发现每次程序运行后的第一个采样数据是错误的。例如: samples矩阵用于存放采样的结果值 samples[0]=390.3 samples[1]=40.5 samples[2]=63.4 samples[3]=78.8 。。。。 第一个采样点samples[0]是 ...… 查看全部问答> |
|
TCPMP 界面怎么样 修改才变得漂亮呀?各位大侠帮忙指点,或者有该方案的 可以私聊 QQ:251078251 或MSN:kingdy-huang@hotmail.com… 查看全部问答> |
|
winCE5.0编译错误,生成不了nk.bin文件。在build.log文件中觉得是这两个地方的问题 NMAKE : U1073: don\'t know how to make \'D:\\WINCE500\\platform\\BVDMAIN\\lib\\ARMV4I\\retail\\drvlib.lib\' Stop. NMAKE.EXE -i ...… 查看全部问答> |




