单片机技术网|技术阅读
登录|注册

您现在的位置是:单片机技术网 > 技术阅读 > 基于51单片机的羽毛球计分器设计

基于51单片机的羽毛球计分器设计

.

   AT89C513

   51++LCD1602+LED+

.

18AABB

2LCD1602


.

1AD,

2Protues仿


.

1

2

void main(){ EA = 1; //开总中断 ConfigTimer0(1); //配置T0定时1ms InitLcd1602(); //初始化液晶 while (1) { KeyDriver(); //调用按键功能 if(k==1) LcdInit(); //显示字幕 }}

/* 按键驱动函数,检测按键动作,调度相应动作函数,需在主循环中调用 */void KeyDriver(){ static bit star = 0; //开始比赛 unsigned char but = 0; //胜利标志 static unsigned char cnt = 0; //比赛次数 static unsigned char cnta = 0; //A胜利次数 static unsigned char cntb = 0; //B胜利次数 if(KEY_IN_3 == 0) { delay(); star = 1; TR0 = 1;k=1;} if(star == 1) { LcdWriteCmd(0x0C); //显示器开,光标关闭 if(KEY_IN_1 ==0) { a++; delay();} if(KEY_IN_2 ==0) { b++; delay();} if(KEY_IN_4 ==0) { TR0 = 0; star=0; delay(); } if(KEY_IN_5 ==0) { a--; if(a<0)a=0; delay();} if(KEY_IN_6 ==0) { b--; if(b<0)b=0; delay(); } } if(KEY_IN_7 ==0) { a=0; b=0; sec=0; minute=0; TR0=0;star=0;cnta=0; cntb=0; cnt=0; LcdShowStr(0, 0, " "); delay();} if(KEY_IN_8 ==0){ a=0; b=0; sec=0; minute=0; LcdShowStr(0, 0, " "); k=0;cnta=0;cntb=0;cnt=0;LcdWriteCmd(0x01); delay();} if(a>=21 && (a-b)>=2 ) {cnt++; cnta++; but = 1; a = 0; b = 0; } if(b>=21 && (b-a)>=2 ) {cnt++; cntb++; but = 2; a = 0; b = 0; } if(cnt==2&&(cnta==2||cntb==2)) {TR0 = 0; star = 0;} switch(cnt) { case 1: if(but==1) LcdShowStr(0, 0, "1Awin"); if(but==2) LcdShowStr(0, 0, "1Bwin");break; case 2: if(but==1) LcdShowStr(5, 0, "2Awin"); if(but==2) LcdShowStr(5, 0, "2Bwin");break; case 3: if(but==1) LcdShowStr(10, 0, "3Awin"); if(but==2) LcdShowStr(10, 0, "3Bwin"); TR0=0;star=0;break; default: break; }}