单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 170|回复: 1
收起左侧

单片机篮球计分系统Proteus仿真图+代码设计

[复制链接]
sunmale 发表于 2018-12-19 19:39 | 显示全部楼层 |阅读模式
篮球计分系统设计仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png

单片机源程序:
  1. #include<reg52.h>       
  2. #include<absacc.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar code table[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0x77,0x7c,0x39,0x5e,0x79,0x71,0X00,0X40};//0-9
  6. uchar code wei[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};
  7. uchar fen=12,miao=0,miao_24=24,bf_miao=99;
  8. uchar stand_1[4]=0,stand_2[4]=0;
  9. uchar shijian[4]=0;

  10. uchar c1=20;  //20次1ms
  11. uchar jie=1;
  12. uint gole_1=0,gole_2=0;

  13. sbit A8=P2^0;  //段选
  14. sbit A9=P2^1; //位选 wei0-7
  15. sbit A10=P2^2;//位选 wei8-15

  16. sbit key_1=P1^0; //         计时+
  17. sbit key_2=P1^1; //                 -
  18. sbit key_3=P1^2; //         复位
  19. sbit key_4=P1^3; //          中断
  20. sbit key_5=P1^4; //          恢复计时
  21. sbit key_6=P1^5;  //          计分+
  22. sbit key_7=P1^6;  //        计分—
  23. sbit key_8=P1^7;  //           3

  24. sbit key_9=P3^7; //         2
  25. sbit key_10=P3^6; //         1分
  26. sbit key_11=P3^5;//         A/B
  27. //sfr P00=0x80;
  28. void delay_ms(uint z)
  29. {
  30.         uint x,y;
  31.         for(x=z;x>0;x--)
  32.         {
  33.                 for(y=110;y>0;y--);
  34.         }
  35. }
  36. void IO_init()
  37. {
  38.         A8=0;A9=0;
  39. }
  40. void time_init()
  41. {
  42.         TMOD=0x01;
  43.         TH0=(65536-50000)/256;
  44.         TL0=(65536-50000)%256;
  45.         TR0 = 1;
  46.   ET0 = 1;
  47.   EA = 1;
  48. }
  49. void display2()        //bf
  50. {
  51.         uchar i,n;
  52.         for(i=0;i<=3;i++)
  53.         {
  54.                 P0=wei[i];
  55.                 A9=1;A9=0;
  56.                 P0=table[stand_1[i]];
  57.                 A8=1;A8=0;
  58.                 delay_ms(3);
  59.                 P0=0;
  60.                 A9=1;A9=0;
  61.                 A8=1;A8=0;
  62.         }
  63.         for(n=4;n<=7;n++)
  64.         {
  65.                 P0=wei[n];
  66.                 A9=1;A9=0;
  67.                 P0=table[stand_2[n-4]];
  68.                 A8=1;A8=0;
  69.                 delay_ms(3);
  70.                 P0=0;
  71.                 A9=1;A9=0;
  72.                 A8=1;A8=0;
  73.         }
  74. }

  75. void display1()        //sj
  76. {
  77.         //uchar shijian[4];
  78.         uchar i;
  79.         for(i=0;i<=3;i++)
  80.         {
  81.                 P0=wei[i];
  82.                 A10=1;A10=0;
  83.                 P0=table[shijian[i]];
  84.                 A8=1;A8=0;
  85.                 delay_ms(3);
  86.                 P0=0;
  87.                 A10=1;A10=0;
  88.                 A8=1;A8=0;
  89.         }
  90. }               
  91. void display3()
  92. {
  93.         P0=wei[6];        //jieci
  94.         A10=1;A10=0;
  95.         P0=table[jie];
  96.         A8=1;A8=0;
  97.         delay_ms(3);
  98.         P0=0;
  99.         A10=1;A10=0;
  100.         A8=1;A8=0;

  101.         P0=wei[4];
  102.         A10=1;A10=0;
  103.         P0=table[miao_24/10%10];
  104.         A8=1;A8=0;
  105.         delay_ms(3);
  106.         P0=0;
  107.         A10=1;A10=0;
  108.         A8=1;A8=0;
  109.         P0=wei[5];       
  110.         A10=1;A10=0;
  111.         P0=table[miao_24%10];
  112.         A8=1;A8=0;
  113.         delay_ms(3);
  114.         P0=0;
  115.         A10=1;A10=0;
  116.         A8=1;A8=0;
  117. }

  118. uchar temp_AorB=0,jia_jian=0;  //默认为加

  119. void keyscan()
  120. {
  121.         if(key_4==0)EA=0;//中断
  122.         if(key_5==0)EA=1;//恢复计时
  123.         if(key_6==0)jia_jian=0;//jia
  124.         if(key_7==0)jia_jian=1;//jian

  125.         if(key_3==0)//复位
  126.         {
  127.            delay_ms(10);
  128.            if(key_3==0)
  129.            {
  130.                            while(!key_3);
  131.                         miao_24=24;
  132.            }
  133.         }
  134.         if(key_11==0)//a/b
  135.         {
  136.            delay_ms(10);
  137.            if(key_11==0)
  138.            {
  139.                            while(!key_11);
  140.                         temp_AorB=!temp_AorB;
  141.            }
  142.         }

  143.         if(temp_AorB==0)//A操作
  144.         {
  145.                 if(jia_jian==0)//+
  146.                 {
  147.                         if(key_8==0)//3
  148.                         {
  149.                                  delay_ms(10);
  150.                                  if(key_8==0)
  151.                                  {
  152.                                          while(!key_8);
  153.                                         gole_1+=3;//jia
  154.                                  }
  155.                         }
  156.                         if(key_9==0)//2
  157.                         {
  158.                                  delay_ms(10);
  159.                                  if(key_9==0)
  160.                                  {
  161.                                          while(!key_9);
  162.                                         gole_1+=2;//jia
  163.                                  }
  164.                         }
  165.                         if(key_10==0)//1
  166.                         {
  167.                                  delay_ms(10);
  168.                                  if(key_10==0)
  169.                                  {
  170.                                          while(!key_10);
  171.                                         gole_1+=1;//jia
  172.                                  }
  173.                         }
  174.                 }
  175.                 else{         //-
  176.                         if(jia_jian==1)//+
  177.                         {
  178.                                 if(key_8==0)//3
  179.                                 {
  180.                                          delay_ms(10);
  181.                                          if(key_8==0)
  182.                                          {
  183.                                                  while(!key_8);
  184.                                                 gole_1-=3;//jia
  185.                                          }
  186.                                 }
  187.                                 if(key_9==0)//2
  188.                                 {
  189.                                          delay_ms(10);
  190.                                          if(key_9==0)
  191.                                          {
  192.                                                  while(!key_9);
  193.                                                 gole_1-=2;//jia
  194.                                          }
  195.                                 }
  196.                                 if(key_10==0)//1
  197.                                 {
  198.                                          delay_ms(10);
  199.                                          if(key_10==0)
  200.                                          {
  201.                                                  while(!key_10);
  202.                                                 gole_1-=1;//jia
  203.                                          }
  204.                                 }
  205.                         }
  206.                 }
  207.         }
  208.         else{ //B操作
  209.                 if(jia_jian==0)//+
  210.                 {
  211.                         if(key_8==0)//3
  212.                         {
  213.                                  delay_ms(10);
  214.                                  if(key_8==0)
  215.                                  {
  216.                                          while(!key_8);
  217.                                         gole_2+=3;//jia
  218.                                  }
  219.                         }
  220.                         if(key_9==0)//2
  221.                         {
  222.                                  delay_ms(10);
  223.                                  if(key_9==0)
  224.                                  {
  225.                                          while(!key_9);
  226.                                         gole_2+=2;//jia
  227.                                  }
  228.                         }
  229.                         if(key_10==0)//1
  230.                         {
  231.                                  delay_ms(10);
  232.                                  if(key_10==0)
  233.                                  {
  234.                                          while(!key_10);
  235.                                         gole_2+=1;//jia
  236.                                  }
  237.                         }
  238.                 }
  239.                 else{         //-
  240.                         if(jia_jian==1)//+
  241.                         {
  242.                                 if(key_8==0)//3
  243.                                 {
  244.                                          delay_ms(10);
  245.                                          if(key_8==0)
  246.                                          {
  247.                                                  while(!key_8);
  248.                                                 gole_2-=3;//jia
  249.                                          }
  250.                                 }
  251.                                 if(key_9==0)//2
  252.                                 {
  253.                                          delay_ms(10);
  254.                                          if(key_9==0)
  255.                                          {
  256.                                                  while(!key_9);
  257.                                                 gole_2-=2;//jia
  258.                                          }
  259.                                 }
  260.                                 if(key_10==0)//1
  261.                                 {
  262.                                          delay_ms(10);
  263.                                          if(key_10==0)
  264.                                          {
  265.                                                  while(!key_10);
  266.                                                 gole_2-=1;//jia
  267.                                          }
  268.                                 }
  269.                         }
  270.                 }
  271.         }
  272. }
  273. void main()
  274. {
  275.         IO_init();
  276.         time_init();
  277.         while(1)
  278.         {
  279.                 if(jie==4)if(fen==0&&bf_miao==0&&miao==0)while(1)EA = 0;//结束
  280.                 if(gole_1<=0)gole_1=0;
  281.                 if(gole_2<=0)gole_2=0;
  282.                 keyscan();
  283.                 if(miao_24==0)EA=0;
  284.                 if(miao==0)
  285.                 {
  286.                         fen--;
  287.                         miao=59;
  288.                         if(fen==0)
  289.                         {
  290.                                 jie++;
  291.                                 if(jie==5)jie=0;
  292.                                 if(fen==0)fen=12;
  293.                         }
  294.                 }


  295.                 stand_1[0]=gole_1/1000%10;
  296.                 stand_1[1]=gole_1/100%10;
  297.                 stand_1[2]=gole_1/10%10;
  298.                 stand_1[3]=gole_1%10;
  299.                
  300.                 stand_2[0]=gole_2/1000%10;
  301.                 stand_2[1]=gole_2/100%10;
  302.                 stand_2[2]=gole_2/10%10;
  303.                 stand_2[3]=gole_2%10;

  304.                 shijian[0]=fen/10%10;
  305.                 shijian[1]=fen%10;
  306.                 shijian[2]=miao/10%10;
  307.                 shijian[3]=miao%10;

  308.                 display2();
  309.                   display1();
  310.                 display3();
  311.         }
  312. }
  313. void t0_time() interrupt 1 using 1
  314. {
  315.         TH0=(65536-50000)/256;
  316.         TL0=(65536-50000)%256;
  317.         c1=c1-1;
  318.         if(c1==0)
  319.         {
  320.                 miao--;
  321.                 miao_24--;
  322.                   c1=20;
  323.         }

  324. }
  325.        
  326.        

  327.                        
  328.                
复制代码

所有资料51hei提供下载:
篮球计分系统.7z (43.71 KB, 下载次数: 3)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

紫色的云 发表于 2019-1-5 11:06 | 显示全部楼层
谢谢楼主的资料
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机.

Powered by 单片机教程网

快速回复 返回顶部 返回列表