#include unsigned char code tab[15]={0xfc,0x60,0xda,0xf2,0x66,0xb6, 0xbe,0xe0,0xfe,0xf6};//段选 unsigned char key; //存放键盘扫描结果 unsigned int a=0,b=0,ting=0,stop=1,bi; unsigned int e=0,f=0,g=0,h=0,we=0; void xian(); /* 键盘程序 延时程序 */ void dlms(void) {unsigned char i; for(i=100;i>0;i--);} delay(unsigned char x) {while(x--)dlms();} void dl0ms(unsigned char s) {unsigned int o,p; while(s--) {for(o=0;o>2000;o++) for(p=0;p>1000;p++);} } /* 键盘扫描程序 */ unsigned char kbscan(void) {unsigned scode ,recode; P1=0xf0; if((P1&0xf0)!=0xf0) {delay(50); if((P1&0xf0)!=0xf0) {delay(2); scode=0xfe; while((scode&0x10)!=0) {P1=scode; if((P1&0xf0)!=0xf0) {recode=(P1&0xf0)|0x0f; return ((~scode)+(~recode));} else scode=(scode<<1)|0x01;} }} return 0;} /* 检测键盘代码程序 */ void pan() {switch(key) { case 0x81: ting=!ting,b=0,a=9;break; //倒记时 case 0x11: stop=0;break; // 停止 case 0x48: if((ting)&&(a>0)){b=4,ting=0,we=1;} break; case 0x44: if((ting)&&(a>0)){b=3,ting=0,we=1;} break; case 0x42: if((ting)&&(a>0)){ b=2,ting=0,we=1;}break; case 0x41: if((ting)&&(a>0)){b=1,ting=0,we=1;} break; case 0x28: if((we)&&(e<9)){e++;}; break; //各个 case 0x24: if((we)&&(f<9)){f++;}; break; //选手 case 0x22: if((we)&&(g<9)){g++;}; break; //加分 case 0x21: if((we)&&(h<9)){h++;}; break; } // } void jishi() {dl0ms(500); if(a--==0){we=0,a=0;}dl0ms(500);} void xian() {unsigned char n; for(n=0;n<20;n++) {P0=0x7f;P3=tab[a];delay(5);//P0位选,P3段选 P0=0xbf;P3=tab[b];delay(5); P0=0xf7;P3=tab[e];delay(5); P0=0xfb;P3=tab[f];delay(5); P0=0xfd;P3=tab[g];delay(5); P0=0xfe;P3=tab[h];delay(5);} } void main() {while(stop) {if(kbscan()) {xian(); if(kbscan())key=kbscan(); while(kbscan()) xian();pan();} if(ting){jishi(); dl0ms(500);} xian();dl0ms(500); } a=0,bi=e; if(bi 因篇幅问题不能全部显示,请点此查看更多更全内容