找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于LCD显示的篮球定时计分器的设计

  [复制链接]
跳转到指定楼层
楼主
ID:125504 发表于 2016-6-6 20:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    这是我大一期间制作的一个小设计,这是我第一个制作的设计哈,分享给又需要的朋友。




LCD1602显示的篮球定时计分器的51单片机程序:
  1. #include<reg52.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.                                                                        
  36. void write_com(uchar com)                                           //定义为命令模式
  37. {
  38.         lcdrs=0;
  39.         P0=com;
  40.         delayms(5);
  41.         lcden=1;
  42.         delayms(5);
  43.         lcden=0;
  44. }

  45. void lcd_init()                                                                   //LCD显示屏的初始化
  46. {
  47.         lcden=0;
  48.         write_com(0x38);
  49.         write_com(0x0c);
  50.         write_com(0x06);
  51.         write_com(0x01);
  52. }

  53. void init()                                                                          //LCD显示屏的初始化2(即输出“T-”、“Q-”、“A:”、“B:”)
  54. {
  55.         lcden=0;
  56.         write_com(0x82);
  57.         write_data('T');
  58.         write_data('-');

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

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

  65.         write_com(0x80+0x49);
  66.         write_data('B');
  67.         write_data(':');

  68. }

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

  78.         write_com(0x80+0x50);
  79.         for(num2=0;num2<17;num2++)
  80.         {
  81.                 write_data(table[num2]);
  82.                 delayms(5);
  83.         }
  84.         for(num2=0;num2<16;num2++)
  85.         {
  86.                 write_com(0x18);
  87.                 delayms(400);
  88.         }
  89. }

  90. void display(uchar min,int sec,uchar C,uchar D,uchar js)                   //显示函数
  91. {
  92.         ss=sec/10;
  93.         sg=sec%10;
  94.         ms=min/10;
  95.         mg=min%10;
  96.         ags=C/10;
  97.         agg=C%10;
  98.         bgs=D/10;
  99.         bgg=D%10;

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

  102.         write_data(0x30+mg);

  103.         write_data(':');

  104.         write_data(0x30+ss);

  105.         write_data(0x30+sg);

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

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

  111.         write_com(0x80+0x4b);
  112.         write_data(0x30+bgs);
  113.         write_data(0x30+bgg);               
  114. }

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

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

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

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

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

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

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

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

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

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

  250.                                         t=C;
  251.                                         C=D;
  252.                                         D=t;
  253.                                 }
  254.                                 while(!key_EX)
  255.                                         display(min,sec,C,D,js);
  256.                                 FMQ=1;
  257.                         }
  258.                         if(key_JS==0)
  259.                         {
  260.                                 delayms(10);
  261.                                 if(key_JS==0)
  262.                                 {
  263.                                         FMQ=0;
  264.                                         js++;
  265.                                 }
  266.                                 while(!key_JS)
  267.                                         display(min,sec,C,D,js);
  268.                                 FMQ=1;
  269.                         }
  270.                         display(min,sec,C,D,js);
  271.                 }
  272.                 display(min,sec,C,D,js);
  273.         }
  274. }
  275. void T0_time()interrupt 1                //中断0控制晶码管显示时间
  276. {
  277.         TH0=(65536-45872)/256;                // 重装初值
  278.         TL0=(65536-45872)%256;
  279.         num++;
  280.         if(num==20)
  281.         {
  282.                 num=0;
  283.                 sec--;
  284.                 if(sec<0)
  285.                 {
  286.                         sec=59;
  287.                         min--;       
  288.                 }       
  289.         }
  290. }

  291. void T1_time()interrupt 3                //中断0控制晶码管显示时间
  292. {
  293.         TH1=(65536-45872)/256;                // 重装初值
  294.         TL1=(65536-45872)%256;
  295.         num1++;
  296.         if(num1==20)
  297.         {
  298.                 num1=0;
  299.                 time_fmq++;
  300.                 if(time_fmq>=4)
  301.                         FMQ=1;
  302.                 else
  303.                         FMQ=0;
  304.         }
  305. }
复制代码

Proteus仿真.rar

45.94 KB, 下载次数: 530, 下载积分: 黑币 -5

Proteus仿真图

程序代码.rar

39.31 KB, 下载次数: 429, 下载积分: 黑币 -5

原程序代码

评分

参与人数 16黑币 +125 收起 理由
2452047173 + 5 赞一个!
瓦斯弹是 + 5 赞一个!
weixinxin + 5 赞一个!
莫非人 + 5 很给力!
hickey + 5 很给力!
奔跑的肉肉 + 5
ch24364426 + 5 赞一个!
eon_ + 5 赞一个!
大罗布 + 5 共享资料的黑币奖励!
348652560 + 5 很给力!
pam + 5 赞一个!
gongziwang + 5 很给力!
972086553 + 5 很给力!
xiaokobe + 5 回帖助人的奖励!
winkybasara + 5 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:122471 发表于 2016-6-7 07:45 | 只看该作者
交换场地是怎么回是?
回复

使用道具 举报

板凳
ID:125504 发表于 2016-6-7 18:38 | 只看该作者
高永显 发表于 2016-6-7 07:45
交换场地是怎么回是?

就是打完半场比赛后交换场地,左右显示交换一下
回复

使用道具 举报

地板
ID:123289 发表于 2016-6-7 18:59 | 只看该作者
硬件设计的不错。
存在一个隐患:
喇叭无限流措施,如果驱动长期低电平,喇叭线圈通过三极管直接对地,不安全。
回复

使用道具 举报

5#
ID:122684 发表于 2016-6-7 23:07 | 只看该作者
厉害,是你自己写出来的吗?
回复

使用道具 举报

6#
ID:145776 发表于 2016-11-17 20:57 来自手机 | 只看该作者
5他1啊可以
回复

使用道具 举报

7#
ID:98881 发表于 2016-12-7 15:35 | 只看该作者
交换场地实现不了
回复

使用道具 举报

8#
ID:158435 发表于 2016-12-28 19:12 | 只看该作者
我的哥,厉害了
回复

使用道具 举报

9#
ID:160336 发表于 2017-1-6 00:02 | 只看该作者
大神,膜拜
回复

使用道具 举报

10#
ID:183351 发表于 2017-3-25 17:59 | 只看该作者
厉害了我的哥
回复

使用道具 举报

11#
ID:183419 发表于 2017-4-4 14:59 | 只看该作者
666  老哥 稳
回复

使用道具 举报

12#
ID:194701 发表于 2017-5-5 10:42 | 只看该作者
交换场地是怎么回是
回复

使用道具 举报

13#
ID:183120 发表于 2017-6-3 21:06 | 只看该作者
本帖最后由 彬Lsl 于 2017-6-4 10:53 编辑

请问,这个KEY_ST跟其他开关是怎么个连法

288cf746e71e95966b4499ec0dcb7b9.png (65.2 KB, 下载次数: 101)

288cf746e71e95966b4499ec0dcb7b9.png
回复

使用道具 举报

14#
ID:183120 发表于 2017-6-4 10:50 | 只看该作者
yzwzfyz 发表于 2016-6-7 18:59
硬件设计的不错。
存在一个隐患:
喇叭无限流措施,如果驱动长期低电平,喇叭线圈通过三极管直接对地,不 ...

那需要怎么修改
回复

使用道具 举报

15#
ID:207714 发表于 2017-6-4 16:51 | 只看该作者
真不错
回复

使用道具 举报

16#
ID:183120 发表于 2017-6-5 16:00 | 只看该作者
按照这个电路图焊接,代码烧进去后,但不行,
回复

使用道具 举报

17#
ID:200571 发表于 2017-6-9 17:12 | 只看该作者
就是想问一下,A、B队减一分怎么改成加三分,还有就是场地交换和节数加1,不好使啊
回复

使用道具 举报

18#
ID:210963 发表于 2017-6-13 22:15 | 只看该作者
厉害了
回复

使用道具 举报

19#
ID:211258 发表于 2017-6-15 17:39 | 只看该作者
非常好
回复

使用道具 举报

20#
ID:200571 发表于 2017-6-19 16:31 | 只看该作者
彬Lsl 发表于 2017-6-4 10:50
那需要怎么修改

你用过之后,他的那个喇叭是怎么回事,怎么不想
回复

使用道具 举报

21#
ID:212542 发表于 2017-6-20 12:54 | 只看该作者
特别好
回复

使用道具 举报

22#
ID:217050 发表于 2017-7-4 11:36 | 只看该作者
新手,学习到了
回复

使用道具 举报

23#
ID:234978 发表于 2017-9-22 21:23 | 只看该作者
厉害 崇拜 崇拜
回复

使用道具 举报

24#
ID:252661 发表于 2017-11-23 15:03 | 只看该作者
厉害了
回复

使用道具 举报

25#
ID:252661 发表于 2017-11-23 15:05 | 只看该作者
厉害了,可是我连接对了,显示不出
回复

使用道具 举报

26#
ID:253948 发表于 2017-11-26 22:29 | 只看该作者
膜拜大神!
回复

使用道具 举报

27#
ID:266661 发表于 2017-12-26 10:17 | 只看该作者
为什么我的运行不出来,有全部运行出来的吗?
回复

使用道具 举报

28#
ID:262115 发表于 2017-12-26 18:28 | 只看该作者
赞赞赞楼主
回复

使用道具 举报

29#
ID:260909 发表于 2017-12-26 22:02 | 只看该作者
大一就做出这样的设计,挺厉害的!
回复

使用道具 举报

30#
ID:268595 发表于 2017-12-28 21:55 | 只看该作者
请问开始功能的开关是怎么和后面的开关进行连接的
回复

使用道具 举报

31#
ID:264760 发表于 2018-1-1 17:25 | 只看该作者
if(time_fmq>=4)   FMQ=1;请问大佬这段程序是什么意思
回复

使用道具 举报

32#
ID:300802 发表于 2018-4-3 10:24 | 只看该作者
厉害啊,大一就能做这个了
回复

使用道具 举报

33#
ID:344639 发表于 2018-6-4 14:25 | 只看该作者
请问开始功能的开关是怎么和后面的开关进行连接的
回复

使用道具 举报

34#
ID:296322 发表于 2018-6-9 14:45 | 只看该作者
我们也有这个课题!
回复

使用道具 举报

35#
ID:234651 发表于 2018-6-12 10:47 | 只看该作者
萌新看一下
回复

使用道具 举报

36#
ID:353454 发表于 2018-6-18 15:35 | 只看该作者
交换场地怎么搞啊
回复

使用道具 举报

37#
ID:353746 发表于 2018-6-18 20:38 | 只看该作者
楼主大一做出去的,好强。是自学的吗?
回复

使用道具 举报

38#
ID:353655 发表于 2018-6-18 21:56 | 只看该作者
赞一个,我要学好单片机
回复

使用道具 举报

39#
ID:221324 发表于 2018-6-18 22:04 | 只看该作者
牛逼,大神赞一个。
回复

使用道具 举报

40#
ID:353746 发表于 2018-6-19 12:34 | 只看该作者
楼主大神,LCD1602我找不到这个元器件啊,你是用proteus画的吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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