设计目的:设计一个八路抢答器,抢答时间为30S倒计时,抢到后,有10S的回答问题时间
#include#include unsigned char code SEG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管的断码表,共阴级 unsigned char dispbuf[2]={0,0}; //显示缓冲区百十个位 unsigned char flag=0; //1s到标志位 sbit setting=P3^0; sbit opening=P3^1; sbit beep=P3^7; unsigned char number;//存放按键抢答号 unsigned char m; unsigned char mm=30;//存放答题30秒 void delay(); void display(unsigned char m); unsigned char anjian();//函数声明 void Timer0_Init() { TMOD=0x01; //定时器0方式1 TH0=(65536-5000)/256; //定时5ms TL0=(65536-5000)%256; ET0=1; //开中断 EA=1; TR0=1; //开定时器0 } void Timer0_ISR() interrupt 1 using 0 { static unsigned char i=0,k=0;//其中m和mm分别为5秒倒数计时和30秒倒数计时 TH0=(65536-5000)/256; //重赋初值 TL0=(65536-5000)%256; k++; if(k==200) { k=0; if(mm==0) mm=0; else mm--; } if(mm==3) {for(m=3;m--;m>0) {beep=!beep; delay();} } P1=0xff;//关闭数码管 if(i==2) P1=SEG[number]; else P1=SEG[dispbuf[i]]; P3 = ~(0x08<



