標(biāo)題: 基于LCD顯示的籃球定時(shí)計(jì)分器的設(shè)計(jì) [打印本頁(yè)]

作者: 巴斯光年白    時(shí)間: 2016-6-6 20:51
標(biāo)題: 基于LCD顯示的籃球定時(shí)計(jì)分器的設(shè)計(jì)
    這是我大一期間制作的一個(gè)小設(shè)計(jì),這是我第一個(gè)制作的設(shè)計(jì)哈,分享給又需要的朋友。




LCD1602顯示的籃球定時(shí)計(jì)分器的51單片機(jī)程序:
  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;                 //功能鍵(開(kāi)始/暫停)
  7. sbit key_A1=P1^0;                 //功能鍵(A隊(duì)分?jǐn)?shù)加1)
  8. sbit key_A2=P1^3;                 //功能鍵(A隊(duì)分?jǐn)?shù)加2)
  9. sbit key_1A=P1^6;                 //功能鍵(A隊(duì)分?jǐn)?shù)減1)
  10. sbit key_B1=P1^1;                 //功能鍵(B隊(duì)分?jǐn)?shù)加1)
  11. sbit key_B2=P1^4;                 //功能鍵(B隊(duì)分?jǐn)?shù)加2)
  12. sbit key_1B=P1^7;                 //功能鍵(B隊(duì)分?jǐn)?shù)減1)
  13. sbit key_EX=P1^2;                 //功能鍵(交換場(chǎng)地,A/B兩隊(duì)分?jǐn)?shù)交換)
  14. sbit key_JS=P3^0;                 //功能鍵(比賽節(jié)數(shù)加1)
  15. sbit FMQ=P3^3;                         //蜂鳴器
  16. sbit lcdrs=P3^5;                 //LCD顯示的數(shù)據(jù)/命令選擇端
  17. sbit lcden=P3^4;                 //LCD顯示的使能信號(hào)

  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)                        //定義延時(shí)函數(shù)
  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)                                        //定義為數(shù)據(jù)模式
  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)                   //顯示函數(shù)
  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;                                                                //定義定時(shí)器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;                                                                        //打開(kāi)總中斷
  123.         ET0=1;                                                                        //打開(kāi)定時(shí)器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控制晶碼管顯示時(shí)間
  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控制晶碼管顯示時(shí)間
  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. }
復(fù)制代碼

Proteus仿真.rar

45.94 KB, 下載次數(shù): 536, 下載積分: 黑幣 -5

Proteus仿真圖

程序代碼.rar

39.31 KB, 下載次數(shù): 435, 下載積分: 黑幣 -5

原程序代碼


作者: 高永顯    時(shí)間: 2016-6-7 07:45
交換場(chǎng)地是怎么回是?
作者: 巴斯光年白    時(shí)間: 2016-6-7 18:38
高永顯 發(fā)表于 2016-6-7 07:45
交換場(chǎng)地是怎么回是?

就是打完半場(chǎng)比賽后交換場(chǎng)地,左右顯示交換一下
作者: yzwzfyz    時(shí)間: 2016-6-7 18:59
硬件設(shè)計(jì)的不錯(cuò)。
存在一個(gè)隱患:
喇叭無(wú)限流措施,如果驅(qū)動(dòng)長(zhǎng)期低電平,喇叭線圈通過(guò)三極管直接對(duì)地,不安全。
作者: 小調(diào)調(diào)    時(shí)間: 2016-6-7 23:07
厲害,是你自己寫(xiě)出來(lái)的嗎?
作者: 大4531    時(shí)間: 2016-11-17 20:57
5他1啊可以
作者: 18692899115    時(shí)間: 2016-12-7 15:35
交換場(chǎng)地實(shí)現(xiàn)不了
作者: my51881054    時(shí)間: 2016-12-28 19:12
我的哥,厲害了
作者: 愛(ài)戀之城    時(shí)間: 2017-1-6 00:02
大神,膜拜
作者: 111111啊    時(shí)間: 2017-3-25 17:59
厲害了我的哥
作者: 972086553    時(shí)間: 2017-4-4 14:59
666  老哥 穩(wěn)
作者: micmiutom    時(shí)間: 2017-5-5 10:42
交換場(chǎng)地是怎么回是
作者: 彬Lsl    時(shí)間: 2017-6-3 21:06
本帖最后由 彬Lsl 于 2017-6-4 10:53 編輯

請(qǐng)問(wèn),這個(gè)KEY_ST跟其他開(kāi)關(guān)是怎么個(gè)連法

288cf746e71e95966b4499ec0dcb7b9.png (65.2 KB, 下載次數(shù): 149)

288cf746e71e95966b4499ec0dcb7b9.png

作者: 彬Lsl    時(shí)間: 2017-6-4 10:50
yzwzfyz 發(fā)表于 2016-6-7 18:59
硬件設(shè)計(jì)的不錯(cuò)。
存在一個(gè)隱患:
喇叭無(wú)限流措施,如果驅(qū)動(dòng)長(zhǎng)期低電平,喇叭線圈通過(guò)三極管直接對(duì)地,不 ...

那需要怎么修改
作者: qqai123    時(shí)間: 2017-6-4 16:51
真不錯(cuò)
作者: 彬Lsl    時(shí)間: 2017-6-5 16:00
按照這個(gè)電路圖焊接,代碼燒進(jìn)去后,但不行,

作者: 其味無(wú)窮    時(shí)間: 2017-6-9 17:12
就是想問(wèn)一下,A、B隊(duì)減一分怎么改成加三分,還有就是場(chǎng)地交換和節(jié)數(shù)加1,不好使啊
作者: pam    時(shí)間: 2017-6-13 22:15
厲害了
作者: 348652560    時(shí)間: 2017-6-15 17:39
非常好
作者: 其味無(wú)窮    時(shí)間: 2017-6-19 16:31
彬Lsl 發(fā)表于 2017-6-4 10:50
那需要怎么修改

你用過(guò)之后,他的那個(gè)喇叭是怎么回事,怎么不想
作者: 檸檬水i    時(shí)間: 2017-6-20 12:54
特別好
作者: 小銘    時(shí)間: 2017-7-4 11:36
新手,學(xué)習(xí)到了
作者: 大羅布    時(shí)間: 2017-9-22 21:23
厲害 崇拜 崇拜
作者: xxnn    時(shí)間: 2017-11-23 15:03
厲害了

作者: xxnn    時(shí)間: 2017-11-23 15:05
厲害了,可是我連接對(duì)了,顯示不出
作者: CCCCCCCCude    時(shí)間: 2017-11-26 22:29
膜拜大神!
作者: 小白求知    時(shí)間: 2017-12-26 10:17
為什么我的運(yùn)行不出來(lái),有全部運(yùn)行出來(lái)的嗎?
作者: 天之藍(lán)1994    時(shí)間: 2017-12-26 18:28
贊贊贊樓主
作者: 17年的51菜鳥(niǎo)    時(shí)間: 2017-12-26 22:02
大一就做出這樣的設(shè)計(jì),挺厲害的!
作者: 天道酬勤Ja    時(shí)間: 2017-12-28 21:55
請(qǐng)問(wèn)開(kāi)始功能的開(kāi)關(guān)是怎么和后面的開(kāi)關(guān)進(jìn)行連接的
作者: lxlxlx    時(shí)間: 2018-1-1 17:25
if(time_fmq>=4)   FMQ=1;請(qǐng)問(wèn)大佬這段程序是什么意思

作者: jhmjhm    時(shí)間: 2018-4-3 10:24
厲害啊,大一就能做這個(gè)了
作者: 大哥111    時(shí)間: 2018-6-4 14:25
請(qǐng)問(wèn)開(kāi)始功能的開(kāi)關(guān)是怎么和后面的開(kāi)關(guān)進(jìn)行連接的
作者: 十船翔    時(shí)間: 2018-6-9 14:45
我們也有這個(gè)課題!
作者: 亂世滅神    時(shí)間: 2018-6-12 10:47
萌新看一下
作者: 再組    時(shí)間: 2018-6-18 15:35
交換場(chǎng)地怎么搞啊
作者: 我有一顆胖的心    時(shí)間: 2018-6-18 20:38
樓主大一做出去的,好強(qiáng)。是自學(xué)的嗎?
作者: 1351142686    時(shí)間: 2018-6-18 21:56
贊一個(gè),我要學(xué)好單片機(jī)
作者: liqiang1997    時(shí)間: 2018-6-18 22:04
牛逼,大神贊一個(gè)。
作者: 我有一顆胖的心    時(shí)間: 2018-6-19 12:34
樓主大神,LCD1602我找不到這個(gè)元器件啊,你是用proteus畫(huà)的嗎?
作者: huqinlin    時(shí)間: 2018-6-21 20:30
厲害了

作者: 971855113    時(shí)間: 2018-6-21 21:54
大神能發(fā)一下嗎,我們期末考試就是這個(gè)
作者: 2452047173    時(shí)間: 2018-6-30 16:17
贊一個(gè)
作者: Asgore    時(shí)間: 2018-9-22 12:22
請(qǐng)問(wèn)開(kāi)始功能的開(kāi)關(guān)是怎么和后面的開(kāi)關(guān)進(jìn)行連接的
作者: liuxiaojier    時(shí)間: 2018-9-23 15:50
希望可以借鑒一下大神的仿真圖
作者: 會(huì)飛的魚(yú)1710    時(shí)間: 2018-10-16 20:36
想問(wèn)交換場(chǎng)地怎么不好用呀
作者: Feu_d    時(shí)間: 2018-10-20 20:21
碼一下
作者: 張鵬小弟    時(shí)間: 2018-11-26 13:51
可以 但是交換場(chǎng)地是不是有點(diǎn)問(wèn)題啊  點(diǎn)了沒(méi)有反應(yīng)
作者: 1476928506    時(shí)間: 2018-12-1 11:16
程序不錯(cuò)
作者: y358666395    時(shí)間: 2018-12-17 14:23
這個(gè)可以,但是 有復(fù)位鍵嗎
作者: y358666395    時(shí)間: 2018-12-17 14:57
這個(gè)圖 交換場(chǎng)地按鍵怎么使用啊?  還有比賽節(jié)數(shù)加一又是怎么用。。
作者: 夢(mèng)里見(jiàn)回復(fù)    時(shí)間: 2018-12-17 21:49
想問(wèn)如果用12864要怎么改程序
作者: 暗淡的紫    時(shí)間: 2019-1-12 19:01
謝謝老哥
作者: 763900682    時(shí)間: 2019-5-12 11:57
可以實(shí)現(xiàn)紅外遙控嗎

作者: 布谷鳥(niǎo)    時(shí)間: 2019-6-18 18:11
樓主可以加個(gè)你好友不( ^_^)/扣扣:3338235535
作者: zssa    時(shí)間: 2019-6-20 09:50
連接lcd的為什么只有這兩個(gè)sbit lcdrs=P3^5;                 //LCD顯示的數(shù)據(jù)/命令選擇端 sbit lcden=P3^4;  
作者: Ginger001    時(shí)間: 2019-7-2 10:12
有沒(méi)有大佬能分享下這個(gè)文件到郵箱1500452069@qq.com嗎,黑幣不夠= =
作者: 小楊同學(xué)睡覺(jué)了    時(shí)間: 2020-1-5 19:42
這個(gè)具體的引腳到底對(duì)應(yīng)哪些按鍵?
作者: CC救救我8    時(shí)間: 2020-1-15 13:45
謝謝分享!




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1