帮兄弟学院做了一个8路抢答器.docx
- 文档编号:26538953
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:13
- 大小:672.14KB
帮兄弟学院做了一个8路抢答器.docx
《帮兄弟学院做了一个8路抢答器.docx》由会员分享,可在线阅读,更多相关《帮兄弟学院做了一个8路抢答器.docx(13页珍藏版)》请在冰豆网上搜索。
帮兄弟学院做了一个8路抢答器
大二刚刚学51的时候,帮兄弟学院做了一个8路抢答器,用了一个超大的数码管(4寸),有遥控控制,比较简单。
上图:
最后,放源码:
#include
#defineLEDP2 //宏定义,使用LED代替P3口(相当于LED=P3)
#defineucharunsignedchar //用uchar代替unsignedchar方便操作
#defineuintunsignedint
sbitbeep=P2^7;//蜂鸣器
sbitBG=P3^7;//指示灯
sbitkey4=P1^0;//按键D
sbitkey2=P1^1;//按键B
sbitkey1=P1^2;//按键A
sbitkey3=P1^3;//按键C
bittime_over=0;//倒计时结束标记
bitWARNING=0;//倒数十秒控制变量
bitINT_ON=0;//中断标记
bitkey_down=0;//键盘辅助变量
ucharRIGHT=0xff;//按键暂存器
ucharCONT=0; //定时器辅助变量
ucharres_time=0;//时间
ucharset_time=30;
ucharleds[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
0x90,0x88,0x83,0xa7,0xa1,0x86,0x8e,0xff};
/*------------------timems延时函数-----------------*/
voiddelay_ms(uinttime)
{
uchartres;
for(;time>0;time--)
{
tres=150;
while(tres--);
}
}
//外部中断1初始化程序
voidInit_Sys()//中断初始化函数
{
TCON=0x00; //外部中断1低电平触发
TMOD=0X01; //定时器0方式1
IE=0x86; //开启外部中断1,定时器中断0,及总中断 10000110B
IP=0X04; //外部中断优先级高于定时器
CONT=0; //时间清零
res_time=0;
}
//外部中断1处理程序
void exint1_int()interrupt2using0
{
uchart=200;
EA=0;//关中断
TR0=0;//关定时器
WARNING=0;//关警告
while(t--)beep=0;//软件延时,消除抖动
RIGHT=P0;//获得按键值
INT_ON=1;//标记中断
}
//定时器0中断处理程序
voidcount_int()interrupt1using1
{
TH0=0X4C;//重新装载
TL0=0X00;
CONT++;
if(CONT==20)
{
CONT=0;
if(res_time==0)time_over=1;
res_time--;
}
}
//遥控按键扫描程序
ucharkey_scan(void)
{
P1=0xff;
if(key1==1||key2==1||key3==1||key4==1)
{
if(!
key_down)
{
delay_ms(10); //延时
key_down=1; //限制
if(key1==1)return1;//按键A
if(key2==1)return2;//按键B
if(key3==1)return3;//按键C
if(key4==1)return4;//按键D
}
elsereturn0;
}
elseif(key_down)key_down=0;//消除限制
return0;//未获得任何按键
}
ucharjuder(void)
{
switch(RIGHT)
{
case0xff:
return0;
case0xfe:
return1;
case0xfd:
return2;
case0xfb:
return3;
case0xf7:
return4;
case0xef:
return5;
case0xdf:
return6;
case0xbf:
return7;
case0x7f:
return8;
default:
return14;//E,错误
}
}
//显示答案
voidshow_answer(void)
{
ucharti=0;
ucharkey=0;
while
(1)
{
key=key_scan();
if(ti==100){BG=!
BG;ti=0;}
if(key!
=0)
{
LED=leds[key+9];//显示答案
BG=1;//灭灯
break;
}
ti++;
delay_ms
(1);
}
}
voidBELL(uchartimes)
{
while(times--)
{
beep=0;
delay_ms(100);
beep=1;
delay_ms(100);
}
}
//清除显示
voidclear(void)
{
EA=0; //关掉计时器
beep=0; //开蜂鸣器
WARNING=0; //清警告标记
time_over=0;//清溢出标记
TR0=0; //关定时器
INT_ON=0;//清除中断标记
TL0=0X00;//初始值设置
TH0=0X4C;
CONT=0;
res_time=set_time;//赋初始值
delay_ms(100);
LED=leds[16];//清屏,同时关蜂鸣器
BG=1;//关灯
}
voiddebug(void)//处理犯规队,显示犯规队队号
{
RIGHT=P0;//获得犯规队的地址
LED=leds[juder()];//显示队号
BELL(4);
}
//开启抢答器
//1普通模式
//0倒计时模式
voidstart(uchartype)
{
bitalarm=1;//提示音
ucharkey=0;
res_time=set_time;//获取初始值
while
(1)
{
key=key_scan();//扫描键盘
if(key!
=0)
{
switch(key)
{
case1:
//显示答案
{
clear();//清除
show_answer();
break;
}
case2:
//开始抢答
{
if(P0!
=0XFF)
{
debug();//处理犯规
break;
}
if(!
type)TR0=1; //倒计时方式
else //普通方式
{
clear();
BG=0;//开灯指示
}
EA=1;//使能中断
break;
}
case3:
clear();break;//清除
case4:
return;//返回
}
}
if(TR0==1)//倒计时
{
if(CONT==0&&BG)
{
if(res_time>=10)LED=leds[res_time/10];
BG=0;//每秒钟闪烁一次
if(WARNING)alarm=0;//最后十秒
}
if(CONT==10&&!
BG)
{
BG=1;
if(WARNING)alarm=1;//最后十秒
elseLED=leds[res_time%10];//显示个位数据;
}
if(res_time<10)//最后十秒标记
{
WARNING=1;
LED=leds[res_time];
}
beep=alarm;
delay_ms(5);
}
if(time_over)//倒计时结束处理
{
clear();
LED=leds[0];
time_over=0;
BELL(3);
}
if(INT_ON)//有选手按下
{
TR0=0;//关定时器
beep=0;//开提示音
BG=1;//关灯
delay_ms(100);
INT_ON=0;
LED=leds[juder()];//显示选手号
}
}
}
voidmain()
{
bitset=0;//设置状态标记
bitmodel=1;//模式标记
ucharkey;
Init_Sys();//初始化外部中断 1捕获按键输入
P0=0XFF;
TR0=1;//开启定时器0
while
(1)//死循环
{
key=key_scan();
if(key!
=0)
{
if(!
model)switch(key)
{
case1:
{
set=1;
set_time+=10;
if(set_time>90)set_time=10;
break;
}
case3:
{
set=1;
if(set_time>10)set_time-=10;//范围限制
elseset_time=90;
break;
}
}
if(key==2)
{
start(model);//开始抢答
set=0;//非设置状态
}
if(key==4)
{
model=!
model;//模式切换
set=0; //非设置状态
}
}
if(model)LED=leds[14];
else
{
if(set)LED=leds[set_time/10];//显示设置时间
elseLED=leds[15];
}
}
}
详细说明文档见附件。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 兄弟 学院 一个 抢答