❶ 求~51单片机的八路抢答器设计程序和原理图,PCB
ORG 0000H
M: MOV P1, #0FEH
MOV P3, #00H
JNB P2.0, C1
JNB P2.1, C2
JNB P2.2, C3
SJMP M
C1: MOV P3, #06H
SJMP S1
C2: MOV P3, #5BH
SJMP S1
C3: MOV P3, #4FH
SJMP S1
S1: NOP
SJMP S1
END
这个是我以前做过的三路的抢答器的 你可以稍加改动一下就能实现八路的 我只会这一部分 很久没有接触了 都忘的差不多了
❷ 51单片机4路抢答器,求大神帮我做一个,急需。要求用汇编语言。还要有protues的仿真图!!!
ORG0000H
JMPBEGIN
ORG0030H
TABLE:;共阴极数码管显示代码表
DB3FH,06H,5BH,4FH,66H;01234
DB6DH,7DH,07H,7FH,6fh;56789
DELAY:MOVR5,#20
LOOP4:MOVR6,#50H;延时20X20ms
LOOP5:MOVR7,#100
DJNZR7,$
DJNZR6,LOOP5
DJNZR5,LOOP4
RET
;---------------------------------------
BEGIN:MOVP2,#0FFH;P2口置高电平,准备接收信号
MOVR4,#0
MOVA,R4;R4位标志值送A寄存器
AGAIN:MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP1,A
LOOP1:MOVA,P3;接收p3口的抢答信号
CPLA
JZLOOP1
LOOP2:RRCA;有人抢答信号则逐次移动判断哪一位抢答
INCR4
JNCLOOP2
;********************
MOVA,R4
CJNEA,#5,LOOP3
LOOP3:
JCLOOP4
MOVR4,#0
SJMPLOOP1
LOOP4:
MOVCA,@A+DPTR;找到相应位显示代码
MOVP1,A
LEDDIS:
MOVA,#0FFH
CLRC
LEDDIS1:
RLCA
DJNZR4,LEDDIS1
MOVP0,A
LOOP3:JNBP2.2,BEGIN;若主持人按下复位信号键,则转向主程序
CPLP2.0;若没按复位信号键,则通过p2.2口给出高低信号驱动蜂鸣器
LCALLDELAY;调用延时子程序
SJMPLOOP3;p2.2口反复间隔0.4s变化,驱动蜂鸣器
END
❸ 抢答器电路图
aoe
等级:管理员
文章:3501
积分:5959
门派:少林派
注册:2001年10月10日楼主 QQ
--------------------------------------------------------------------------------
抢答器电路图问的人满多的
特收集一些到这里
21世纪什么最宝贵???
回帖!!!!!
----------------------------------------------
aoe是Age of Empires的缩写,俺的中文网名叫“帝国老手”,大家联系我的话叫我“帝国”就可以了。2006-9-23 3:43:56 USB接口的ISPRO热卖中
aoe
等级:管理员
文章:3501
积分:5959
门派:少林派
注册:2001年10月10日第 2 楼 QQ
--------------------------------------------------------------------------------
在各种知识竞赛,抢答器是少不了的,这里给大家提供一种制作抢答器的方法,有条件的朋友不妨做一个。
这个抢答器由单片机以及外围电路组成,由于采用单片机,使得外围电路非常简单,但是功能并不比一般的抢答器少。
如下图为抢答器的电路原理图,单片机AT90S1200的PB口的PB7~PB2为输入口,接抢答按键开关,当有某个按键按下时,对应口的电位跳低,被单片机检测到并执行相应的程序,比如让数码管显示或者控制音响电路发声等。PD口接数码管,用于显示哪个组抢到,并一数值方式显示出来。PB口的PB0通过电容接到门铃音乐集成电路的触发端,当有某一组抢到时发出声音。电路中,轻触开关SB为复位开关,按下SB,可以让系统复位。当一次抢答完毕以后,只有按下SB,让系统复位,在下一次抢答时,各个组的抢答按键才有用,否则,抢答按键没有作用。
本电路对元件没有什么特殊要求,按照图中标明的型号选用即可。电路中R10的数值由自己定,要求是使音乐片正常工作即可,因为音乐片并不是一直在工作,因此,我在制作时把R10省了,也不怎么样。音乐片采用叮咚门铃音乐片,要注意在音乐片上焊上一个NPN型三极管(三极管在图中我没有画出来),比如9013。注意要在稳压集成电路7805上加上散热片。
21世纪什么最宝贵???
回帖!!!!!
----------------------------------------------
aoe是Age of Empires的缩写,俺的中文网名叫“帝国老手”,大家联系我的话叫我“帝国”就可以了。2006-9-23 3:44:38 PC/MCU/CPLD三合一学习套件
aoe
等级:管理员
文章:3501
积分:5959
门派:少林派
注册:2001年10月10日第 3 楼 QQ
--------------------------------------------------------------------------------
图片
此主题相关图片如下:
此主题相关图片如下:
21世纪什么最宝贵???
回帖!!!!!
----------------------------------------------
aoe是Age of Empires的缩写,俺的中文网名叫“帝国老手”,大家联系我的话叫我“帝国”就可以了。2006-9-23 3:45:27 USB接口的ISPRO热卖中
aoe
等级:管理员
文章:3501
积分:5959
门派:少林派
注册:2001年10月10日第 4 楼 QQ
--------------------------------------------------------------------------------
由触发器构成的改进型抢答器
1.初步了解触发器的基本功能及特点。
2. 熟悉具有接收、保持、输出功能电路的基本分析方法。
3. 掌握触发器应用电路的分析方法。
4. 建立时序逻辑电路的基本概念。
器件:74LS00 1片,双四输入与非门74LS20 2片,按键式开关4个,指示灯(发光二极管)三只、510Ω电阻3个、1SΩ电阻4个、导线若干。
21世纪什么最宝贵???
回帖!!!!!
----------------------------------------------
aoe是Age of Empires的缩写,俺的中文网名叫“帝国老手”,大家联系我的话叫我“帝国”就可以了。2006-9-23 3:49:39 经典串口的ISPRO优惠中
aoe
等级:管理员
文章:3501
积分:5959
门派:少林派
注册:2001年10月10日第 5 楼 QQ
--------------------------------------------------------------------------------
电路图
此主题相关图片如下:
实训电路原理图如图所示。改进型抢答器电路减少了一个输入端,而在每一个输入端增加了两个与非门(图中的门4~门9),该电路作为抢答信号的接收、保持和输出的基本电路。S为手动清零控制开关,S1~S3为抢答按钮开关。
该电路具有如下功能:
(1)开关S作为总清零及允许抢答控制开关(可由主持人控制),当开关S被按下时抢答电路清零,松开后则允许抢答。输入抢答信号由抢答按钮开关S1~S3实现。
(2)若有抢答信号输入(开关S1~S3中的任何一个开关被按下)时,与之对应的指示灯被点亮。此时再按其他任何一个抢答开关均无效,指示灯仍“保持”第一个开关按下时所对应的状态不变。
电路中,6个二输入与非门采用两个74LS00,3个三输入与非门采用74LS20。
21世纪什么最宝贵???
回帖!!!!!
----------------------------------------------
aoe是Age of Empires的缩写,俺的中文网名叫“帝国老手”,大家联系我的话叫我“帝国”就可以了。2006-9-23 3:50:52 PC/MCU/CPLD三合一学习套件
aoe
等级:管理员
文章:3501
积分:5959
门派:少林派
注册:2001年10月10日第 6 楼 QQ
--------------------------------------------------------------------------------
出端的引脚编号。
2)连接电路
按图3.1连接电路。先在实训电路板上插接好IC器件。在插接器件时,要注意IC芯片的豁口方向(都朝左侧),同时要保证IC管脚与插座接触良好,管脚不能弯曲或折断。指示灯的正、负极不能接反。在通电前先用万用表检查各IC的电源接线是否正确。
3)电路调试
首先按抢答器功能进行操作,若电路满足要求,说明电路没有故障。若某些功能不能实现,就要设法查找并排除故障。排除故障可按信息流程的正向(由输入到输出)查找,也可按信息流程逆向(由输出到输入)查找。
例如:当有抢答信号输入时,观察对应指示灯是否点亮,若不亮,可用万用表(逻辑笔)分别测量相关与非门输入、输出端电平状态是否正确,由此检查线路的连接及芯片的好坏。
若抢答开关按下时指示灯亮,松开时又灭掉,说明电路不能保持,此时应检查与非门相互连接是否正确,直至排除全部故障为止。
4)电路功能试验
(1)按下清零开关S后,所有指示灯灭。
(2)选择开关S1~S3中的任何一个开关(如S1)按下,与之对应的指示灯(D1)应被点亮,此时再按其他开关均无效。
(3)按控制开关S,所有指示灯应全部熄灭。
(4)重复(2)和(3)步骤,依次检查各指示灯是否被点亮。
5)电路分析
分析图3.1实训电路,完成表3.1各项内容 ,表中H表示指示灯亮,L表示指示灯灭。如果不能正确分析,可以通过试验检测来完成。
21世纪什么最宝贵???
回帖!!!!!
----------------------------------------------
aoe是Age of Empires的缩写,俺的中文网名叫“帝国老手”,大家联系我的话叫我“帝国”就可以了。2006-9-23 3:51:39 超级51开发板套件,前卫实用超值
aoe
等级:管理员
文章:3501
积分:5959
门派:少林派
注册:2001年10月10日第 7 楼 QQ
--------------------------------------------------------------------------------
功能表
S S3 S2 S1
Q3 Q2 Q1 D3 D2 D1
L H H H
L H H L
L H L H
L L H H
H H H H
H H H L
H H L H
H L H H
21世纪什么最宝贵???
回帖!!!!!
----------------------------------------------
aoe是Age of Empires的缩写,俺的中文网名叫“帝国老手”,大家联系我的话叫我“帝国”就可以了。2006-9-23 3:51:54 经典串口的ISPRO优惠中
aoe
等级:管理员
文章:3501
积分:5959
门派:少林派
注册:2001年10月10日第 8 楼 QQ
--------------------------------------------------------------------------------
实训步骤与要求
1)检测与查阅器件
用数字集成电路测试仪检测所用的集成电路。通过查阅集成电路手册,标出图3.1中各集成电路输入、输实训总结与分析
(1)在第2章的实训(实训2)中,由于电路本身没有保持功能,所以抢答开关必须用手按住不动,指示灯才会点亮,若手松开指示灯就熄灭。这对输入抢答操作十分不便。在本实训中,通过在输入端接入两个首尾交叉连接的双输入与非门(如图3.1所示),解决了这一问题。实验证明,该电路能将输入抢答信号状态“保持”在其输出端不变。比如抢答开关S1按下时,与其连接的与非门5的输出端Q1变为高电平,使与非门1输出低电平,指示灯D1点亮;当开关S1松开后,与非门5的输出状态仍保持高电平不变,指示灯D1仍保持点亮状态。
(2)在图3.1中,将与非门4、5连接构成的电路既有接收功能同时又具有保持功能。在电路中可将与非门4、5连接构成的电路看成一个专门电路(虚框内电路),该电路能接收输入信号并按某种逻辑关系改变输出端状态。在一定条件下,该状态不会发生改变,即“保持”不变。
(3)这类具有接收、保持记忆和输出功能的电路简称为“触发器”。触发器有多种不同的功能和不同的电路形式。掌握触发器的电路原理、功能与电路特点是本章所要学习的主要内容。目前,各种触发器大多通过集成电路来实现。对这类集成电路的内部情况我们不必十分关心,因为我们学习数字电子技术课程的目的不是设计集成电路的内部电路。学习时,我们只需将集成电路触发器视为一个整体,掌握它所具有的功能、特点等外部特性,使我们能合理选择并正确使用各种集成电路触发器。
21世纪什么最宝贵???
回帖!!!!!
----------------------------------------------
aoe是Age of Empires的缩写,俺的中文网名叫“帝国老手”,大家联系我的话叫我“帝国”就可以了。2006-9-23 3:52:14 经典串口的ISPRO优惠中
aoe
等级:管理员
文章:3501
积分:5959
门派:少林派
注册:2001年10月10日第 9 楼 QQ
--------------------------------------------------------------------------------
一款八路抢答器
<script language="javascript" src="/AD/200608/4.js"></script>
本文介绍一款简单易制的八路抢答器电路,它由两只四D锁存器集成电路CD4042等组成。
一、工作原理
该八路抢答器电路原理如附图所示。IC1和IC2为四D锁存器CD4042,其D0、D1、D2、D3为输入端,Q0、Q1、Q2、Q3为输出端,POL为极性控制端,CP为脉冲输入端。当把POL接低电平时,时钟脉冲的上升沿到来时,电路锁存;时钟脉冲的下降沿到来时,电路传输数据。
K1~K8为抢答键,LEDl~LED8用作识别抢答键的显示。抢答开始前,CP端经R9接地为低电平,IC1、IC2的输入端D0~D3接地都置低电平,其Q0~Q3输出端也都输出低电平,LEDI~LED8不亮。抢答开始后,假设K1键最先被按下,IC1的D0端输入高电平,IC1的输出端Q0也输出高电平,发光二极管LED1点亮,指示第一路按键抢答成功。此时,R9两端产生压降,使IC1和IC2的脉冲输入端CP端都产生一个上升沿脉冲,此脉冲使IC1、IC2在K1键按下后的瞬间都产生了锁存作用,即:将锁存前IC1、IC2的输入端D0~D3的数据(ICI的D0端为高电平,其余都为低电平)传输到八个输出端Q0~Q3并锁存,即IC1的Q0端为高电平,其余都为低电平。此时若再按下K2~K8,电路将不再作任何反应,从而识别出八个抢答键谁最先被按下。
一次抢答结束后,主持人需按一下复位键K9,LED1熄灭,IC1、IC2复位,即可开始第二次抢答。
该抢答器的抢答键个数可以很方便地扩展,只要增加一只CD4042,并把其CP端接到R9的上端即可。
二、元器件选择
LEDl~LED8为红色发光二极管,K1~K9为轻触开关。
21世纪什么最宝贵???
回帖!!!!!
----------------------------------------------
aoe是Age of Empires的缩写,俺的中文网名叫“帝国老手”,大家联系我的话叫我“帝国”就可以了。2006-9-23 3:55:30 超级51开发板套件,前卫实用超值
aoe
等级:管理员
文章:3501
积分:5959
门派:少林派
注册:2001年10月10日第 10 楼 QQ
--------------------------------------------------------------------------------
此主题相关图片如下:
21世纪什么最宝贵???
回帖!!!!!
----------------------------------------------
aoe是Age of Empires的缩写,俺的中文网名叫“帝国老手”,大家联系我的话叫我“帝国”就可以了。2006-9-23 3:58:07 USB接口的ISPRO热卖中
❹ 求51单片机设定8人计时抢答器,要电路原理图和c语言程序
还要画图,分数太少了
❺ 51单片机做六人抢答器
#include<reg51.h>明斗
#define uchar unsigned char
#define uint unsigned int
void delay(uchar x);
void Js_Scan1(void);
void Js_Scan2(void);
int flag=0,i;
int code LED_Num[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d};
void main()
{
EA=1;
ET0=1;
EX0=1;
while(1)
{
Js_Scan1();
flag=0;
}
}
void key() interrupt 0 using 0
{
int x;
x=P2;
if(x==0xfe&&flag==0)
{
i=0;
Js_Scan2();
flag=1;
}
if(x==0xfd&&flag==0)
{
i=1;
Js_Scan2();
flag=1;
}
if(x==0xfb&&flag==0)
{
i=2;
Js_Scan2();
flag=1;
}
if(x==0xf7&&flag==0)
{
i=3;
Js_Scan2();
flag=1;
}
if(x==0xef&&flag==0)
{
i=4;
Js_Scan2();
flag=1;
}
if(x==0xdf&&flag==0)
{
i=5;
Js_Scan2();
flag=1;
}
}
void Js_Scan1() //数码管扫描函数
{
P1=0xfe;P0=LED_Num[0];delay(100);
P1=0xfd;P0=LED_Num[1];delay(100);
P1=0xfb;P0=LED_Num[2];delay(100);
P1=0xf7;P0=LED_Num[3];delay(100);
P1=0xef;P0=LED_Num[4];delay(100);
P1=0xdf;P0=LED_Num[5];delay(100);
}
void Js_Scan2() //数码管扫描函数
{
uchar j; //定纤袭义j数据类型
for(j=0;j<5;j++) //建立循环
{
P1=0x00;P0=LED_Num[i];delay(1);
}
}
void delay(uchar x) //延时函数,防止数码管显示不稳定
{
uchar k;
while(x--)
for(k=0;k<激竖磨125;k++);
}
❻ AT89S51单片机八路抢答器工作原理
基于MCS-51系列单片机AT89S51的八路抢答器
基于MCS-51系列单片机AT89S51的八路抢答器
前言
随着现代电子电路的快速发展,以及电子行业对现有电子工程技术的不断需求,特别是对实际操作实践的电子人才的需求越来越多,所以加强学生动手能力、重视实践应该是电子发展需求的必然趋向。实践动手能力的培养是一种综合能力,这种能力当然是在一定难度的前提下完成的,通过一定数量的实践才能逐步形成的。因此在培养实践能力的同时,要通过实践来不断的发现问题和解决问题的途径和方法,从而提高实践能力。
近年来,随着单片机档次的不断提高,功能的不断完善,其应用日趋成熟、应用领域日趋扩大,特别是工业测控、尖端武器和日用家电等领域更是因为有了单片机而生辉增色。单片机应用技术已成为一项新的工程应用技术。本次实习设计的题目为基于单片机的抢答器。
在本次的课程设计中我主要负责了该系统的印制电路板PCB的制作
一、方案论证
方案一:系统各部分采用中小规模集成数字电路,用机械开关按钮作为控制开关,完成抢答输入信号的触发。该方案的特点是中小规模集成电路应用技术成熟,性能可靠,能方便地完成选手抢答的基本功能,但是由于系统功能要求较高,所以电路连接集成电路相对较多,而且过于复杂,并且制作过程工序比较烦琐,使用不太方便。
方案二:该系统采用MCS-51系列单片机AT89S51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改性。CS-51单片机特点如下:
1>可靠性好:单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以烧写在ROM许多信号通道都在同一芯片,因此可靠性高。
2>易扩充:单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统
3>控制功能强:单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。原理框图如1-1所示;
图1-1
方案比较及其选用依据,显然方案二比方案一简单的多,不但从性能上优于方案一,而且在使用上及其功能的实现上都较方案一简洁,并且由于单片机具有优越的高集成电路性,使其工作速度更快、效率更高。另外AT89S51单片机采用12MHz的晶振,提高了信号的测量精度,并且使该系统可以通过软件改进来扩张功能。而方案一采用了中小规模集成电路,有其复杂的电路性能,从而可能会使信号的输入输出产生延时及不必要的误差。依此依据选择方案二比较适合。
二、原理分析
1.本电路采用单片机AT89C51作为控制芯片,单片机的P0口外接八个发光二极管,每个发光二极管分别作为八位选手的信号指示灯。并在各个外接电路上并接开关按键,按键另一端接地。发光二极管采用共阳极接法,由于P0口为高电平呈输入状态,当有按键按下时,P0口呈低电平与按键对应的发光二极管满足点亮条件点亮。在程序编程上采用查询,查询P0口P0。0到P0。7的八个端口呈低电平,即查询是哪个选手先按键,然后将选手号码的字节数据送至串行口输出并在数码管上显现出来。
2.蜂鸣器是利用三极管处于开关状态是的导通与截止工作,在三极管导通时蜂鸣器工作,三极管截止时蜂鸣器不工作。三极管采用8550PNP型基极接于P1。2口置其低电平时三极管导通,置其高电平时三极管截止。
3.数码管采用共阳极七段显示,其内部发光二极管为共阳极接高电平,当对应发光二极管一端为低电平时发光二极管点亮,显示的数字或字符由送入的字节数据控制,字节数据的输出采用串形口工作模式0,8位串行字节数据的输出通过RXD端口送出,TXD端用于送出同步移位脉冲,作为外接器件的同步移位信号。数据的发送是在TI=0的情况下,由一写发送缓冲器的指令开始CPU执行完该指令,串行口即将8位数据从RXD端送出,同时TXD端发出同步移位脉冲。8位数据发送完毕后由硬件置位TI=1,通过查询TI位来确定是否发送完一组数据,TI=1表示发送缓冲器已空,当要发送下一组数据时用软件使TI清零,然后即可发送下一组数据。
4.软件设计分析首先在程序的开始为选手设置了一段违规程序,该程序的作用是为了防止选手在主持人没有按下抢答键时,有的选手已经提前抢答了,本次抢答为无效抢答,并有报警和记录下该位选手的选号,做违规处理,如果选手超出了在规定的提前抢答次数,则该选手将被取消以后的抢答资格。如果在主持按下抢答键时再抢答,该次抢答被视为有效抢答,在主持按下回答问题的键时选手就可以在规定的时间内回答问题了
图1-2
<1>选手查询程序:
ORG0000H
START:CLRA
MOVA,#0FFH
MOVP0,A
LOP:JNBP2。4,LP
JNBP0。0,SA1
JNBP0。1,SA2
JNBP0。2,SA3
JNBP0。3,SA4
JNBP0。4,SA5
JNBP0。5,SA6
JNBP0。6,SA7
JNBP0。7,SA8
SJMPLOP
SA1:AJMPSB1
SA2:AJMPSB2
SA3:AJMPSB3
SA4:AJMPSB4
SA5:AJMPSB5
SA6:AJMPSB6
SA7:AJMPSB7
SA8:AJMPSB8
LP:MOVR0,#9
LOP1:LCALLLED
LCALLDEL
JNBP0。0,SIP1
JNBP0。1,SIP2
JNBP0。2,SIP3
JNBP0。3,SIP4
JNBP0。4,SIP5
JNBP0。5,SIP6
JNBP0。6,SIP7
JNBP0。7,SIP8
DECR0
CJNER0,#0,LOP1
MOVR0,#0
LCALLLED
LCALLDEL
SJMPLOP
SIP1:AJMPDIP1
SIP2:AJMPDIP2
SIP3:AJMPDIP3
SIP4:AJMPDIP4
SIP5:AJMPDIP5
SIP6:AJMPDIP6
SIP7:AJMPDIP7
SIP8:AJMPDIP8
SB1:MOVR2,#1
LCALLLED1
LCALLDE
SJMPLP1
SB2:MOVR2,#2
LCALLLED1
LCALLDE
SJMPLP1
SB3:MOVR2,#3
LCALLLED1
LCALLDE
SJMPLP1
SB4:MOVR2,#4
LCALLLED1
LCALLDE
SJMPLP1
SB5:MOVR2,#5
LCALLLED1
LCALLDE
SJMPLP1
SB6:MOVR2,#6
LCALLLED1
LCALLDE
SJMPLP1
SB7:MOVR2,#7
LCALLLED1
LCALLDE
SJMPLP1
SB8:MOVR2,#8
LCALLLED1
LCALLDE
SJMPLP1
LP1:JNBP2。4,LOP2
SJMPLP1
DIP1:MOVR2,#1
LCALLLED1
LCALLDE
SJMPLH1
DIP2:MOVR2,#2
LCALLLED1
LCALLDE
SJMPLH1
DIP3:MOVR2,#3
LCALLLED1
LCALLDE
SJMPLH1
DIP4:MOVR2,#4
LCALLLED1
LCALLDE
SJMPLH1
DIP5:MOVR2,#5
LCALLLED1
LCALLDE
SJMPLH1
DIP6:MOVR2,#6
LCALLLED1
LCALLDE
SJMPLH1
DIP7:MOVR2,#7
LCALLLED1
LCALLDE
SJMPLH1
DIP8:MOVR2,#8
LCALLLED1
LCALLDE
SJMPLH1
LH1:JNBP2。4,LOOP
SJMPLH1
LOP2:MOVA,#11H
MOVSBUF,A
JNBTI,$
CLRTI
LCALLDEL
AJMPLOP
<2>串行输出程序:
该部分程序的设计利用了单片机的串行模式0输出,该输出方式占用IO口少。可以省去许多IO口作为功能的扩展使用。在该模式下,我们采用了输出查询的方式,就是要借助发送标志TI,当程序执行到发送标志位时,查询其标志位TI的值,只要TI的值是0程序就继续查询,知道查询到TI为1时才结束,然后在进入下一组数据的发送。由于串行输出时送进去的数都是十进制数,以致计算机不能识别,所以还要把送进去的十进制数转化成而进制数,这样才能输出。因此在输出程序前必须有拆字程序,把原来送进去的十进制数转化成二进制数,然后在输出并通过数码管显示出来。但是如果在显示选手选号与显示选手回答问题所用的到计同用一段串行输出程序时就会造成程序的混乱,所以在此处设计了两段初始值不同的显示程序,从而可能增加了程序的烦琐化。
LED1:MOVA,R2
MOVB,#10
DIVAB
MOVR1,A
MOVR3,B
MOVA,R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSBUF,A
JNBTI,$
CLRTI
MOVA,R3
MOVCA,@A+DPTR
MOVSBUF,A
JNBTI,$
CLRTI
RET。
LED:MOVA,R0
MOVB,#10
DIVAB
MOVR1,A
MOVR3,B
MOVA,R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSBUF,A
JNBTI,$
CLRTI
MOVA,R3
MOVCA,@A+DPTR
MOVSBUF,A
JNBTI,$
CLRTI
RET
DE:CLRP1。2
LCALLDEL01
SETBP1。2
LCALLDEL01
RET
TAB:DB11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H
RET
<3>倒计时程序
该程序为选手回答问题时的30秒倒计时程序,其中前25秒为正常的倒计时,在后5秒倒计时时伴随有报警声,用于提示选手回答问题的剩余时间。如果该选手在正常的倒计时内没有完成问题的回答,那么倒计时将被清零。
LOOP:MOVR0,#30
LPP:LCALLLED
LCALLDEL
JNBP2。4,LOP2
DECR0
CJNER0,#5,LPP
MOVR0,#5
LPP1:JNBP2。4,LOP2
LCALLLED
LCALLDE
DECR0
CJNER0,#0,LPP1
MOVR0,#0
LCALLLED
LCALLDEL
LJMPSTART
<4>延时程序
该系统设计了两段延时程序,一段1秒延时,是为了30秒倒计时调用和程序中一秒延时所用;另一段为0。5秒延时,用于报警。程序的设计中报警时间为一秒,但是由于在硬件的设计时只设计了一个按键,这样就会造成连续按键时会使所设定的报警声不断的响,这是设计中不允许的,所以在软件编程时设计了一个0。5秒的延时,被报警时所调用,这样就使报警声能很清楚地区分出来了
DEL:MOVR6,#20DEL01:MOVR6,#10
DEL1:MOVR5,#100DEL11:MOVR5,#100
DEL2:MOVR4,#250DEL21:MOVR4,#250
DJNZR4,$DJNZR4,$
DJNZR5,DEL2DJNZR5,DEL21
DJNZR6,DEL1DJNZR6,DEL11
RETRET
<5>报警程序
该段程序主要是用于本系统中的所有报警使用,报警时间延时为1秒钟。
DE:CLRP1。2
LCALLDEL01
SETBP1。2
LCALLDEL01
RET
三、制作过程
五、参考文献
曾峰,巩海洪,曾波,电子工业出版社,印刷电路板(PCB)设计与制作2005.8
梅海凤,王艳秋,张军,汪毓铎,清华大学出版社单片机原理与接口技术2004.2
北京交通大学出版社
第二个文献:基于51单片机八路抢答器设计程序及电路图
基于51单片机八路抢答器设计程序及电路图
说明:本人的这个设计改进后解决了前一个版本中1号抢答优先的问题,并增加了锦囊的设置,当参赛选手在回答问题时要求使用锦囊,则主持人按下抢答开始键,计时重新开始。
;八路抢答器电路请看下图是用ps仿真的,已经测试成功
<单片机八路抢答器电路图>
;============================================================
;================单片机八路抢答器程序=====================
;================51hei=======================
;================2008年5月=======================
;============================================================
OKEQU20H;抢答开始标志位
RINGEQU22H;响铃标志位
ORG0000H
AJMPMAIN
ORG0003H
AJMPINT0SUB
ORG000BH
AJMPT0INT
ORG0013H
AJMPINT1SUB
ORG001BH
AJMPT1INT
ORG0040H
MAIN:MOVR1,#30;初设抢答时间为30s
MOVR2,#60;初设答题时间为60s
MOVTMOD,#11H;设置未定时器/模式1
MOVTH0,#0F0H
MOVTL0,#0FFH;越高发声频率越高,越尖
MOVTH1,#3CH
MOVTL1,#0B0H;50ms为一次溢出中断
SETBEA
SETBET0
SETBET1
SETBEX0
SETBEX1;允许四个中断,T0/T1/INT0/INT1
CLROK
CLRRING
SETBTR1
SETBTR0;一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了
;=====查询程序=====
START:MOVR5,#0BH
MOVR4,#0BH
MOVR3,#0BH
ACALLDISPLAY;未开始抢答时候显示FFF
JBP3.0,NEXT;ddddddd
ACALLDELAY
JBP3.0,NEXT;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询
ACALLBARK;按键发声
MOVA,R1
MOVR6,A;送R1->R6,因为R1中保存了抢答时间
SETBOK;抢答标志位,用于COUNT只程序中判断是否查询抢答
MOVR7,#01H;读抢答键数据信号标志,这里表示只读一次有用信号
MOVR3,#0AH;抢答只显示计时,灭号数
AJMPCOUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面
NEXT:JNBP1.0,FALSE1
JNBP1.1,FALSE2
JNBP1.2,FALSE3
JNBP1.3,FALSE4
JNBP1.4,FALSE5
JNBP1.5,FALSE6
JNBP1.6,FALSE7
JNBP1.7,FALSE8
AJMPSTART
;=====非法抢答处理程序=====
FALSE1:MOVR3,#01H
AJMPERROR
FALSE2:MOVR3,#02H
AJMPERROR
FALSE3:MOVR3,#03H
AJMPERROR
FALSE4:MOVR3,#04H
AJMPERROR
FALSE5:MOVR3,#05H
AJMPERROR
FALSE6:MOVR3,#06H
AJMPERROR
FALSE7:MOVR3,#07H
AJMPERROR
FALSE8:MOVR3,#08H
AJMPERROR
;=====INT0(抢答时间R1调整程序)=====
INT0SUB:MOVA,R1
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
ACALLDISPLAY;先在两个时间LED上显示R1
JNBP3.4,INC0;P3.4为+1s键,如按下跳到INCO
JNBP3.5,DEC0;P3.5为-1s键,如按下跳到DECO
JNBP3.1,BACK0;P3.1为确定键,如按下跳到BACKO
AJMPINT0SUB
INC0:MOVA,R1
CJNEA,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。
MOVR1,#00H
ACALLDELAY1
AJMPINT0SUB
ADD0:INCR1
ACALLDELAY1
AJMPINT0SUB
DEC0:MOVA,R1
JZSETR1;如果R1为0,R1就置99,
DECR1
ACALLDELAY1
AJMPINT0SUB
SETR1:MOVR1,#63H
ACALLDELAY1
AJMPINT0SUB
BACK0:RETI
;=====INT1(回答时间R2调整程序)=====
INT1SUB:MOVA,R2
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
ACALLDISPLAY
JNBP3.4,INC1
JNBP3.5,DEC1
JNBP3.1,BACK1
AJMPINT1SUB
INC1:MOVA,R2
CJNEA,#63H,ADD1
MOVR2,#00H
ACALLDELAY1
AJMPINT1SUB
ADD1:INCR2
ACALLDELAY1
AJMPINT1SUB
DEC1:MOVA,R2
JZSETR2
DECR2
ACALLDELAY1
AJMPINT1SUB
SETR2:MOVR2,#63H
ACALLDELAY1
AJMPINT1SUB
BACK1:RETI
;=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)=====
REPEAT:MOVA,R2;使用锦囊时重新计时
MOVR6,A
CLRRING
COUNT:MOVR0,#00H;重置定时器中断次数
MOVTH1,#3CH
MOVTL1,#0B0H;重置定时器
RECOUNT:MOVA,R6;R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6
MOVB,#0AH
DIVAB;除十分出个位/十位
MOV30H,A;十位存于(30H)
MOV31H,B;个位存于(31H)
MOVR5,30H;取十位
MOVR4,31H;取个位
MOVA,R6
SUBBA,#07H
JNCLARGER;大于5s跳到LARGER,小于等于5s会提醒
MOVA,R0
CJNEA,#0AH,FULL;1s中0.5s向下运行
CLRRING
AJMPCHECK
FULL:CJNEA,#14H,CHECK;下面是1s的情况,响并显示号数并清R0,重新计
SETBRING
MOVA,R6
JZQUIT;计时完毕
MOVR0,#00H
DECR6;一秒标志减1
AJMPCHECK
LARGER:MOVA,R0
CJNEA,#14H,CHECK;如果1s向下运行,否者跳到查"停/显示"
DECR6;计时一秒R6自动减1
MOVR0,#00H
CHECK:JNBP3.1,QUIT;如按下停止键退出
JNBOK,CHECKK;只在回答倒计时才有效
AJMPNEXTT
CHECKK:JNBP3.0,REPEAT;判断是否使用锦囊
NEXTT:ACALLDISPLAY
JBOK,ACCOUT;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)
AJMPRECOUNT
ACCOUT:
MOVA,36H
JNBACC.0,TRUE1
JNBACC.1,TRUE2
JNBACC.2,TRUE3
JNBACC.3,TRUE4
JNBACC.4,TRUE5
JNBACC.5,TRUE6
JNBACC.6,TZ1
JNBACC.7,TZ2
AJMPRECOUNT
TZ1:JMPTRUE7
TZ2:JMPTRUE8
QUIT:CLROK;如果按下了"停止键"执行的程序
CLRRING
AJMPSTART
;=====正常抢答处理程序=====
TRUE1:ACALLBARK
MOVA,R2
MOVR6,A;抢答时间R2送R6
MOVR3,#01H
CLROK;因为答题的计时不再查询抢答,所以就锁了抢答
AJMPCOUNT
TRUE2:ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#02H
CLROK
AJMPCOUNT
TRUE3:ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#03H
CLROK
AJMPCOUNT
TRUE4:ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#04H
CLROK
AJMPCOUNT
TRUE5:ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#05H
CLROK
AJMPCOUNT
TRUE6:ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#06H
CLROK
AJMPCOUNT
TRUE7:ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#07H
CLROK
AJMPCOUNT
TRUE8:ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#08H
CLROK
AJMPCOUNT
;=====犯规抢答程序=====
ERROR:MOVR0,#00H
MOVTH1,#3CH
MOVTL1,#0B0H
MOV34H,R3;犯规号数暂存与(34H)
HERE:MOVA,R0
CJNEA,#06H,FLASH;0.3s向下运行->灭并停响
CLRRING
MOVR3,#0AH
MOVR4,#0AH
MOVR5,#0AH;三灯全灭
AJMPCHECK1
FLASH:CJNEA,#0CH,CHECK1;下面是0.8s的情况,响并显示号数并清R0,重新计
SETBRING
MOVR0,#00H
MOVR3,34H;取回号数
MOVR5,#0BH
MOVR4,#0BH;显示FF和号数
AJMPCHECK1
CHECK1:JNBP3.1,QUIT1
ACALLDISPLAY
AJMPHERE
QUIT1:CLRRING
CLROK
AJMPSTART
;=====显示程序=====
DISPLAY:MOVDPTR,#DAT1;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出,
MOVA,R3
MOVCA,@A+DPTR
MOVP2,#0feH
MOVP0,A
ACALLDELAY2
MOVDPTR,#DAT2
MOVA,R5
MOVCA,@A+DPTR
MOVP2,#0fdH
MOVP0,A
ACALLDELAY2
MOVA,R4
MOVCA,@A+DPTR
MOVP2,#0fbH
MOVP0,A
ACALLDELAY2
RET
DAT1:DB00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
;"灭","1","2","3","4","5","6","7","8","9","灭","F"
DAT2:DB3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
;第一个为零,其他与上相同,因为十位如果为零显示熄灭
;====加减时间延时(起到不会按下就加N个数)======
DELAY1:MOV35H,#08H
LOOP0:ACALLDISPLAY
DJNZ35H,LOOP0
RET
;=====延时4236个机器周期(去抖动用到)=====
DELAY:MOV32H,#12H
LOOP:MOV33H,#0AFH
LOOP1:DJNZ33H,LOOP1
DJNZ32H,LOOP
RET
;=====延时4236个机器周期(显示用到)=====
DELAY2:MOV32H,#43H
LOOP3:MOV33H,#1EH
MOVA,R7;每隔60~70个机器周期读一次P1口,全为1时为无效数据,继续读,有一个不为1时,转到正常抢答处理
JNZAAAA1;没读到有效数据时继续转到AAAA1
LOOP2:DJNZ33H,LOOP2
DJNZ32H,LOOP3
RET
;=====读抢答按键数据口程序=====
;由于在读抢答数据口的时候,单片机首先进入倒计时程序,再调用显示程序,最后才检测按键口
;然而在检测按键口时动态扫描要调用三次(4ms)延时程序.这样就会导致读数据口出现滞后,造成1号优先最高.8号最低.
;故采用在延时子程序中加了读数据口程序.保证了灵敏度和可靠性
AAAA1:MOVA,P1
CJNEA,#0FFH,AA1;当不全为1时的数据为有效数据
AA0:MOV36H,A;将有效数据送到36H暂存
AJMPLOOP2
AA1:DECR7
AJMPAA0
;=====发声程序=====
BARK:SETBRING
ACALLDELAY1
ACALLDELAY1
CLRRING;按键发声
RET
;=====TO溢出中断(响铃程序)=====
T0INT:MOVTH0,#0ECH
MOVTL0,#0FFH
JNBRING,OUT;
CPLP3.6;RING标志位为1时候P3.6口不短取反使喇叭发出一定频率的声音
OUT:RETI
;=====T1溢出中断(计时程序)=====
T1INT:MOVTH1,#3CH
MOVTL1,#0B0H
INCR0
RETI
仅供参考。
❼ 求四路抢答器电路原理图
原理图:
工作原理
抢答器由74LS148、74LS279、74LS48组成,LED显示器 开始时,当支持人按钮还未按是,CLR为0,所以输出Q1~Q4为0;
放光二极管全为灭的,当主持人按钮按下时CLR为1,可以输入,谁先抢答,相应的谁的灯亮,利用74LS279和74LS148输出的是cp等于0,锁存其他的,不能使其他的输出。
利用51单片机建立四路抢答器
单片机,当然不只是51,51单片机是一种稍通用型的单片机,通过I/O口的定义,可以实现多种控制功能。
抢答器,原理:如果为四路,当其中任一路控下后,其他几路即失效,结果为第一次按下的,可以用数码管或是LED灯来显示,当然这里只是讲原理与编程,具体可以根据抢答器路数及显示方式更改程序即可。
源程序如下:
<div class="blockcode"><blockquote>/*用的是AT89S52开发板,独立按键接口如下,就用这四路。先按下的用LED灯来显示,对应第一个到第四个LED灯,其他再按无效,如果想再次实现,可手动复位单片机*/
#include <reg52.h>
sbit key1=P3^0; //定义按键,根据需要连接线路,如独立按键(4路)
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
/*void delay(unsigned int cnt) //如果有抖动或是干扰,可以用个小延时去抖
{
while(--cnt);
}*/
void main()
{
bit Flag;
while(!Flag)
{
if(!key1)
{
P1=0xFE;
Flag=1;
}
/*LED灯来显示按下的键,第一个灯,我这里是8位LED灯,即:0111 1111,反过来读数为:1111 1110 即:0xFE *,P1口对应LED灯,给P1赋值*/
else if(!key2)
{
P1=0xFD;
Flag=1;
}
//第二个灯亮
else if(!key3)
{P1=0xFB;Flag=1;}
//第三个灯亮
else if(!key4)
{
P1=0xF7;
Flag=1;
}
//第四个灯亮,意味着第四路首先按下
}
while(Flag); //可以再加个I/O,控制Flag,这样初始化,继续抢答,还可以设计按下时的声音
}
❽ 求四路智能竞赛抢答器的设计电路
声光显示铅迟智力悔激梁竞赛抢答器:
四路智力竞赛抢答器
http://www.51hei.com/mcu/568.html
智力竞赛抢答器系统介绍
http://www.jzd21.com/Cpzs/JZD010/JZD010_Xtjs/JZD010_Xtjs.htm
声光显示智力竞赛抢答器资料碧运下载网页:
http://www.elecfans.com/soft/courseware/2008/2008120112584.html
供你参考
❾ 哪位大神有八路抢答器的keil做的c51单片机的源程序,和电路图麻烦分享下。
#include<reg51.h>
#defineucharunsignedchar
uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
sbitrstkey=P2^2;
sbitspeaker=P2^0;
voiddelay()//延时约400毫秒
{
uchari,j;
for(i=0;i<200;i++)
for(j=0;j<250;j++);
}
main()
{
uchari,key;
P2=0xff;
while(1)
{
i=0;
P1=table[i];
while(1)
{
key=P3;
if(key!=0)break;
}
switch(key)
{
case0x01:i=1;break;
case0x02:i=2;break;
case0x04:i=3;break;
case0x08:i=4;break;
case0x10:i=5;break;
case0x20:i=6;break;
case0x40:i=7;break;
case0x80:i=8;break;
default:break;
}
P1=table[i];//显示按下抢答器的号
P0=key;//显示按下键号的LED
while(1)
{
if(rstkey==0)break;//主持人按下复位键则重新开始
speaker=~speaker;//否则蜂鸣器报警
delay();
}
}
}
❿ 求51单片机的8路抢答器,在普中开发板上实现
单片机源程序如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define WHO P0
sbit player1=P1^0;
sbit player2=P1^1;
sbit player3=P1^2;
sbit player4=P1^3;
sbit Ensure=P3^7;
sbit beep=P1^6;
sbit LSA=P3^2;
sbit LSB=P3^3;
sbit LSC=P3^4;
uchar state=0;
uchar ssec=0;
uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar OUT[]={0x71,0x77,0x38,0x38};
void delay(uint time)
{
uint x,y ;
for(x=time;x>0;x--)
for(y=130;y>0;y--);
}
void Delay2(uint i)
{
while(i--);
}
void Show(uchar content[])
{
uchar i;
for(i=0;i<4;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位
}
P2=content[i];//发送段码
Delay2(100); //间隔一段时间扫描
P2=0x00;//消隐
}
}
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0D8;
TL0 = 0x0F0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main()
{
Ensure=1;
while(1)
{
if(player1==0) //玩家1进入抢答状态
{
delay(10); //延时,按键消抖
if(player1==0) //再次判断是否进入抢答状态
{
if(state==0) //前方无人抢答状态
{
InitTimer0();
state=1; //将抢答状态置为1,防止其他玩家抢答
while(!player1) //抢答成功,蜂鸣器发声
{
beep=~beep;
delay(1);
}
WHO=table[1]; //数码管显示抢答成功的玩家编号
}
}
}
if(player2==0) //以下结构类似于玩家1
{
delay(10);
if(player2==0)
{
if(state==0)
{
InitTimer0();
state=1;
while(!player2)
{
beep=~beep;
delay(1);
}
WHO=table[2];
}
}
}
if(player3==0)
{
delay(10);
if(player3==0)
{
if(state==0)
{
InitTimer0();
state=1;
while(!player3)
{
beep=~beep;
delay(1);
}
WHO=table[3];
}
}
}
if(player4==0)
{
delay(10);
if(player4==0)
{
if(state==0)
{
InitTimer0();
state=1;
while(!player4)
{
beep=~beep;
delay(1);
}
WHO=table[4];
}
}
}
}
}
void Timer0() interrupt 1
{
TH0=(65536-45872)/255; //给定时器赋初值,定时50ms
TL0=(65536-45872)%255;
ssec++;
if(Ensure)
{
if(ssec>=100) //5s
{
EA=0;
while(1)
Show(OUT);
}
}
else
{
delay(10);
if(Ensure==0)
{
while(!Ensure);
Ensure=0;
if(ssec>=100)
{
EA=0;
}
}
}
}