找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1609|回复: 0
打印 上一主题 下一主题
收起左侧

篮球记分系统,新手

[复制链接]
跳转到指定楼层
楼主
ID:151787 发表于 2017-9-12 00:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
篮球记分系统

单片机源程序如下:
  1. #include<reg51.h>

  2. #define uchar unsigned char
  3. #define uint  unsigned int

  4. #define GPIO_DIG   P0       
  5. #define GPIO_PLACE P2       
  6. #define GPIO_KEY   P1

  7. uchar code DIG_PLACE[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  8. uchar code DIG_CODE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  9. uchar code DIG_CODE_POINT[10] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

  10. sbit buzzer= P3^0;

  11. uchar KeyValue;
  12. uchar second1=0,second2=0,minute1=0,minute2=0;

  13. char score1=0,score2=0,score3=0,score4=0;

  14. uint Count=0;

  15. void Time0_Init()
  16. {
  17.         TMOD = 0x01;
  18.         TH0  = (65535-50000)/256;  
  19.         TL0  = (65535-50000)%256;
  20.         EA = 1;          
  21.         TR0 = 1;               
  22.         ET0=1;
  23.         PT0=1;
  24. }

  25. void delay_ms(uint del)
  26. {
  27.         uint i,j;
  28.         for(i=0; i<del; i++)
  29.                 for(j=0; j<114; j++);  
  30.                        
  31. }

  32. void Delay10ms(uint c)   
  33. {
  34.     uchar a, b;

  35.     for (;c>0;c--)
  36.         {
  37.                 for (b=38;b>0;b--)
  38.                 {
  39.                         for (a=130;a>0;a--);
  40.                 }         
  41.         }      
  42. }



  43. void DigDisplay(uchar i,uchar j)
  44. {
  45.                 GPIO_PLACE = DIG_PLACE[i];         
  46.           if(i==1|i==5)
  47.                 {
  48.                         GPIO_DIG   = DIG_CODE_POINT[j];
  49.                 }
  50.                 else
  51.                 {
  52.                 GPIO_DIG   = DIG_CODE[j];
  53.                 }
  54.     delay_ms(1);         
  55.                 GPIO_DIG   = 0x00;
  56. }

  57. void KeyDown(void)
  58. {
  59.         char a = 0;
  60.         GPIO_KEY=0x0f;
  61.         if(GPIO_KEY!=0x0f)
  62.         {
  63.                 Delay10ms(1);
  64.                 if(GPIO_KEY!=0x0f)
  65.                 {
  66.                        

  67.                         GPIO_KEY=0X0F;
  68.                         switch(GPIO_KEY)
  69.                         {
  70.                                 case(0X07):        KeyValue=0;break;
  71.                                 case(0X0b):        KeyValue=4;break;
  72.                                 case(0X0d): KeyValue=8;break;
  73.                                 case(0X0e):        KeyValue=12;break;
  74.                         }

  75.                         GPIO_KEY=0XF0;
  76.                         switch(GPIO_KEY)
  77.                         {
  78.                                 case(0X70):        KeyValue=KeyValue+3;break;
  79.                                 case(0Xb0):        KeyValue=KeyValue+2;break;
  80.                                 case(0Xd0): KeyValue=KeyValue+1;break;
  81.                                 case(0Xe0):        KeyValue=KeyValue;break;
  82.                         }
  83.                         while((a<50) && (GPIO_KEY!=0xf0))         
  84.                         {
  85.                                 Delay10ms(1);
  86.                                 a++;
  87.                         }
  88.                 }
  89.         }
  90. }

  91. void Displayall()
  92. {
  93.   DigDisplay(7,second1);
  94.   delay_ms(1);
  95.         DigDisplay(6,second2);
  96.         delay_ms(1);
  97.         DigDisplay(5,minute1);
  98.         delay_ms(1);
  99.         DigDisplay(4,minute2);
  100.         delay_ms(1);
  101.         DigDisplay(3,score1);
  102.         delay_ms(1);
  103.         DigDisplay(2,score2);
  104.         delay_ms(1);
  105.         DigDisplay(1,score3);
  106.         delay_ms(1);
  107.         DigDisplay(0,score4);
  108.         delay_ms(1);
  109. }

  110. void main()
  111. {
  112.        
  113.        
  114.         while(1)
  115.         {
  116.                   KeyDown();
  117.                 Displayall();
  118.                 if(KeyValue==3)
  119.                 {
  120.       Time0_Init();
  121.     }
  122.                
  123.                 if(KeyValue==5)
  124.                 {
  125.       score1++;
  126.                         Displayall();
  127.                         if(score1>=10)
  128.                         {
  129.          score1=0;
  130.                                  score2++;
  131.                                 Displayall();
  132.       }
  133.     }
  134.                
  135.                 if(KeyValue==6)
  136.                 {
  137.                   Displayall();
  138.       score3++;
  139.                         if(score3>=10)
  140.                         {
  141.          score3=0;
  142.                                  score4++;
  143.                                 Displayall();
  144.       }
  145.     }
  146.                
  147.                 if(KeyValue==1)
  148.                 {
  149.       score1--;
  150.                         Displayall();
  151.                         if(score1<0)
  152.                         {
  153.          score1=9;
  154.                                  score2--;
  155.                                 Displayall();
  156.       }
  157.                                
  158.     }
  159.                
  160.                 if(KeyValue==2)
  161.                 {
  162.       score3--;
  163.                         Displayall();
  164.                         if(score3<0)
  165.                         {
  166.          score3=9;
  167.                                  score4--;
  168.                                 Displayall();
  169.       }
  170.     }
  171.                 Displayall();
  172.                    KeyValue=0;
  173.         }
  174.                  

  175. }

  176. void Time0_Int() interrupt 1
  177. {
  178.         TH0  = (65535-500)/256;
  179.         TL0  = (65535-500)%256;
  180.         Count++;       
  181.          if(Count==2000)
  182.         {   
  183.                 Count=0;
  184.       second1++;
  185.                         if(second1==10)
  186.         {
  187.                                         second2++;
  188.           second1=0;
  189. }
  190.                         if(second2==6&&second1==0)
  191.         {
  192.                                         minute1++;
  193.           second2=0;
  194. }
  195.                         if(minute1==10)
  196.         {
  197.                                         minute2++;
  198.           minute1=0;
  199. }
  200.                 }
  201.                     if(minute2==2&&minute1==0||minute2==4&&minute1==0)
  202.                 {
  203.                                buzzer=~buzzer;
  204.                 }

  205.        
  206. }


复制代码

所有资料51hei提供下载:
Program.rar (35.7 KB, 下载次数: 10)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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