篮球积分器
篮球比复赛计时计分器是为了解决篮制球比赛时计分与计时准确的问题。此装置利用单片机AT89C51完成了计时和计分的功能。本文详细地介绍了系统硬件与软件的设计过程,采用该装置可根据实际情况进行比分修改和时间的准确显示,具有低功耗,可靠性,安全性以及低成本等特点
2. 篮球计分器ge怎么编程
#include"reg52.h"
#define u8 unsigned char
#define u16 unsigned int
sbit UP_1    = P1^1;  //第一队加分键
sbit DOWN_1  = P1^2;  //第一队减分键
sbit UP_2    = P1^3;  //第二队加分键
sbit DOWN_2  = P1^4;  //第二队减分键
sbit Change  = P1^5;  //交换键
sbit Begin   = P1^6;  //开始键
sbit Pause  = P1^7;  //暂停键
sbit Beef   = P2^4;  //蜂鸣器
sbit an = P2^3;  //段选
sbit wei  = P2^2;  //位选
u8 Grate_1=0;  //第一队计分
u8 Grate_2=0;  //第二队计分
u8 Grate_change=0;  //换场标志
u8 Time = 99;  //总时间
u16 Flag=0;  //计时次数
u8 leddata[]={ 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                };
void InitTimer1(void)
{
    TMOD = 0x10; //定时器1设为模式1
    TH1 = 0xFC;
    TL1 = 0x18;     //1ms
    EA = 1;         //开总中断
    ET1 = 1;        //开定时器1中断
//    TR1 = 1;      //
}
void delay(u8 d)    //延时
{
    u8 a,b,c;
    for(c=d;c>0;c--)
        for(b=17;b>0;b--)
           for(a=16;a>0;a--);
}
void beef(u8 d)   //发声
{
    u8 a,b,c;
    for(c=d;c>0;c--)
        for(b=17;b>0;b--)
           for(a=16;a>0;a--)
           {
                Beef=~Beef; 
           }
}
void display(u8 grate_1,u8 grate_2,u8 time)  //显示
{
   u8 w1,w2,w3,w4,w7,w8;
   w1=grate_1/10; //计算第一队分数十位
   w2=grate_1%10; //计算第一队分数个位
   w3=grate_2/10; //计算第二队分数十位
   w4=grate_2%10; //计算第二队分数个位
   w7=time/10; //计算时间十位
   w8=time%10; //计算时间个位
P0=0xff; //消隐,该段显示第一队分数十位
   wei=1;
   P0=0xfe; //送位码
   wei=0;
   P0=0xff;
   an=1;
   P0=leddata[w1]; //送段码
   an=0;
   delay(5);
P0=0xff; //显示第一队分数个位
   wei=1;
   P0=0xfd;
   wei=0;
   P0=0xff;
   an=1;
   P0=leddata[w2];
   an=0;
   delay(5);
P0=0xff; //显示第二队分数十位
   wei=1;
   P0=0xfb;
   wei=0;
   P0=0xff;
   an=1;
   P0=leddata[w3];
   an=0;
   delay(5);
   
    P0=0xff;  //显示第二队分数个位
   wei=1;
   P0=0xf7;
   wei=0;
   P0=0xff;
   an=1;
   P0=leddata[w4];
   an=0;
   delay(5);
P0=0xff;   //显示时间十位
   wei=1;
   P0=0xbf;
   wei=0;
   P0=0xff;
   an=1;
   P0=leddata[w7];
   an=0;
   delay(5);
P0=0xff;   //显示时间个位
   wei=1;
   P0=0x7f;
   wei=0;
   P0=0xff;
   an=1;
   P0=leddata[w8];
   an=0;
   delay(5);
}
void main()
{
    InitTimer1();  //初始化定时器1
    UP_1    = 1;  //以下初始化IO口
    DOWN_1  = 1;
    UP_2    = 1;
    DOWN_2  = 1;
    Change  = 1;
    Begin   = 1;
    while(1)
    {  
        if(UP_1==0)  //如果第一队加分键按下
        {
            ET1 = 0;  //关闭定时器1中断
            delay(5);  //稍加延时
            while(UP_1==0);//等待按键抬起
            Grate_1++;    //第一队分数加1
            ET1 = 1;    //开启定时器1中断
        }
        if(DOWN_1==0)   //如果第一队减分键按下
        {   
            ET1 = 0;
            delay(5);
            while(DOWN_1==0);
            Grate_1--;   //第一队分数减1
            ET1 = 1;
        }
        if(UP_2==0)    //如果第二队加分键按下
        {
            ET1 = 0;
            delay(5);
            while(UP_2==0);
            Grate_2++;    //第二队分数加1
            ET1 = 1;
        }
        if(DOWN_2==0)    //如果第二队减分键按下
        {
            ET1 = 0;
            delay(5);
            while(DOWN_2==0);
            Grate_2--;    //第二队分数减1
            ET1 = 1;
        }
        if(Change==0)    //如果换场键按下
        {
            ET1 = 0;
            delay(5);
            while(Change==0);
            Grate_change=Grate_1; //一下三行语句完成分数交换显示
            Grate_1=Grate_2;   
            Grate_2=Grate_change; 
            ET1 = 1;
        }
        if(Begin==0)  //如果开始键按下
        {
            delay(5);
            while(Begin==0);
            TR1 = 1;        //开启定时器1
        }
if(Pause==0)
{
delay(5);
while(Pause==0);
TR1=0;
}
        if(Time<=0)    //如果时间计数到0
        {
            Time=99;    //恢复初始时间
            TR1 = 0;    //关闭定时器1
            beef(100);    //发声
        }
    display(Grate_1,Grate_2,Time); //显示分数、时间     
    }
}
void Timer1Interrupt(void) interrupt 3   //定时器1中断函数
{
    TH1 = 0xFC;   //重赋初值
    TL1 = 0x18;
    Flag++;   //中断次数加1
    if(Flag>=1000)//1000次也就是1秒到
    {
        Flag=0;
        Time--;    //秒变量减1
    }
}
3. 篮球比赛计分器用数字电路设计
数字复电路不好整
单片机很容易制就可以实现。
8个按键,一个按键做清零,6个键分两组,分别表示A队、B队,每组3个按键,三个按键分别为:1分、2分、3分,按相应的键,加相应的分;空余的那个按键可以不用,也可以实现其他功能。
显示用7段LED数码管显示,每组显示用3位数码管,既显示0——999。
空余的那个键用来做撤销键。也就是按一下,撤销前一次的操作。这个主要是在加分错误的情况下用来撤销前一次操作。
4. 一、设计题目:篮球电子计分器
#include<reg51.h>
#include<INTRINS.h>
#defineu16unsignedint
#defineu8unsignedchar
sbitk1=P1^0;//加1
sbitk2=P1^1;//加2
sbitk3=P1^2;//加3
sbitk4=P1^3;//减1
sbitk5=P1^4;//连按2下开始或停止计时,按下该键再按加减分键给另一边加分
sbitbz=P1^6;//按按键时响,不按不响
sbitled=P1^5;//创新能力不够没想到在哪加
u8key=0xff;//消抖后的有效按键值
u8key_down=0x00;//按键下降沿扫描结果,1有效
u8key_up=0x00; //上升沿扫描结果,1有效
u8key_sc=0xff;//上次扫描的按键值
//按键扫描程序
voidscanKey(){
staticu8temp0;
staticu8ms;
u8temp=0xff;
if(k1==0)temp&=0xfe;
if(k2==0)temp&=0xfd;
if(k3==0)temp&=0xfb;
if(k4==0)temp&=0xf7;
if(k5==0)temp&=0xef;
if(temp==temp0){//按键消抖
if(++ms>=5){//连续5次扫描的值一样,则认为是稳定状态
key=temp;
ms=0;
}
}else{
temp0=temp;
ms=0;
}
key_down=key_sc&(~key);//下降沿扫描
key_up=(~key_sc)&key;//下降沿扫描
key_sc=key;
}
u8readPIN(u8port,u8pin){
codeu8tab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};
return((port&tab[pin])==0?0:1);
}
sbitdx=P3^2;
u8ds[8];//数码管显示缓存
codeu8w[]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80,}; //位码
codeu8d[]={~0xc0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,~0x90,0x00};//断码
codeu8d_huo[]={0x00,0x00,0x80,0x00,0x80,0x00,0x00,0x00,};
voiddispaly(){//显示函数
staticu8a;
if(++a>7)a=0;
P2=0xff;
P0=d[ds[a]]|d_huo[a];
dx=1;dx=0;
P2=w[a];
}voidinit() //初始化函数
{TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
}//加分和减分
voidjjf(u16*val){
if(readPIN(key_down,0)==1){//加1
*val+=1;
}
if(readPIN(key_down,1)==1){//加2
*val+=2;
}
if(readPIN(key_down,2)==1){//加3
*val+=3;
}
if(readPIN(key_down,3)==1){//减1
if(*val>0)*val-=1;
}
}
//连按程序
u8la_count=0;
u16la_js=0;
voidlan(){
if(la_js>=1000||((key&0xef)!=0xef))la_count=0;
if(readPIN(key_down,4)==1){
la_count++;
la_js=0;
}
}
u16count=0;
u16count1=0;
u16s24=24000;
u8s24off_flag=0;
voidmain()//主函数
{
init();
TR0=1;
while(1){
ds[0]=(count>99?count/100%10:10);//将当前分值送到数码管缓存
ds[1]=(count>9?count/10%10:10);
ds[2]=count%10;
ds[3]=(s24>9999?s24/10000%10:10);
ds[4]=s24/1000%10;
ds[5]=(count1>99?count1/100%10:10);//将当前分值送到数码管缓存
ds[6]=(count1>9?count1/10%10:10);
ds[7]=count1%10;
scanKey();//扫描按键
bz=(key!=0xff?0:1);//按下按键,蜂鸣器响
if(readPIN(key,4)==0){//判断给哪一方加减分
jjf(&count);
}else{
jjf(&count1);
}
lan();
if(la_count==2){
if(s24off_flag==0){
s24=24000;
s24off_flag=1;
}else{
s24off_flag=0;
}
la_count=3;
}
}
}voidtimer0()interrupt1//定时器
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
dispaly();
if(s24off_flag==1){
if(s24>0)s24--;
}
if(la_js<60000)la_js++;
}
单片机最小系统自己画吧,功能设计可以再探讨,你在问一下出这题的人,为什么不用两个573,用一个跟没用有什么区别
5. 篮球计时计分器
KEY_NUM EQU 30H 
MD EQU 31H 
BEEP BIT P2.0 
LED_R BIT P1.0 
LED_Y BIT P1.2 
LED_G BIT P1.4 
org 000h 
JMP main 
org 0023h 
ljmp rx_int 
ORG 100H 
main:MOV SP ,#60H 
mov tmod,#23h 
mov scon,#0d0h 
mov th1,#0e6h ;串行通信1200-n-2 
mov tl0,#0E6H 
setb tr1 
setb es 
setb ea 
MOV P1,#00H ;TEST 
MOV P0,#00H 
MOV P2,#00H 
LCALL DELAY 
MOV P1,#0FFH ;INIT 
MOV P2,#0FFH 
MOV P0,#0FFH 
MOV P3,#0FFH 
CLR A 
MOV MD ,#00H 
MOV A,P3 ;读地址开关SW1-SW4 
CPL A 
ANL A,#0F0H 
SWAP A 
MOV MD,A 
RL A 
MOV DPTR,#JUMP 
JMP @A+DPTR 
JUMP: AJMP MOD0 ;子程序散转到MOD0__MOD15 
;------------P2 SEC_WATCH_TABLE--------------- 
;电子秒表 
MOD0:MOV A,MD 
MOV P1,#0FFH 
MOV R0,#00H 
MOV A,#00H 
MOV P3,#0FEH 
MOV P0,#0C0H 
MOV P2,#0C0H 
M1:MOV R3,#10h 
M2:LCALL DELAY ;SEC_LOOP 
CLR P1.0 
DJNZ R3,M2 
MOV A,R0 
ADD A,#01H 
DA A 
MOV R0,A 
LCALL DISP1 
CJNE R0,#15h,M1 
clr p2.7 
lcall delay 
setb p2.7 
JMP MOD1 
MOD1:MOV A,MD 
MOV P1,#0FFH 
MOV R0,#00H 
MOV A,#00H 
MOV P3,#0FEH 
MOV P0,#0C0H 
MOV P2,#0C0H 
M3:MOV R3,#10h 
M4:LCALL DELAY ;SEC_LOOP 
CLR P1.4 
DJNZ R3,M4 
MOV A,R0 
ADD A,#01H 
DA A 
MOV R0,A 
LCALL DISP1 
CJNE R0,#15h,M3 
clr p2.7 
lcall delay 
setb p2.7 
JMP MOD0 
;----------------rx---------- 
;串行中断 
rx_int:push acc 
push psw 
jnb ri,end_rx 
clr ri 
mov a,sbuf 
mov sbuf,a 
jnb ti,$ 
clr ti 
clr beep 
lcall delay 
lcall delay 
setb beep 
end_rx: pop psw 
pop acc 
reti 
;===============SUB LIB============================ 
DISP0: MOV P0,#8CH ;"P" 
PUSH ACC 
MOV DPTR,#LED_CODE_P2 
MOVC A,@A+DPTR 
MOV P2,A 
POP ACC 
RET 
DISP1:;DA A 
PUSH ACC 
ANL A,#0FH 
MOV DPTR,#LED_CODE_P2 
MOVC A,@A+DPTR 
MOV P2,A 
POP ACC 
ANL A,#0F0H 
SWAP A 
mov dptr,#led_code_p0 
MOVC A,@A+DPTR 
MOV P0,A 
RET 
DELAY: MOV R6,#0F0H 
DL1: MOV R7,#0F0H 
DJNZ R7,$ 
DJNZ R6,DL1 
RET 
KEY: MOV A,P3 ;jianpian 
ANL A,#0FH 
MOV KEY_NUM,A 
LCALL DELAY 
MOV A,P3 
ANL A,#0FH 
CJNE A,KEY_NUM,KEY 
CPL A 
ANL A,#0FH 
MOV KEY_NUM,A 
RET 
LED_CODE_P0: 
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;"0-F" 
DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH 
LED_CODE_P2: 
DB 00000011B,10011111B,00100101B,00001101B 
DB 10011001B,01001001B,01000001B,00011111B 
DB 00000001B,00001001B,00010001B,11000001B 
DB 01100011B,10000101B,01100001B,01110001B 
END 
6. 篮球比赛计分器的设计

7. 篮球计分器的设计及制作
1、用来Protel软件绘制出本设计任务的电源路原理图,并设计印制电路板图及制作印制电路板。 2、连接仿真器,将本设计任务的程序输入计算机,并进行仿真调试及运行。 3、连接编程器,将仿真通过的程序代码下载到单片机中,脱机运行并观察电路运行情况。 4、如把按键去抖动程序删除,即删除LCALL DELAY指令,仿真运行,观察运行情况。 5、如把等待按键释放的程序段删除,即删除“WAIT:MOV A,P0”、“ANL A,#0FH”、“CJNE A,#0FH,WAIT”三条指令,仿真运行,观察运行情况。 6、如按S1键加2分,按S2键加4分,按S3键加6分,按S4键减2分则程序应如何修改,修改后仿真运行,观察运行情况
8. 篮球计分器怎么做
找几个牌子分别写上0~9这几个数字,然后粘在一起,每一次得分就翻牌,这样是比较简便的。
9. 篮球积分器,要求74ls148,74ls00,74ls04,74ls192,555,7448,7seg-com-cat-grn,按键导线,别的都不能用
ADASFFGGHFHJGHSDFF
