原理图:
工作原理
抢答器由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=0xFBFlag=1}
//第三个灯亮
else if(!key4)
{
P1=0xF7
Flag=1
}
//第四个灯亮,意味着第四路首先按下
}
while(Flag) //可以再加个I/O,控制Flag,这样初始化,继续抢答,还可以设计按下时的声音
}
#include<reg51.h>#defineuint unsigned int
#defineuchar unsigned char
sbitspeaker = P2^7
sbit key0 =P1^0
sbit key1 =P1^1
sbit key2 =P1^2
sbit key3 =P1^3
sbit key4 =P1^4
sbit key5 =P1^5
sbit key6 =P1^6
sbit key7 =P1^7
ucharled[8]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80}
voiddelay_1ms(uint t)
{
uchar m,n
for(m=tm>0m--)
for(n=330n>0n--)
}
bitiskeyinput()//判断是否有按键闭合
{
if((P1 &0xff) ==0xff ) //屏蔽高4位(列线),只检测低4位(行线)
return 0 //没有键闭合,返回0
else
return 1 //有键闭合,返回1
}
ucharkey_identify()//识别键号
{
uchar key
if( key0==0 )key=0
if(key1==0 )key=1
if( key2==0 )key=2
if( key3==0 )key=3
if( key4==0 )key=4
if( key5==0 )key=5
if( key6==0 )key=6
if( key7==0 )key=7
return key//输出键号
}
voidkeyprocess(uchar keynum)
{
uint i
P0 = led[keynum]
i=500
while(i--)
{
speaker = 0
delay_1ms(10)
speaker = 1
}
}
void main()
{
uchar keynum
P0 = 0xFF
while(1)
{
while (!iskeyinput() )//如果没有键,则等待
delay_1ms(10) //去除键抖动
if(iskeyinput() ) //当前有按键,需要识别按键并且等待键盘松开
{
keynum= key_identify()//识别键号
keyprocess(keynum)
while(1)//等待复位
}
}
}
先来个汇编的程序,P1接一个共阳极数码管,P0低4位接4个抢答按键,主持人复位采用单片机复位按钮实现。ORG 0000H
START: MOV A,P0
ORL A,#0F0H
CJNE A,#0FFH,PL0
SJMP START
PL0: LCALL DELAY
MOV A,P0
ORL A,#0F0H
CJNE A,#0FFH,PL1
SJMP START
PL1:JNB ACC.0,K1
JNB ACC.1,K2
JNB ACC.2,K3
JNB ACC.3,K4
LJMP START
K1:MOV P1,#0F9H
SJMP $
K2:MOV P1,#0A4H
SJMP $
K3:MOV P1,#0B0H
SJMP $
K4:MOV P1,#99H
SJMP $
DELAY:MOV R6,#15
DEL2: MOV R7,#200
DJNZ R7,$
DJNZ R6,DEL2
RET
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)