久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6662|回復: 11
打印 上一主題 下一主題
收起左側

籃球比賽計分器51單片機程序,前段時間幫別人搞畢設用普中的開發板

  [復制鏈接]
跳轉到指定樓層
樓主
前段時間幫別人搞畢設用普中的開發板進行了驗證,下面是按鍵說明與接線圖:




單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>

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

  5. //uchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};

  6. //這三個引腳參考資料
  7. sbit E=P2^7;                //1602使能引腳
  8. sbit RW=P2^5;                //1602讀寫引腳        
  9. sbit RS=P2^6;                //1602數據/命令選擇引腳
  10. sbit beep=P1^5; //蜂鳴器
  11. bit beep_flag;

  12. sbit start_game=P3^7;
  13. sbit pause=P3^6;
  14. bit run_off;
  15. uchar game_time_min=12;
  16. uchar game_time_sec=0;
  17. uchar game_num=1;

  18. sbit P24=P2^4;
  19. sbit P23=P2^3;
  20. sbit P22=P2^2;
  21. sbit P21=P2^1;
  22. sbit P20=P2^0;

  23. #define FOSC 11059200L

  24. #define T1MS (65536-FOSC/12/1000)   //1ms timer calculation method in 12T mode
  25. uint count,count1,count2;

  26. uchar r_b,r_s,r_g,b_s,b_b,b_g;        //紅分和黑分的百十個
  27. bit h_h;        //紅黑方加減分標志
  28. uchar second_s,second_g;       //倒計時的十和個
  29. bit updata=0;
  30. #define left 15
  31. #define right  3
  32. #define add_score 7
  33. #define sub_score 11
  34. #define start 14
  35. #define stop 2
  36. bit start_24sec=0;
  37. bit game_over;

  38. void add_score_function();
  39. void sub_score_function();
  40. void redisplay();

  41. /********************************************************************
  42. * 名稱 : Delay_1ms()
  43. * 功能 : 延時子程序,延時時間為 1ms * x
  44. * 輸入 : x (延時一毫秒的個數)
  45. * 輸出 : 無
  46. ***********************************************************************/
  47. void Delay_1ms(uint i)//1ms延時
  48. {
  49.         uchar x;
  50.         uint j;
  51.         for(j=0;j<i;j++)
  52.         for(x=0;x<=148;x++)
  53.         ;        
  54. }

  55. /********************************************************************
  56. * 名稱 : delay()
  57. * 功能 : 延時,延時時間大概為140US。
  58. * 輸入 : 無
  59. * 輸出 : 無
  60. ***********************************************************************/

  61. void delay()
  62. {
  63.         int i,j;
  64.         for(i=0; i<=10; i++)
  65.         for(j=0; j<=2; j++)
  66.   ;
  67. }


  68. /********************************************************************
  69. * 名稱 : enable(uchar del)
  70. * 功能 : 1602命令函數
  71. * 輸入 : 輸入的命令值
  72. * 輸出 : 無
  73. ***********************************************************************/

  74. void enable(uchar del)
  75. {
  76.         P0 = del;
  77.         RS = 0;
  78.         RW = 0;
  79.         E = 0;
  80.         delay();
  81.         E = 1;
  82.         delay();
  83. }

  84. /********************************************************************
  85. * 名稱 : write(uchar del)
  86. * 功能 : 1602寫數據函數
  87. * 輸入 : 需要寫入1602的數據
  88. * 輸出 : 無
  89. ***********************************************************************/

  90. void write(uchar del)
  91. {
  92.         P0 = del;
  93.         RS = 1;
  94.         RW = 0;
  95.         E = 0;
  96.         delay();
  97.         E = 1;
  98.         delay();
  99. }

  100. /********************************************************************
  101. * 名稱 : L1602_init()
  102. * 功能 : 1602初始化,請參考1602的資料
  103. * 輸入 : 無
  104. * 輸出 : 無
  105. ***********************************************************************/
  106. void L1602_init(void)
  107. {
  108.         enable(0x01);
  109.         enable(0x38);
  110.         enable(0x0c);
  111.         enable(0x06);
  112.         enable(0xd0);
  113. }

  114. /********************************************************************
  115. * 名稱 : L1602_char(uchar hang,uchar lie,char sign)
  116. * 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符顯示"b" ,調用該函數如下
  117.                  L1602_char(1,5,'b')
  118. * 輸入 : 行,列,需要輸入1602的數據
  119. * 輸出 : 無
  120. ***********************************************************************/
  121. void L1602_char(uchar hang,uchar lie,char sign)
  122. {
  123.         uchar a;
  124.         if(hang == 1) a = 0x80;
  125.         if(hang == 2) a = 0xc0;
  126.         a = a + lie - 1;
  127.         enable(a);
  128.         write(sign);
  129. }

  130. /********************************************************************
  131. * 名稱 : L1602_string(uchar hang,uchar lie,uchar *p)
  132. * 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"ab cd ef" ,調用該函數如下
  133.                   L1602_string(1,5,"ab cd ef;")
  134. * 輸入 : 行,列,需要輸入1602的數據
  135. * 輸出 : 無
  136. ***********************************************************************/
  137. void L1602_string(uchar hang,uchar lie,uchar *p)
  138. {
  139.         uchar a;
  140.         if(hang == 1) a = 0x80;
  141.         if(hang == 2) a = 0xc0;
  142.         a = a + lie - 1;
  143.         enable(a);
  144.         while(1)
  145.         {
  146.                 if(*p == '\0') break;
  147.                 write(*p);
  148.                 p++;
  149.         }
  150. }


  151. /********************************************************************
  152. * 名稱 : Keyscan()
  153. * 功能 : 實現按鍵的讀取。下面這個子程序是按處理 矩陣鍵盤 的基本方法處理的。
  154. * 輸入 : 無
  155. * 輸出 : 按鍵值
  156. ***********************************************************************/
  157. uchar keyscan(void)
  158. {
  159.          uchar temp;
  160.   P21=1;
  161.         if(P24==0) {temp=right; goto next;}
  162.         if(P23==0) {temp=sub_score; goto next;}
  163.         if(P22==0) {temp=stop; goto next;}
  164.         
  165.         P20=1; P21=0;
  166.         if(P24==0) {temp=left; goto next;}
  167.         if(P23==0) {temp=add_score; goto next;}
  168.         if(P22==0) {temp=start; goto next;}
  169.         temp=0xff;
  170. next:
  171.         while((P2&0x1c)!=0x1c); //等待按鍵釋放
  172.         return temp;
  173. }

  174. /********************************************************************
  175. * 名稱 : Main()
  176. * 功能 : 主函數
  177. * 輸入 : 無
  178. * 輸出 : 無
  179. ***********************************************************************/
  180. void Main(void)
  181. {
  182.         uchar Key_Value,temp;  //讀出的鍵值
  183.         
  184.           TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
  185.     TL0 = T1MS;                     //initial timer0 low byte
  186.     TH0 = T1MS >> 8;                //initial timer0 high byte
  187.     //TR0 = 1;                        //timer0 start running
  188.     ET0 = 1;                        //enable timer0 interrupt
  189.     EA = 1;                         //open global interrupt switch
  190.           start_game=1;                  //pull high
  191.           pause=1;                        //pull high
  192.         
  193.         L1602_init();
  194.         //draw some picturs
  195.         for(temp=1; temp<17; temp++)
  196.         {
  197.                 L1602_string(1,temp,"O");
  198.                 if((temp-1)!=0)
  199.      {L1602_string(1,temp-1," ");}
  200.                 Delay_1ms(200);
  201.         }
  202.         L1602_string(1,1,"Basketball score");
  203.         L1602_string(2,5,"Recorder");
  204.         Delay_1ms(4000);        
  205.         //end draw some pictures
  206. begin:
  207.         L1602_string(2,1,"Fir 12:00 24 Sec");
  208.         second_s=2; second_g=4;
  209.         L1602_char(1,11,second_s+48);
  210.         L1602_char(1,12,second_g+48);
  211.         h_h=1;
  212.         L1602_string(1,1,"->R:000    B:000");
  213.         while(1)
  214.         {
  215.                 if(updata)
  216.                 {
  217.                         updata=0;
  218.                         redisplay();
  219.                         L1602_char(2,11,second_s+48);
  220.                         L1602_char(2,12,second_g+48);
  221.                 }
  222.                 if((second_s==0)&&(second_g<=3))
  223.                 {beep_flag=1;}
  224.                 if((game_time_min==0)&&(game_time_sec<=2))
  225.                 {beep_flag=1;}
  226.                
  227.                 if(start_game==0)
  228.                 {
  229.                         Delay_1ms(15);
  230.                         if(start_game==0)
  231.                         {
  232.                                 while(start_game==0);
  233.                                 if(game_over)
  234.                                 {
  235.                                         game_over=0; game_num=1;
  236.                                         game_time_min=12; game_time_sec=0;
  237.                                         ET0=1; EA=1;
  238.                                  goto begin;
  239.                                 }
  240.                                 run_off=1;
  241.                         }
  242.                 }
  243.                
  244.                 if(pause==0)
  245.                 {
  246.                         Delay_1ms(15);
  247.                         if(pause==0)
  248.                         {
  249.                                 while(pause==0);
  250.                                 run_off=0;
  251.                         }
  252.                 }
  253.                 if(run_off) {TR0=1;}
  254.                
  255.                 P2&=0xfc;
  256.                 P2|=0x1c;
  257.                 temp=P2&0x1c;
  258.                 if(temp!= 0x1c)
  259.                 {
  260.                         Delay_1ms(15);        //按鍵消抖
  261.                         P2&=0xfc;
  262.                   P2|=0x1c;
  263.                   temp=P2&0x1c;
  264.                         if(temp != 0x1c)
  265.                         {
  266.                                 Key_Value = keyscan();
  267.         switch(Key_Value)
  268.                                 {
  269.                                         case left:                                        //
  270.            {
  271.                                                 h_h=1;
  272.                                                  redisplay();
  273.                                           L1602_string(1,1,"->");
  274.                                                 L1602_string(1,10,"  ");
  275.                                                 break;
  276.                                          }
  277.                                         case right:
  278.            {
  279.                                                 h_h=0;
  280.                                                  redisplay();
  281.                                           L1602_string(1,1,"  ");
  282.                                                 L1602_string(1,10,"->");
  283.                                                 break;
  284.                                          }
  285.                                         case add_score:
  286.                                         {
  287.            add_score_function();
  288.                                          break;
  289.                                         }
  290.                                         case sub_score:
  291.                                         {
  292.                                                 sub_score_function();
  293.            break;
  294.           }
  295.                                         case start:
  296.                                         {
  297.                                                 start_24sec=1;
  298.                                                 break;
  299.                                         }
  300.                                         case stop:
  301.                                         {
  302.                                                 start_24sec=0;
  303.                                                 second_s=2;
  304.                                                 second_g=4;
  305.                                                 updata=1;
  306.                                                 beep=0;
  307.                                                 break;
  308.                                         }
  309.           default: break;                                       
  310.                                 }
  311.                         }
  312.                 }
  313.   }               
  314. }
  315. //*******************************************
  316. void add_score_function()
  317. {
  318.                                                 if(h_h==0)
  319.                                                 {
  320.                                                         if(++b_g==10)
  321.                                                         {
  322.                                                                 b_g=0;
  323.                                                                 if(++b_s==10)
  324.                                                                 {
  325.                                                                         b_s=0;
  326.                                                                         if(++b_b==10)
  327.                                                                                 b_b=0;
  328.                                                                 }
  329.                                                         }
  330.                                                         redisplay();
  331.                                                 L1602_char(1,14,b_b+48);
  332.                                                 L1602_char(1,15,b_s+48);
  333.                                                 L1602_char(1,16,b_g+48);                                                        
  334.                                                 }
  335.            else
  336.                                                 {
  337.                                                         if(++r_g==10)
  338.                                                         {
  339.                                                                 r_g=0;
  340.                                                                 if(++r_s==10)
  341.                                                                 {
  342.                                                                         r_s=0;
  343.                                                                         if(++r_b==10)
  344.                                                                                 r_b=0;
  345.                                                                 }
  346.                                                         }
  347.                                                         redisplay();
  348.                                                 L1602_char(1,5,r_b+48);
  349.                                                 L1602_char(1,6,r_s+48);
  350.                                                 L1602_char(1,7,r_g+48);                                                
  351.                                                 }        
  352. }

  353. //*********************************************
  354. void sub_score_function()
  355. {
  356.                                                 if(h_h==0)
  357.                                                 {
  358.                                                         if(b_g!=0)
  359.                                                         {b_g--;}
  360.                                                         else
  361.                                                         {
  362.                                                                 if(b_s!=0)
  363.                                                                 {
  364.                                                                         b_s--; b_g=9;
  365.                                                                 }
  366.                                                                 else
  367.                                                                 {
  368.                                                                         if(b_b!=0)
  369.                                                                         {b_b--; b_s=9; b_g=9;}
  370.                                                                 }
  371.                                                         }
  372.                                                         redisplay();
  373.                                                 L1602_char(1,14,b_b+48);
  374.                                                 L1602_char(1,15,b_s+48);
  375.                                                 L1602_char(1,16,b_g+48);                                                
  376.                                                 }
  377.                                                 else
  378.                                                 {
  379.                                                         if(r_g!=0)
  380.                                                         {r_g--;}
  381.                                                         else
  382.                                                         {
  383.                                                                 if(r_s!=0)
  384.                                                                 {
  385.                                                                         r_s--; r_g=9;
  386.                                                                 }
  387.                                                                 else
  388.                                                                 {
  389.                                                                         if(r_b!=0)
  390.                                                                         {r_b--; r_s=9; r_g=0;}
  391.                                                                 }
  392.                                                         }
  393.                                                         redisplay();
  394.                                                 L1602_char(1,5,r_b+48);
  395.                                                 L1602_char(1,6,r_s+48);
  396.                                                 L1602_char(1,7,r_g+48);        
  397.                                                 }        
  398. }
  399. //***************************************************
  400. void redisplay()
  401. {
  402.   uchar temp,temp1;
  403.         temp=game_time_min/10;
  404.         temp1=game_time_min%10;
  405.         L1602_char(2,5,temp+48); L1602_char(2,6,temp1+48);
  406.         temp=game_time_sec/10;
  407.         temp1=game_time_sec%10;
  408.         L1602_char(2,8,temp+48); L1602_char(2,9,temp1+48);        
  409. }
  410. //-----------------------------------------------

  411. /* Timer0 interrupt routine */
  412. void tm0_isr() interrupt 1 using 1
  413. {
  414.     TL0 = T1MS;                     //reload timer0 low byte
  415.     TH0 = T1MS >> 8;                //reload timer0 high byte
  416.           if(beep_flag)
  417.                 {
  418.                         if(++count1==4)
  419.                         {
  420.                                 count1=0;
  421.                                 beep=!beep;
  422.                         }
  423.                 }
  424.                 else
  425.                 {beep=0;}
  426.         
  427.     if (++count== 1000)               //1ms * 1000 -> 1s
  428.     {
  429.        count = 0;               //reset counter
  430.                          updata=1;
  431.                         
  432.                         if(start_24sec)                        //24秒到計時
  433.                         {
  434.                         if(second_g!=0)
  435.                         {second_g--;}
  436.                         else
  437.                         {
  438.                                 if(second_s!=0)
  439.                                 {
  440.                                   second_s--;
  441.                                         second_g=9;
  442.                                 }
  443.                                 else
  444.         {
  445.                                  start_24sec=0;
  446.                                  second_s=2;second_g=4;
  447.                                         beep=0; beep_flag=0;
  448.                                 }
  449.                         }
  450.                  }
  451.                         
  452.                  if(run_off)            //正常計時
  453.                  {
  454.                          if(game_time_sec!=0)
  455.                          {game_time_sec--;}
  456.                          else
  457.                          {
  458.                                  if(game_time_min!=0)
  459.                                  {
  460. ……………………

  461. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
籃球比賽計分器.rar (159.04 KB, 下載次數: 78)



評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:347913 發表于 2018-6-10 13:00 | 只看該作者
我想問下我用普中學習板運行這個程序,端口也改了,計時開始和停止都正常,但矩陣鍵盤沒反應,怎么辦
回復

使用道具 舉報

板凳
ID:287575 發表于 2018-6-12 23:30 | 只看該作者
默默的注意 發表于 2018-6-10 13:00
我想問下我用普中學習板運行這個程序,端口也改了,計時開始和停止都正常,但矩陣鍵盤沒反應,怎么辦

矩陣接線正確嗎?正確應該沒問題,我是反復試過的,你把接線拍個圖發來,我看一下
回復

使用道具 舉報

地板
ID:372149 發表于 2018-7-21 20:52 | 只看該作者
*** WARNING L15: MULTIPLE CALL TO SEGMENT
樓主有錯誤哇
回復

使用道具 舉報

5#
ID:287575 發表于 2018-8-4 12:17 | 只看該作者
anshenghhhhh 發表于 2018-7-21 20:52
*** WARNING L15: MULTIPLE CALL TO SEGMENT
樓主有錯誤哇

不可能有錯誤的,已經燒到板子正常工作的
回復

使用道具 舉報

6#
ID:426562 發表于 2018-11-17 18:21 | 只看該作者
樓主請問我用的2.2的板子,但是計時程序一直沒反應咋回事啊?其他功能是好的
回復

使用道具 舉報

7#
ID:426241 發表于 2018-12-6 15:02 來自手機 | 只看該作者
請問樓主這是需要多少個按鍵
回復

使用道具 舉報

8#
ID:428761 發表于 2018-12-7 19:35 | 只看該作者
老哥,為什么我的1602顯示器顯示的比分很奇怪???
回復

使用道具 舉報

9#
ID:537660 發表于 2019-5-21 10:11 | 只看該作者
你好~想問一下如果想中場比分交換的話,要怎么加代碼
回復

使用道具 舉報

10#
ID:403027 發表于 2019-5-21 17:05 | 只看該作者

正想學習ESP8266,謝謝樓主
回復

使用道具 舉報

11#
ID:543123 發表于 2019-6-4 08:25 | 只看該作者
有電路圖嗎樓主
回復

使用道具 舉報

12#
ID:693873 發表于 2020-2-22 19:15 | 只看該作者
默默的注意 發表于 2018-6-10 13:00
我想問下我用普中學習板運行這個程序,端口也改了,計時開始和停止都正常,但矩陣鍵盤沒反應,怎么辦

我也是哎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲二区视频 | 欧美精品久久久 | 国产成人精品久久 | 亚洲欧美精品国产一级在线 | 免费a在线 | 久久精品亚洲欧美日韩久久 | 噜噜噜噜狠狠狠7777视频 | 羞羞在线观看视频 | 亚洲免费视频在线观看 | 给我免费的视频在线观看 | a级大片免费观看 | 日本天天操 | 国产丝袜一区二区三区免费视频 | 求个av网址 | 午夜激情视频 | 国产黄色精品 | 国产成人自拍一区 | 色综合视频 | 免费的av| 超碰97免费在线 | 久久99精品视频 | 亚洲综合久久久 | 一区二区不卡视频 | 免费黄色成人 | 91麻豆精品国产91久久久久久 | 国产乱码一二三区精品 | 先锋资源网站 | 人成精品 | 久久精品久久久久久 | 成人在线观看免费视频 | 午夜影院普通用户体验区 | 欧美精品 在线观看 | 国产成人在线一区二区 | 视频一区中文字幕 | 日韩欧美亚洲 | 国产黄色一级片 | 成人欧美一区二区 | 在线观看中文视频 | 精品国产一区二区国模嫣然 | 亚洲在线一区 | 日本二区在线观看 |