籃球計分系統設計仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (157.21 KB, 下載次數: 40)
下載附件
2022-3-12 00:42 上傳
0.png (31.71 KB, 下載次數: 46)
下載附件
2018-12-20 02:22 上傳
0.png (39 KB, 下載次數: 44)
下載附件
2018-12-20 02:22 上傳
單片機源程序:
- #include<reg52.h>
- #include<absacc.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code table[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0x77,0x7c,0x39,0x5e,0x79,0x71,0X00,0X40};//0-9
- uchar code wei[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};
- uchar fen=12,miao=0,miao_24=24,bf_miao=99;
- uchar stand_1[4]=0,stand_2[4]=0;
- uchar shijian[4]=0;
- uchar c1=20; //20次1ms
- uchar jie=1;
- uint gole_1=0,gole_2=0;
- sbit A8=P2^0; //段選
- sbit A9=P2^1; //位選 wei0-7
- sbit A10=P2^2;//位選 wei8-15
- sbit key_1=P1^0; // 計時+
- sbit key_2=P1^1; // -
- sbit key_3=P1^2; // 復位
- sbit key_4=P1^3; // 中斷
- sbit key_5=P1^4; // 恢復計時
- sbit key_6=P1^5; // 計分+
- sbit key_7=P1^6; // 計分—
- sbit key_8=P1^7; // 3
- sbit key_9=P3^7; // 2
- sbit key_10=P3^6; // 1分
- sbit key_11=P3^5;// A/B
- //sfr P00=0x80;
- void delay_ms(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- {
- for(y=110;y>0;y--);
- }
- }
- void IO_init()
- {
- A8=0;A9=0;
- }
- void time_init()
- {
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TR0 = 1;
- ET0 = 1;
- EA = 1;
- }
- void display2() //bf
- {
- uchar i,n;
- for(i=0;i<=3;i++)
- {
- P0=wei[i];
- A9=1;A9=0;
- P0=table[stand_1[i]];
- A8=1;A8=0;
- delay_ms(3);
- P0=0;
- A9=1;A9=0;
- A8=1;A8=0;
- }
- for(n=4;n<=7;n++)
- {
- P0=wei[n];
- A9=1;A9=0;
- P0=table[stand_2[n-4]];
- A8=1;A8=0;
- delay_ms(3);
- P0=0;
- A9=1;A9=0;
- A8=1;A8=0;
- }
- }
- void display1() //sj
- {
- //uchar shijian[4];
- uchar i;
- for(i=0;i<=3;i++)
- {
- P0=wei[i];
- A10=1;A10=0;
- P0=table[shijian[i]];
- A8=1;A8=0;
- delay_ms(3);
- P0=0;
- A10=1;A10=0;
- A8=1;A8=0;
- }
- }
- void display3()
- {
- P0=wei[6]; //jieci
- A10=1;A10=0;
- P0=table[jie];
- A8=1;A8=0;
- delay_ms(3);
- P0=0;
- A10=1;A10=0;
- A8=1;A8=0;
- P0=wei[4];
- A10=1;A10=0;
- P0=table[miao_24/10%10];
- A8=1;A8=0;
- delay_ms(3);
- P0=0;
- A10=1;A10=0;
- A8=1;A8=0;
- P0=wei[5];
- A10=1;A10=0;
- P0=table[miao_24%10];
- A8=1;A8=0;
- delay_ms(3);
- P0=0;
- A10=1;A10=0;
- A8=1;A8=0;
- }
- uchar temp_AorB=0,jia_jian=0; //默認為加
- void keyscan()
- {
- if(key_4==0)EA=0;//中斷
- if(key_5==0)EA=1;//恢復計時
- if(key_6==0)jia_jian=0;//jia
- if(key_7==0)jia_jian=1;//jian
- if(key_3==0)//復位
- {
- delay_ms(10);
- if(key_3==0)
- {
- while(!key_3);
- miao_24=24;
- }
- }
- if(key_11==0)//a/b
- {
- delay_ms(10);
- if(key_11==0)
- {
- while(!key_11);
- temp_AorB=!temp_AorB;
- }
- }
- if(temp_AorB==0)//A操作
- {
- if(jia_jian==0)//+
- {
- if(key_8==0)//3
- {
- delay_ms(10);
- if(key_8==0)
- {
- while(!key_8);
- gole_1+=3;//jia
- }
- }
- if(key_9==0)//2
- {
- delay_ms(10);
- if(key_9==0)
- {
- while(!key_9);
- gole_1+=2;//jia
- }
- }
- if(key_10==0)//1
- {
- delay_ms(10);
- if(key_10==0)
- {
- while(!key_10);
- gole_1+=1;//jia
- }
- }
- }
- else{ //-
- if(jia_jian==1)//+
- {
- if(key_8==0)//3
- {
- delay_ms(10);
- if(key_8==0)
- {
- while(!key_8);
- gole_1-=3;//jia
- }
- }
- if(key_9==0)//2
- {
- delay_ms(10);
- if(key_9==0)
- {
- while(!key_9);
- gole_1-=2;//jia
- }
- }
- if(key_10==0)//1
- {
- delay_ms(10);
- if(key_10==0)
- {
- while(!key_10);
- gole_1-=1;//jia
- }
- }
- }
- }
- }
- else{ //B操作
- if(jia_jian==0)//+
- {
- if(key_8==0)//3
- {
- delay_ms(10);
- if(key_8==0)
- {
- while(!key_8);
- gole_2+=3;//jia
- }
- }
- if(key_9==0)//2
- {
- delay_ms(10);
- if(key_9==0)
- {
- while(!key_9);
- gole_2+=2;//jia
- }
- }
- if(key_10==0)//1
- {
- delay_ms(10);
- if(key_10==0)
- {
- while(!key_10);
- gole_2+=1;//jia
- }
- }
- }
- else{ //-
- if(jia_jian==1)//+
- {
- if(key_8==0)//3
- {
- delay_ms(10);
- if(key_8==0)
- {
- while(!key_8);
- gole_2-=3;//jia
- }
- }
- if(key_9==0)//2
- {
- delay_ms(10);
- if(key_9==0)
- {
- while(!key_9);
- gole_2-=2;//jia
- }
- }
- if(key_10==0)//1
- {
- delay_ms(10);
- if(key_10==0)
- {
- while(!key_10);
- gole_2-=1;//jia
- }
- }
- }
- }
- }
- }
- void main()
- {
- IO_init();
- time_init();
- while(1)
- {
- if(jie==4)if(fen==0&&bf_miao==0&&miao==0)while(1)EA = 0;//結束
- if(gole_1<=0)gole_1=0;
- if(gole_2<=0)gole_2=0;
- keyscan();
- if(miao_24==0)EA=0;
- if(miao==0)
- {
- fen--;
- miao=59;
- if(fen==0)
- {
- jie++;
- if(jie==5)jie=0;
- if(fen==0)fen=12;
- }
- }
- stand_1[0]=gole_1/1000%10;
- stand_1[1]=gole_1/100%10;
- stand_1[2]=gole_1/10%10;
- stand_1[3]=gole_1%10;
-
- stand_2[0]=gole_2/1000%10;
- stand_2[1]=gole_2/100%10;
- stand_2[2]=gole_2/10%10;
- stand_2[3]=gole_2%10;
- shijian[0]=fen/10%10;
- shijian[1]=fen%10;
- shijian[2]=miao/10%10;
- shijian[3]=miao%10;
- display2();
- display1();
- display3();
- }
- }
- void t0_time() interrupt 1 using 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- c1=c1-1;
- if(c1==0)
- {
- miao--;
- miao_24--;
- c1=20;
- }
- }
-
-
-
-
復制代碼
所有資料51hei提供下載:
籃球計分系統.7z
(69.71 KB, 下載次數: 120)
2022-3-12 00:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|