您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 基于proteus篮球计时计分器(史上最牛-含详细程序)
基于proteus篮球计时计分器(史上最牛,含详细程序)#includeREGX52.H#defineucharunsignedchar#defineuintunsignedint#defineTH_value0xb1#defineTL_value0xe0//定时器工作于方式1,每20ms产生一个中断sbitspeak=P3^7;sbitext=P3^2;sbitled=P3^4;/**********BCD码字***************/ucharcodebcd[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};/************0~9数字显示**************/ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};ucharmunite;//比赛剩余分位数ucharsecond;//比赛剩余秒位数ucharpart;//当前比赛的节次uchars24;//24秒标志ucharred_mark;//红队得分ucharblue_mark;//蓝队得分ucharkey_move;//设置位移动ucharkey_red_add;//红队得分增加1ucharkey_red_mul;//红队得分减少1ucharkey_blue_add;//蓝队得分增加1ucharkey_blue_mul;//蓝队得分减少1ucharkey_pause;//暂停ucharkey_reset;//24秒复位及进入下一节复位uchartime_tick1,time_tick2;ucharstation;//状态标志位ucharflag;//跳亮标志位uchartalk1,talk2,num,num1;//报警信号标志/*******函数声明********/voidinit();voidinit_timer();voidinit_extra();ucharkey_scan();voidscanf(ucharp,uchartw,ucharm,uchars,ucharr,ucharb);voidscanf1(ucharp,ucharr,ucharb);voidscanf2(uchartw,ucharr,ucharb);voidscanf3(ucharm,ucharr,ucharb);voidscanf4(uchars,ucharr,ucharb);voidplay24();voidplaystop1();voidplaystop2();/*********延时程序,t=1时,延时1ms************/voiddelay(uchart){inti,j;for(j=0;jt;j++)for(i=0;i110;i++);}/***********主程序************/voidmain(){init();init_timer();init_extra();//初始化while(1){if(station==0)//状态0:比赛状态{scanf(part,s24,munite,second,red_mark,blue_mark);if(time_tick1==50){time_tick1=0;if(second==0)//时间计数{if(munite==0){if(part=4){talk2=1;//终场报警操作TR0=0;//关闭定时器中断0TR1=1;}else{talk2=1;//小节结束报警TR1=1;TR0=0;}}else{munite--;second=59;}}elsesecond--;if(s24==0)//24秒计数{TR0=0;}else{if(s242){talk2=1;TR1=1;TR0=0;key_pause=0;}elseif(s248){talk1=1;TR1=1;}s24--;//6秒提醒}}if(second==0&&munite==0)//操作进入下一节比赛{if(key_reset==1){s24=0x18;part++;key_reset=0;if(part==10)talk2=1;//比赛太久,报警if(part5)//判断是否为加时赛,不是,延长12分钟{munite=0x0c;second=0x00;}else//加时赛,延长5分钟{munite=0x05;second=0x00;}}}if(second!=0||munite!=0)//操作24秒复位{if(key_reset==1){if(second0x18&&munite==0)//当比赛剩余时间少于24秒时,sS4为当前剩余时间{key_reset=0;s24=second;}else//当时间大于24秒时,S24复位为24秒{key_reset=0;s24=0x18;}}}if(key_red_add==1)//红队得分操作加{key_red_add=0;if(red_mark0xff)red_mark++;}if(key_red_mul==1)//红队得分操作减{key_red_mul=0;if(red_mark0)red_mark--;}if(key_blue_add==1)//蓝队得分操作加{key_blue_add=0;if(blue_mark0xff)blue_mark++;}if(key_blue_mul==1)//蓝队得分操作减{key_blue_mul=0;if(blue_mark0)blue_mark--;}}if(station==1)//比赛节次操作{TR1=1;flag=0;while(station==1){if(flag==0)scanf1(part,red_mark,blue_mark);if(flag==1)scanf(part,s24,munite,second,red_mark,blue_mark);if(key_red_add==1)//比赛节次操作加{key_red_add=0;if(part0x09)part++;}if(key_red_mul==1)//比赛节次操作减{key_red_mul=0;if(part1)part--;}}if(station!=1){TR1=0;flag=0;}}if(station==2)//24秒操作{TR1=1;flag=0;while(station==2){if(flag==0)scanf2(s24,red_mark,blue_mark);if(flag==1)scanf(part,s24,munite,second,red_mark,blue_mark);if(key_red_add==1)//24秒操作加.MAX=24{key_red_add=0;if(s240x18)s24++;}if(key_red_mul==1)//24秒操作减{key_red_mul=0;if(s240)s24--;}}if(station!=2){TR1=0;flag=0;}}if(station==3)//计时分操作{TR1=1;flag=0;while(station==3){if(flag==0)scanf3(munite,red_mark,blue_mark);if(flag==1)scanf(part,s24,munite,second,red_mark,blue_mark);if(key_red_add==1)//分操作加,MAX=60{key_red_add=0;if(munite0x3c)munite++;}if(key_red_mul==1)//分操作减{key_red_mul=0;if(munite0)munite--;}}if(station!=3){TR1=0;flag=0;}}if(station==4)//计时秒操作{TR1=1;flag=0;while(station==4){if(flag==0)scanf4(second,red_mark,blue_mark);if(flag==1)scanf(part,s24,munite,second,red_mark,blue_mark);if(key_red_add==1)//秒操作加,MAX=60{key_red_add=0;if(second0x3c)second++;}if(key_red_mul==1)//秒操作减{key_red_mul=0;if(second0)second--;}}if(station!=4){TR1=0;flag=0;}}}}/************初始化************/voidinit(){munite=0x01;second=0x00;red_mark=0x00;blue_mark=0x00;part=0x01;s24=0x18;station=0x00;key_pause=0;key_move=0x00;key_red_add=0x00;key_red_mul=0x00;key_blue_add=0x00;key_blue_mul=0x00;key_reset=0x00;flag=0x00;}/************定时器0初始化**************/voidinit_timer(){TMOD=0x11;TH0=TH_value;TL0=TL_value;TH1=TH_value;TL1=TL_value;ET0=1;ET1=1;time_tick1=0;time_tick2=0;}/**************外部中断源初始化****************/voidinit_extra(){EX0=1;EX1=1;IT0=1;IT1=1;EA=1;}/*****************定时器0***************/voidtimer0()interrupt1{time_tick1++;TH0=TH_value;TL0=TL_value;}/*************定时器1***************/voidtimer1()interrupt3{EA=0;TH1=TH_value;TL1=TL_value;time_tick2++;if(time_tick2==50){led=~led;time_tick2=0x00;if(flag==0)flag=1;//跳亮标志位elseflag=0;}if(talk1==1){EA=0;TH1=0xFD;TL1=0xF7;EA=1;speak=~speak;num++;if(num==200){num=0;talk1=0;TR1=0;}}if(talk2==1){EA=0;TH1=0xFD;TL1=0xF7;EA=1;speak=~speak;num++;if(num==200){num1++;num=0;if(num1==4){num1=0;talk2=0;TR1=0;}}}EA=1;}/***********外部中断0************/voidextra0()interrupt0{if(key_pause==1){key_pause=0;TR0=0;}else{if(s24==0);else{key_pause=1;TR0=1;}}}/***********外部中断1*****************/voidextra1()interrupt2{uchardtemp;dtemp=key_scan();switch(dtemp){case0xFE:key_move=1;break;case0xFD:key_reset=1;break;case0xF7:key_red_add=1;break;case0xDF:key_red_mul=1;break;case0xEF:key_blue_add=
本文标题:基于proteus篮球计时计分器(史上最牛-含详细程序)
链接地址:https://www.777doc.com/doc-6451395 .html