基于51单片机八路抢答器的设计内容摘要:

uchar i=100。 if(K0==0) { delay(10)。 if(K0==0) { while(K0==0amp。 amp。 i) { i。 delay(10)。 } TR0=1。 s=time1。 m=0。 flag1=1。 flag2=1。 flag3=1。 XXXXXXXX 学院(论文) 17 num=0。 beep=1。 D0=1。 flag4=0。 //清除违规标志位 aa=0。 bb=0。 } } } 选手抢答按键扫描子函数 //选手抢答按键扫描子函数 void key() { if(K1==0) { delay(10)。 if(K1==0) { while(!K1)。 num=1。 //数码管显示 1 号 1 TR0=0。 //关闭定 时器 0,时间停止 TR1=1。 //打开定时器 1,使扬声器响一声 flag2=0。 //关闭开始键标志位 ,使再按其他七个键不会响应 } } if(K2==0) //下面七个键的处理同上 { delay(10)。 if(K2==0) XXXXXXXX 学院(论文) 18 { while(!K2)。 num=2。 TR0=0。 TR1=1。 flag2=0。 //重要 } } if(K3==0) { delay(10)。 if(K3==0) { while(!K3)。 num=3。 TR0=0。 TR1=1。 flag2=0。 } } if(K4==0) { delay(10)。 if(K4==0) { while(!K4)。 num=4。 TR0=0。 TR1=1。 flag2=0。 } XXXXXXXX 学院(论文) 19 } if(K5==0) { delay(10)。 if(K5==0) { while(!K5)。 num=5。 TR0=0。 TR1=1。 flag2=0。 } } if(K6==0) { delay(10)。 if(K6==0) { while(!K6)。 num=6。 TR0=0。 TR1=1。 flag2=0。 } } if(K7==0) { delay(10)。 if(K7==0) { while(!K7)。 XXXXXXXX 学院(论文) 20 num=7。 TR0=0。 TR1=1。 flag2=0。 } } if(K8==0) { delay(10)。 if(K8==0) { while(!K8)。 num=8。 TR0=0。 TR1=1。 flag2=0。 } } } 显示子函数 //显示子函数 void display() { if(flag1==1) //开始键按下 ,开始计时抢答 { if(num!=0) //如果有人抢答 ,则显示相应的几号 { P0=table1[num]。 //显示几号抢到了 P2=table2[0]。 XXXXXXXX 学院(论文) 21 delay(2)。 P0=0。 P2=0xff。 } else //否则没人抢答 ,则前面不显示几号 { P0=0x00。 P2=0xff。 } P0=table1[s/10]。 //下面为显示抢答倒计时 P2=table2[2]。 delay(2)。 P0=0。 P2=0xff。 P0=table1[s%10]。 P2=table2[3]。 delay(2)。 P2=0xff。 P0=0x00。 } else //如果开始键没有按下 ,则显示 F FF(若有违规者 ,则显示违规号码及 FF)或时间调整 { if(flag4==1) //违规显示 { if(num!=0) { P0=table1[num]。 //显示几号违规了 P2=table2[0]。 delay(2)。 P0=0x00。 XXXXXXXX 学院(论文) 22 P2=0xff。 P0=table1[15]。 //下面显示 FF,表示违规了 P2=table2[2]。 delay(2)。 P0=0x00。 //消隐 P2=0xff。 P0=table1[15]。 P2=table2[3]。 delay(2)。 P0=0x00。 P2=0xff。 } else { P0=0x00。 P2=0xff。 } } else //没有人违规才显示调整时间 { if(aa==1) { P0=0x6d。 //第一位数码管显示 5(S)(表示抢答时间调整 ) P2=table2[0]。 delay(2)。 P0=0x00。 P2=0xff。 P0=table1[time1/10]。 //下面显示调整的抢答时间 P2=table2[2]。 delay(2)。 XXXXXXXX 学院(论文) 23 P0=0x00。 P2=0xff。 P0=table1[time1%10]。 P2=table2[3]。 delay(2)。 P0=0x00。 P2=0xff。 } else if(bb==1) { P0=0x07。 //第一位与第二位数码管合起来显示 T,表示答题时间调整 P2=table2[0]。 delay(2)。 P0=0x00。 P2=0xff。 P0=0x31。 P2=table2[1]。 delay(2)。 P0=0x00。 P2=0xff。 P0=table1[time2/10]。 P2=table2[2]。 delay(2)。 P0=0x00。 P2=0xff。 P0=table1[time2%10]。 P2=table2[3]。 XXXXXXXX 学院(论文) 24 delay(2)。 P0=0x00。 P2=0xff。 } else //否则显示 F FF { P0=table1[15]。 P2=table2[0]。 delay(2)。 P0=0x00。 P0=table1[15]。 P2=table2[2]。 delay(2)。 P0=0x00。 //消隐 P2=0xff。 P0=table1[15]。 P2=table2[3]。 delay(2)。 P0=0x00。 P2=0xff。 } } } } 调整时间键扫描子函数 //调整时间键扫描子函数 void key2() { uchar i=100。 XXXXXXXX 学院(论文) 25 if(S2==0) //抢答时间调整 { delay(10)。 if(S2==0) { while(S2==0amp。 amp。 i) { i。 delay(10)。 } time1++。 if(time1==61) { time1=10。 } aa=1。 //将抢答时间标志位置 1 bb=0。 //同时关闭答题时间标志位 } } if(S3==0) //答题时间调整 { delay(10)。 if(S3==0) { while(S3==0amp。 amp。 i) { i。 delay(10)。 } time2++。 if(time2==61) XXXXXXXX 学院(论文) 26 { time2=10。 } bb=1。 aa=0。 } } } 定时器 0 中断子函数 //定时器 0 中断子函数 void t0() interrupt 1 { TH0=(655362020)/256。 //2ms TL0=(655362020)%256。 if(flag3) //开始 (START)键按下 ,嘟一声 (长 1 秒 ),表示开始抢答 { beep=~beep。 } else beep=1。 if(s5) //抢答时间快到报警 ,隔 1 秒响一声且 红灯闪烁 ,响三声 { if(s%2==0) { flag3=1。 D0=0。 } else { XXXXXXXX 学院(论文) 27 flag3=0。 D0=1。 } } m++。 if(m==500) //1 秒 { m=0。 s。 flag3=0。 //关闭开始键按下响一秒的嘟声 if(s==1) { s=20。 TR0=0。 flag1=0。 //显示 F FF flag2=1。 num=0。 D0=1。 } } } 定时器 1 中断子函数 //定时器 1 中断子函数 void t1() interrupt 3 //定时器 1 处理有人按下抢答器嘟一声 (长 1 秒 ) { TH1=(655362020)/256。 TL1=(655362020)%256。 beep=~beep。 n++。 XXXXXXXX 学院(论文) 28 if(n==500) { n=0。 TR1=0。 } } 主函数 //主函数 void main() { uchar i=100。 init()。 //调用初始化子函数 while(1) { key1()。 //调用开始键扫描子函数 if((flag1==0)amp。 (flag2==1)) //当开始键没按下及没有人违规时才可进行时间调整 { key2()。 } if((flag1==1)amp。 (flag2==0)) //当开始键按下及有人抢答才进行开始回答计时倒计时 { if(S1==0) { delay(10)。 if(S1==0) { while(S1==0amp。 amp。 i) XXXXXXXX 学院(论文) 29 { i。 delay(10)。 } s=time2。 TR0=1。 m=0。 TR1=1。 } } } if((flag1==0)amp。 (flag2==1)) //违规 { key()。 if(num!=0) //开始键没有按下时 , 有人按下了抢答器 ,则置违规标志。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。