目录
- 基于51单片机的八路抢答器设计
- 1、主要功能
- 2、仿真图
- 3、测试图
- 4、程序源码
- 5、资源获取
基于51单片机的八路抢答器设计
1、主要功能
利用STC89C52单片机及外围接口实现的抢答系统;在抢答过程中,只有启动抢答后才有效,如果在开始抢答前抢答为无效;抢答限定时间为60秒,倒计时为5秒时蜂鸣器报警,选手抢答成功后显示选手编号以及剩余时间。
2、仿真图
3、测试图
当选手6抢答后,数码管会显示6号选手抢答成功。
4、程序源码
#include<reg51.h>
#include<intrins.h>
sbit smg1=P2^4;
sbit smg2=P2^6;
sbit smg3=P2^7;
sbit smg4=P2^5;
sbit keyks=P2^2;
sbit keytz=P2^1;
sbit keyqc=P2^0;
sbit key1=P1^4;
sbit key2=P1^5;
sbit key3=P1^6;
sbit key4=P1^7;
sbit key5=P3^4;
sbit key6=P3^5;
sbit key7=P3^6;
sbit key8=P3^7;
sbit spk=P1^0;
int djs=60,js=0;
unsigned char flag=0;
int table[]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7,0x80};
void delayms(int x)
{
char i;
while(x--)
{
for(i=500;i>0;i--);
}
}
void Timer0_init()
{
js=0;
TMOD=0x01;
TH0=60;
TL0=176;
ET0=1;
EA=1;
}
void timer0() interrupt 1 using 1
{
TF0=0;
TH0=60;
TL0=176;
js++;
if(flag==1)
{
if(js<8)
spk=0;
else spk=1;
}
if(js==20)
{ js=0;
djs--;
}
}
void djsxs()
{ int b1,b2;
b1=djs/10;
b2=djs%10;
P0=table[b1];
smg2=0;
delayms(3);
smg2=1;
P0=table[b2];
smg3=0;
delayms(3);
smg3=1;
}
void djsxs30()
{
P0=0x80;
smg4=0;
delayms(3);
smg4=1;
}
void djsxs22()
{
P0=0x80;
smg1=0;
delayms(3);
smg1=1;
P0=0x80;
smg4=0;
delayms(3);
smg4=1;
P0=0x80;
smg2=0;
delayms(3);
smg2=1;
P0=0x80;
smg3=0;
delayms(3);
smg3=1;
}
void djsxs1()
{
P0=table[1];
smg1=0;
delayms(3);
smg1=1;
}
void djsxs2()
{
P0=table[2];
smg1=0;
delayms(3);
smg1=1;
}
void djsxs3()
{
P0=table[3];
smg1=0;
delayms(3);
smg1=1;
}
void djsxs4()
{
P0=table[4];
smg1=0;
delayms(3);
smg1=1;
}
void djsxs5()
{
P0=table[5];
smg1=0;
delayms(3);
smg1=1;
}
void djsxs6()
{
P0=table[6];
smg1=0;
delayms(3);
smg1=1;
}
void djsxs7()
{
P0=table[7];
smg1=0;
delayms(3);
smg1=1;
}
void djsxs8()
{
P0=table[8];
smg1=0;
delayms(3);
smg1=1;
}
void main()
{
int djs1=60;
Timer0_init();
spk=1;
djs=60;
while(1)
{
LOOP1: djs=djs1;
djsxs22();
if(key1==0)
{
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;
}
}
}
}
}
if(keyks==0)
{
delayms(3);
if(keyks==0)
{
while(!keyks);
TR0=1;
while(1)
{
djsxs();
if(keytz==0)
{
delayms(3);
if(keytz==0)
{
while(!keytz);
{
TR0=0;
flag=0;
spk=1;
}
}
}
if(keyks==0)
{
delayms(3);
if(keyks==0)
{
while(!keyks);
TR0=1;
}
}
if((key1==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key1==0)
{
while(!key1);
{
spk=1;
flag=0;
}
while(1)
{
TR0=0;
djsxs1();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if((key2==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key2==0)
{
while(!key2);
{
spk=1;
flag=0;
}
while(1)
{
TR0=0;
djsxs2();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if((key3==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key3==0)
{
while(!key3);
{
spk=1;
flag=0;
}
while(1)
{
TR0=0;
djsxs3();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if((key4==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key4==0)
{
while(!key4);
{
spk=1;
flag=0;
}
while(1)
{
TR0=0;
djsxs4();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if((key5==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key5==0)
{
while(!key5);
{
spk=1;
flag=0;
}
while(1)
{
TR0=0;
djsxs5();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if((key6==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key6==0)
{
while(!key6);
{
spk=1;
flag=0;
}
while(1)
{
TR0=0;
djsxs6();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if((key7==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key7==0)
{
while(!key7);
{
spk=1;
flag=0;
}
while(1)
{
TR0=0;
djsxs7();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if((key8==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key8==0)
{
while(!key8);
{
spk=1;
flag=0;
}
while(1)
{
TR0=0;
djsxs8();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if(djs<=5) flag=1;
if(djs==0)
{
flag=0;
spk=1;
while(1)
{
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
spk=1;
goto LOOP1;
}
}
}
}
}
}
}
}
}
5、资源获取
项目的仿真和程序工程已经放在下面公众号里面,可以关注公众号:Kevin的学习站,输入关键字:“051”,就可以获取啦!创作不易,但您的点赞、关注、收藏就是对我最大的鼓励!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)