编号:59973724
类型:共享资源
大小:181.50KB
格式:DOC
上传时间:2020-03-20
上传人:清****
认证信息
个人认证
肖**(实名认证)
河南
IP属地:河南
12
积分
- 关 键 词:
-
8路智能抢答器
8 路智力抢答器
抢答器.doc
- 资源描述:
-
C程序:
#include
#include
#define int unsigned int
#define char unsigned char
void delay1(); //延时1,短时间
void delay2(); //延时2,长时间
void inti(); //初始化
void xianshi(); //回答显示
void zcqiangda(); //正常抢答
void kaishiqd(); //开始抢答
void fgxianshi(); //犯规显示
void fgqiangda(); //犯规抢答
void tzxianshi(); // 停止键按下程序
void qiangdacg(); //抢答成功
void tiaojiesj(); //判断是否要调节回答时间
void qiangdatj();
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
sbit key6=P1^5;
sbit key7=P1^6;
sbit key8=P1^7;
sbit fmq=P3^6;
sbit kaishi=P3^0;
sbit tingzhi=P3^1;
sbit jiayi=P3^2;
sbit jianyi=P3^3;
sbit hdtiaojie=P3^4;
sbit qdtiaojie=P3^5;
int num[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x71};
int huida,qiangda,tt,aa,hao;
int a,b;
int tiaojie1,tiaojie2;
void main() //主函数
{
inti();
P0=0x71; // 初始显示FFF
fmq=0;
tt=0;
tiaojie1=0;
tiaojie2=0;
huida=0; //初始回答时间0S
qiangda=0; //初始抢答时间20S
while(1)
{
tiaojiesj(); //调节回答时间
qiangdatj(); // 调整抢答时间
}
}
void delay1() //延时1,短时间
{
int i,j;
for(i=0;i<5;i++)
for(j=0;j<100;j++);
}
void delay2() //延时2,长时间
{
int i,j;
for(i=0;i<300;i++)
for(j=0;j<100;j++);
}
void inti() //初始化程序
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR0=1;
TR1=1;
ET1=1;
IT1=1;
EX1=1;
IT0=1;
EX0=1;
PT0=1;
PT1=1;
IE0=1;
ET0=1;
EA=1;
}
void timer0(void) interrupt 0 //INT0外部中断,用来调节回答时间加一
{
if(hdtiaojie==0)
{
tiaojie1++;
if(tiaojie1==99)
{
tiaojie1=0;
}
}
if(qdtiaojie==0)
{
tiaojie2++;
if(tiaojie2==99)
{
tiaojie2=0;
}
}
}
void timer1(void) interrupt 1 //T0定时/计数器,用来递减抢答时间
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==20)
{
aa=0;
qiangda--;
if(qiangda<=5)
{
fmq=~(fmq);
delay1();
}
}
}
void timer2(void) interrupt 2 //INT1外部中断,用来调节回答时间减一
{
if(tiaojie2==0)
{
tiaojie2=0;
}
else tiaojie2--;
if(hdtiaojie==0)
{
if(tiaojie1==0)
{
tiaojie1=0;
}
else tiaojie1--;
}
}
void timer3(void) interrupt 3 //T1定时/计数器 ,用来递减回答时间
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
tt++;
if(tt==20)
{
tt=0;
huida--;
if(huida<=5)
{
fmq=~(fmq);
delay1();
}
}
}
void zcqiangda() //正常抢答程序
{
if(key1==0)
{
hao=1;
qiangda=0;
qiangdacg();
}
if(key2==0)
{
hao=2;
qiangda=0;
qiangdacg();
}
if(key3==0)
{
hao=3;
qiangda=0;
qiangdacg();
}
if(key4==0)
{
hao=4;
qiangda=0;
qiangdacg();
}
if(key5==0)
{
hao=5;
qiangda=0;
qiangdacg();
}
if(key6==0)
{
hao=6;
qiangda=0;
qiangdacg();
}
if(key7==0)
{
hao=7;
qiangda=0;
qiangdacg();
}
if(key8==0)
{
hao=8;
qiangda=0;
qiangdacg();
}
}
void xianshi() //回答和回答倒计时显示程序
{
huida=0+tiaojie1;
fmq=1;//蜂鸣器响
delay2();
fmq=0;//蜂鸣器不响,上述3行表提示抢答成功
while(1)
{
tzxianshi(); //回答完成后主持人可直接进入下一次抢答
P2=0x01; //表让第一位数码管显示
P0=num[hao]; //显示抢答成功的号
delay1();
P2=0x02; //一下到之间的表数码管3,4显示时间
a=huida/10;
P0=num[a];
delay1();
P2=0x04;
b=huida%10;
P0=num[b];
delay1();
if(huida==0)
{
while(1)
{
fmq=1;
delay1();
fmq=0;
P2=0x01;
P0=num[hao];
delay1();
P2=0x02;
P0=num[0];
delay1();
P2=0x04;
P0=num[0];
delay1();
tzxianshi(); //回答超时后由主持人控制进入下一次抢答
}
}
}
}
void kaishiqd() //开始抢答和抢答倒计时
{
qiangda=0+tiaojie2;
fmq=1;//蜂鸣器响
delay2();
fmq=0; //蜂鸣器不响,上述3行表提示抢答成功
while(1)
{
P2=0x01; //表让第一位数码管显示
P0=num[10]; //显示F
delay1();
P2=0x02; //一下到之间的表数码管3,4显示时间
a=qiangda/10;
P0=num[a];
delay1();
P2=0x04;
b=qiangda%10;
P0=num[b];
delay1();
if(qiangda==0)
{
while(1)
{
fmq=1;
delay1();
fmq=0;
P2=0x01;
P0=num[10];
delay1();
P2=0x02;
P0=num[0];
delay1();
P2=0x04;
P0=num[0];
delay1();
tzxianshi(); //抢答超时由主持人控制进入下一次抢答
}
}
zcqiangda(); //正常抢答
}
}
void qiangdacg() //抢答成功程序
{
fmq=1;
delay2();
fmq=0;
while(1)
{
P2=0x01; //表让第一位数码管显示
P0=num[hao]; //显示抢答成功的号
delay1();
P2=0x02; //一下到之间的表数码管3,4显示时间
P0=num[10];
delay1();
P2=0x04;
P0=num[10];
delay1();
if(kaishi==0)
{
xianshi();
}
}
}
void fgxianshi() //犯规显示
{
while(1)
{
fmq=1;
delay1();
fmq=0;
P2=0x01;
P0=num[hao];
delay1();
P2=0x02;
P0=num[10];
delay1();
P2=0x04;
P0=num[10];
delay1();
tzxianshi();
}
}
void fgqiangda() //犯规抢答
{
if(key1==0)
{
hao=1;
fgxianshi();
}
if(key2==0)
{
hao=2;
fgxianshi();
}
if(key3==0)
{
hao=3;
fgxianshi();
}
if(key4==0)
{
hao=4;
fgxianshi();
}
if(key5==0)
{
hao=5;
fgxianshi();
}
if(key6==0)
{
hao=6;
fgxianshi();
}
if(key7==0)
{
hao=7;
fgxianshi();
}
if(key8==0)
{
hao=8;
fgxianshi();
}
}
void tzxianshi() //按下停止键程序
{
if(tingzhi==0) //按下停止键
{
huida=0;
while(1)
{
fmq=0;
P2=0x07;
P0=0x71;
tiaojiesj(); //回答时间加一程序
qiangdatj(); //抢答时间加一程序
if(kaishi==0) //按下开始键,与上面的按下停止键2者构成相当于复位效果
{
kaishiqd();//开始抢答和抢答倒计时
}
else
{
fgqiangda(); //犯规抢答
}
}
}
}
void tiaojiesj() //回答时间调整
{
if(hdtiaojie==0) //对回答时间做调整
{
while(1)
{
P2=0x01; //表让第一位数码管显示
P0=num[10]; //显示F
delay1();
P2=0x02; //一下到之间的表数码管3,4显示时间
a=tiaojie1/10;
P0=num[a];
delay1();
P2=0x04;
b=tiaojie1%10;
P0=num[b];
delay1();
qiangdatj();
tzxianshi();
}
}
else
{
if(kaishi==0)
{
kaishiqd();//开始抢答和抢答倒计时
}
else
{
fgqiangda(); //犯规抢答
}
}
}
void qiangdatj() //抢答时间调节
{
if(qdtiaojie==0)
{
while(1)
{
P2=0x01; //表让第一位数码管显示
P0=num[10]; //显示F
delay1();
P2=0x02; //一下到之间的表数码管3,4显示时间
a=tiaojie2/10;
P0=num[a];
delay1();
P2=0x04;
b=tiaojie2%10;
P0=num[b];
delay1();
tiaojiesj();
tzxianshi();
}
}
else
{
if(kaishi==0)
{
kaishiqd();//开始抢答和抢答倒计时
}
else
{
fgqiangda(); //犯规抢答
}
}
}
proteus仿真原理图:
功能:P3^0开始键用按键,p3^1停止键用按键,
P3^2加一键用按键 P3^3减一键用按键
P3^4回答时间调整键用开关,P3^5抢答时间调整键用开关,
****提示:用户使用前必须设置回答时间和抢答时间,因为初始时间都为0
设置方法:主持人可根据现场情况调解选手回答时间和抢答时间:主持人按下p3^4键时,指示灯亮,此时可以通过按下P3^2和P3^3来加一和减一调整选手的回答时间,完成后按起P3^4键;主持人再按下P3^5键来加一和减一调整选手抢答时间,完成后按起P3^5键。在设置完成后按下P3^1键让系统进入等待状态,显示FFF。
现已实现功能有:初始时显示FFF,主持人按下开始键P3^0之后显示F和抢答时间,此时选手进行抢答且开始抢答时间倒计时,当倒计时进入最后5S的时候蜂鸣器每秒响一次作为提示,如果在规定时间内选手没有做出抢答,则蜂鸣器响,直到主持人按下停止键显示FFF和关闭蜂鸣器,等待主持人按下开始键后,开始新的一轮抢答。
若选手抢答成功,则显示抢答成功的选手号码且时间栏显示FF。当再次主持人按下开始键后,选手开始作答,并且回答时间开始倒计时作为选手回答时间,当倒计时进入最后5S的时候蜂鸣器每秒响一次作为提示,如果选手没有在规定时间完成作答,则显示选手号码和00,且蜂鸣器响,直到主持人按下停止键显示FFF和关闭蜂鸣器,等待主持人按下开始键后,开始新的一轮抢答。如果选手提前完成回答,此时主持人按下停止键,显示FFF,和关闭蜂鸣器。等待主持人按下开始键后,开始新的一轮抢答。
犯规抢答:若主持人没有按下开始键,有选手进行了抢答,则显示犯规抢答的号码且时间栏显示FF,且蜂鸣器响,直到主持人按下停止键显示FFF和关闭蜂鸣器,等待主持人按下开始键,开始抢答。
在选手超时抢答或者超时回答的情况下,则抢答失败,分别显示选手号码时间栏为00和F且时间栏为00,两种情况蜂鸣器都响,直到主持人按下停止键P3^1后显示FFF和关闭蜂鸣器,等待主持人按下开始键,开始新的一轮抢答。
- 内容简介:
-
-
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。