找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5621|回复: 6
收起左侧

篮球计分器(单片机仿真设计)

  [复制链接]
ID:262128 发表于 2017-12-29 09:43 | 显示全部楼层 |阅读模式
篮球计分器(设计)仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.jpg 0.png 0.png

单片机源程序如下:
  1. #include<reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. uchar code table[]=".. Play ball! ....";
  5. uchar code table1[]="Welcome to here!" ;
  6. sbit key_ST=P1^5;                 //功能键(开始/暂停)
  7. sbit key_A1=P1^0;                 //功能键(A队分数加1)
  8. sbit key_A2=P1^3;                 //功能键(A队分数加2)
  9. sbit key_1A=P1^6;                 //功能键(A队分数减1)
  10. sbit key_B1=P1^1;                 //功能键(B队分数加1)
  11. sbit key_B2=P1^4;                 //功能键(B队分数加2)
  12. sbit key_1B=P1^7;                 //功能键(B队分数减1)
  13. sbit key_EX=P1^2;                 //功能键(交换场地,A/B两队分数交换)
  14. sbit key_JS=P3^0;                 //功能键(比赛节数加1)
  15. sbit FMQ=P3^3;                         //蜂鸣器
  16. sbit lcdrs=P3^5;                 //LCD显示的数据/命令选择端
  17. sbit lcden=P3^4;                 //LCD显示的使能信号
  18. uchar flag,ms,mg,ss,sg,ags,agg,bgs,bgg,num,num1,num2,js=1,C,D,t,min=0,time_fmq;        
  19. int sec=12;
  20. void delayms(uint xms)//定义延时函数
  21. {
  22.         uint i,j;
  23.         for(i=xms;i>0;i--)
  24.                 for(j=110;j>0;j--);
  25. }
  26. void write_data(uchar date)//定义为数据模式
  27. {
  28.         lcdrs=1;
  29.         P0=date;
  30.         delayms(5);
  31.         lcden=1;
  32.         delayms(5);
  33.         lcden=0;
  34. }
  35. void write_com(uchar com)//定义为命令模式
  36. {
  37.         lcdrs=0;
  38.         P0=com;
  39.         delayms(5);
  40.         lcden=1;
  41.         delayms(5);
  42.         lcden=0;
  43. }

  44. void lcd_init() //LCD显示屏的初始化
  45. {
  46.         lcden=0;
  47.         write_com(0x38);
  48.         write_com(0x0c);
  49.         write_com(0x06);
  50.         write_com(0x01);
  51. }
  52. void init()        //LCD显示屏的初始化2(即输出“T-”、“Q-”、“A:”、“B:”)
  53. {
  54.         lcden=0;
  55.         write_com(0x82);
  56.         write_data('T');
  57.         write_data('-');

  58.         write_com(0x8a);
  59.         write_data('Q');
  60.         write_data('-');

  61.         write_com(0x80+0x43);
  62.         write_data('A');
  63.         write_data(':');

  64.         write_com(0x80+0x49);
  65.         write_data('B');
  66.         write_data(':');
  67. }
  68. void init_start()//LCD显示屏的初始化2(即输出“T-”、“Q-”、“A:”、“B:”)
  69. {
  70.         lcden=0;
  71.         write_com(0x80+0x10);
  72.         for(num2=0;num2<16;num2++)
  73.         {
  74.                 write_data(table1[num2]);
  75.                 delayms(5);
  76.         }

  77.         write_com(0x80+0x50);
  78.         for(num2=0;num2<17;num2++)
  79.         {
  80.                 write_data(table[num2]);
  81.                 delayms(5);
  82.         }
  83.         for(num2=0;num2<16;num2++)
  84.         {
  85.                 write_com(0x18);
  86.                 delayms(400);
  87.         }
  88. }
  89. void display(uchar min,int sec,uchar C,uchar D,uchar js)//显示函数
  90. {
  91.         ss=sec/10;
  92.         sg=sec%10;
  93.         ms=min/10;
  94.         mg=min%10;
  95.         ags=C/10;
  96.         agg=C%10;
  97.         bgs=D/10;
  98.         bgg=D%10;

  99.         write_com(0x84);
  100.         write_data(0x30+ms);

  101.         write_data(0x30+mg);

  102.         write_data(':');

  103.         write_data(0x30+ss);

  104.         write_data(0x30+sg);

  105.         write_com(0x8d-1);
  106.         write_data(0x30+js);

  107.         write_com(0x80+0x45);
  108.         write_data(0x30+ags);
  109.         write_data(0x30+agg);

  110.         write_com(0x80+0x4b);
  111.         write_data(0x30+bgs);
  112.         write_data(0x30+bgg);               
  113. }
  114. void main()
  115. {
  116.         TMOD=0x11;//定义定时器0的工作方式为0001
  117.         TH0=(65536-45872)/256;//装初值
  118.         TL0=(65536-45872)%256;
  119.         TH1=(65536-45872)/256;//装初值
  120.         TL1=(65536-45872)%256;
  121.         EA=1;//打开总中断
  122.         ET0=1;//打开定时器0的中断
  123.         TR0=0;
  124.         ET1=1;
  125.         TR1=0;
  126.         lcd_init();
  127.         init_start();                                                
  128.         while(1)
  129.         {
  130.                 TR1=0;

  131.                 if(key_ST==0)                                                
  132.                 {
  133.                         delayms(5);
  134.                         if(key_ST==0)
  135.                         {
  136.                                 FMQ=0;
  137.                                 if(flag==0)
  138.                                 {
  139.                                         lcd_init();
  140.                                         init();
  141.                                 }
  142.                                 flag=1;
  143.                                 TR0=~TR0;        
  144.                         }
  145.                         while(!key_ST)
  146.                                 display(min,sec,C,D,js);
  147.                         FMQ=1;
  148.                 }

  149.                 if(key_A1==0)
  150.                 {
  151.                         delayms(5);
  152.                         if(key_A1==0)
  153.                         {        
  154.                                 FMQ=0;
  155.                                 C++;
  156.                         }
  157.                         while(!key_A1)
  158.                                 display(min,sec,C,D,js);
  159.                         FMQ=1;
  160.                 }

  161.                 if(key_A2==0)
  162.                 {
  163.                         delayms(5);
  164.                         if(key_A2==0)
  165.                         {
  166.                                 FMQ=0;
  167.                                 C+=2;
  168.                         }
  169.                         while(!key_A2)
  170.                                 display(min,sec,C,D,js);
  171.                         FMQ=1;
  172.                 }

  173.                 if(key_1A==0)
  174.                 {
  175.                         delayms(5);
  176.                         if(key_1A==0)
  177.                         {
  178.                                 FMQ=0;
  179.                                 C--;
  180.                         }
  181.                         while(!key_1A)
  182.                                 display(min,sec,C,D,js);
  183.                         FMQ=1;
  184.                 }

  185.                 if(key_B1==0)
  186.                 {
  187.                         delayms(5);
  188.                         if(key_B1==0)
  189.                         {
  190.                                 FMQ=0;
  191.                                 D++;
  192.                         }
  193.                         while(!key_B1)
  194.                                 display(min,sec,C,D,js);
  195.                         FMQ=1;
  196.                 }

  197.                 if(key_B2==0)
  198.                 {
  199.                         delayms(5);
  200.                         if(key_B2==0)
  201.                         {
  202.                                 FMQ=0;
  203.                                 D+=2;
  204.                         }
  205.                         while(!key_B2)
  206.                                 display(min,sec,C,D,js);
  207.                         FMQ=1;
  208.                 }

  209.                 if(key_1B==0)
  210.                 {
  211.                         delayms(5);
  212.                         if(key_1B==0)
  213.                         {
  214.                                 FMQ=0;
  215.                                 D--;
  216.                         }
  217.                         while(!key_1B)
  218.                                 display(min,sec,C,D,js);
  219.                         FMQ=1;
  220.                 }

  221.                 while(min==0&&sec==0)
  222.                 {
  223.                         TR0=0;
  224.                         TR1=1;
  225.                         if(key_ST==0)
  226.                         {
  227.                                 delayms(5);
  228.                                 if(key_ST==0)
  229.                                 {
  230.                                         FMQ=0;
  231.                                         min=11;
  232.                                         sec=60;
  233.                                         TR0=~TR0;
  234.                                 }
  235.                                 while(!key_ST)
  236.                                         display(min,sec,C,D,js);
  237.                                 FMQ=1;
  238.                         }
  239.                         if((key_EX==0)&&(js==2))
  240.                         {
  241.                                 delayms(10);
  242.                                 if((key_EX==0)&&(js=2))
  243.                                 {
  244.                                         FMQ=0;

  245.                                         write_com(0x80+0x43);
  246.                                         write_data('B');
  247.                                         write_com(0x80+0x49);
  248.                                         write_data('A');

  249.                                         t=C;
  250.                                         C=D;
  251.                                         D=t;
  252.                                 }
  253.                                 while(!key_EX)
  254.                                         display(min,sec,C,D,js);
  255.                                 FMQ=1;
  256.                         }
  257.                         if(key_JS==0)
  258.                         {
  259.                                 delayms(10);
  260.                                 if(key_JS==0)
  261.                                 {
  262.                                         FMQ=0;
  263.                                         js++;
  264.                                 }
  265.                                 while(!key_JS)
  266.                                         display(min,sec,C,D,js);
  267.                                 FMQ=1;
  268.                         }
  269. ……………………

  270. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
篮球计分器.zip (77.53 KB, 下载次数: 132)

评分

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

查看全部评分

回复

使用道具 举报

ID:351161 发表于 2018-6-13 15:45 | 显示全部楼层
111111111111111111111111111111
回复

使用道具 举报

ID:436437 发表于 2018-11-30 15:01 | 显示全部楼层
发的对的,,,但是有没有不用液晶屏用四位一体数码管记时,三位一体数码管x2记分的程序
回复

使用道具 举报

ID:447718 发表于 2018-12-17 09:57 | 显示全部楼层
真的很不错,可以直接用
回复

使用道具 举报

ID:447718 发表于 2018-12-17 10:18 | 显示全部楼层
这个很好用,对自己的学习帮助很大
回复

使用道具 举报

ID:446960 发表于 2018-12-17 12:45 | 显示全部楼层
我的不能运行,请问怎么解决啊
回复

使用道具 举报

ID:447942 发表于 2018-12-17 14:42 | 显示全部楼层
请问一下 ,交换场地怎么点,实现不了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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