基于C51单片机的多人抢答器Word格式.docx
- 文档编号:21458014
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:7
- 大小:16.12KB
基于C51单片机的多人抢答器Word格式.docx
《基于C51单片机的多人抢答器Word格式.docx》由会员分享,可在线阅读,更多相关《基于C51单片机的多人抢答器Word格式.docx(7页珍藏版)》请在冰豆网上搜索。
sbitQiangda=P3^1;
//允许抢答按键
sbitBee=P3^7;
//报警
ucharkaishi_flag;
//开始标志位
uchardisplay_flag;
//显示标志位
ucharerr_flag;
//没有err_flag时,当未允许抢答而选手按下键时,
//再按一下允许键会直接开始计时!
为了不冲突而//引入err_flag!
ucharqiangda_flag;
uchardis[8];
//8位数,其中第三位为选手编号,最后两位为//时间
uchartimer_ms,timer_s;
uchartimer_s_shi,timer_s_ge;
ucharcodenum[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voidTime_Init();
voidKaishi();
ucharpanduan();
voidTime_pross();
voidPross(uchar);
voidErr(uchara);
voidDisplay();
voidBeep();
voiddelay(uchara);
voidmain()
{
Time_Init();
//定时器初始化
while
(1)
{
Kaishi();
if(Qiangda==0&
&
err_flag==0)//当err_flag为0以及允许抢答键//被按下时
{
qiangda_flag=1;
Beep();
}
if(qiangda_flag)
if(display_flag)//当显示标志位=1时(即有人抢答时候)
{//才能显示剩余时间,否则时间位不显示
Time_pross();
}
if(kaishi_flag)
Pross(panduan());
Display();
/**********************************************************************************/
/*上面情况为未允许抢答和抢答的编号在数码管同一位置显示的代码,此时可以不需要Err()函数
/*而下面情况为不在同一位置显示的代码,有两个处理函数
//if(qiangda_flag)
//{
//if(display_flag)//当显示标志位=1时(即有人抢答时候)
//{//才能显示剩余时间,否则时间位不显示
//Time_pross();
//}
//
//if(kaishi_flag==1)
//{
//Pross(panduan());
//}
//else
//if(kaishi_flag==1)//当抢答键没按下时,如果抢答就会显示//出按下的键
//{
//Err(panduan());
//}
//}
voidTime_Init()
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
}
/*开始和复位函数*/
voidKaishi()
uchari;
if(kaishi==0)//当开始键被按下
TR0=0;
//当按下复位键时关闭定时器
err_flag=0;
//防冲突标志位
qiangda_flag=0;
//抢答允许标志位
kaishi_flag=1;
//复位/开始标志位
display_flag=0;
//复位时首先关闭显示标志位,否则在时间位会//一直显示间隔时间
for(i=0;
i<
8;
i++)
dis[i]=15;
//赋初值(随意)
timer_s=0;
//并将定时器清零
}
/*判断按下的是哪个键*/
ucharpanduan()
ucharkey1,key2,temp,i;
temp=0xfe;
key1=key;
for(i=0;
if(key1==_crol_(temp,i))//判断key1的值是由temp左移几
{
key2=i;
//次得到的从而判断按下的哪个键
kaishi_flag=0;
//标志位清零
display_flag=1;
//显示标志位打开
err_flag=1;
TR0=1;
//并打开计时器
break;
returnkey2;
/*倒计时处理函数*/
voidTime_pross()
if(timer_ms>
=20)//当timer_ms=20时为1秒钟
timer_ms=0;
timer_s++;
timer_s_shi=(Time_Clock-timer_s)/10;
//计时器十位数
timer_s_ge=(Time_Clock-timer_s)%10;
//计时器个位数
if(timer_s>
=Time_Clock)
}
dis[6]=timer_s_shi;
//数码管中第六位显示剩余时间的十位
dis[7]=timer_s_ge;
//第七位显示剩余时间的个位
voidPross(uchara)
dis[2]=a;
//在数码管中第二位显示被按下的键
voidErr(uchara)
{
//表示没有允许抢答时候应答者所按的键
//dis[4]=a;
/*显示函数*/
voidDisplay()
data_duan=num[dis[i]];
//段选
data_wei=i;
//位选
delay
(2);
/*报警函数*/
voidBeep()
50;
Bee=0;
delay
(1);
Bee=1;
/*定时器T0中断函数*/
voidTime()interrupt1
//赋初值
timer_ms++;
voiddelay(uchara)
ucharb;
for(a;
a>
0;
a--)
for(b=110;
b>
b--);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 C51 单片机 抢答