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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機的籃球記分牌電路原理圖與源碼

[復制鏈接]
跳轉到指定樓層
樓主
籃球記分牌主要分為兩大部分:一部分是實現倒計時功能,和實驗課所做的60S倒計時類似。另一部分是實現計分功能,其基本功能和計數器類似。同時外加兩部分切換顯示功能。

需要注意的是程序中的管腳與原理圖中管腳必須一致,在畫原理圖時也一樣應當注意復位電路、晶振、電源、數碼管接在芯片正確的管腳。復位電路中REST接的是芯片第9腳,晶振電路中XTAL2和XTAL1分別接18、19腳,將晶振產生的時鐘信號作為定時信號。芯片20腳接GND,40腳和31腳接VCC,數碼管是共陰數碼管。




程序源碼如下:
  1. #include<reg52.H>        //*****頭文件*****//
  2. #define uchar unsigned char         //*定義變量*//
  3. #define uint  unsigned int         //*定義uint為無符號整形變量*//
  4. unsigned t = 0x3cb0;
  5. uchar CZ=24; //*計時初值*//
  6. uchar key=0;
  7. uchar score;
  8. uchar mode=1;//*模式變量*//
  9. uchar score1=0;          //*甲隊得分變量*//
  10. uchar score2=0;  //*乙隊得分變量*//  
  11. uchar bittime=0,bitdisplay=0;   //*定義變量*//
  12. uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //*段碼0,1,2,3,4,5,6,7,8,9*//
  13. sbit J0=P3^0;      //*獨立按鍵 *//
  14. sbit J1=P3^1;
  15. sbit J2=P3^2;
  16. sbit J3=P3^3;
  17. sbit J4=P3^4;
  18. sbit J5=P3^5;
  19. sbit J6=P3^6;

  20. sbit LED1 = P1^0;
  21. sbit LED2 = P1^1;
  22. sbit LED3 = P1^2;
  23. sbit LED4 = P1^3;
  24. sbit SPK=P1^7;

  25. /********延時函數******/
  26. void delay(uchar z)
  27. {
  28.         uchar x,y;
  29.          for(x=z;x>0;x--)
  30.                  for(y=110;y>0;y--);
  31. }
  32. /* 服務程序*/
  33. void timer0 (void) interrupt 1 using 0
  34. {
  35.         TH0=0x3c; //*50ms*//
  36.         TL0=0xb0;
  37.         bittime++; //每來一次中斷,中斷次數bittime自加1
  38.         while(bittime==20)
  39.          {
  40.                   bittime=0;  //每經一秒調用一次顯示程序
  41.                   bitdisplay=1;
  42.                 if(bitdisplay)
  43.                 {
  44.                         bitdisplay = 0;
  45.                         CZ--;
  46.                         if(-1 == CZ) CZ=24;        
  47.                 }
  48.          }
  49. }
  50. /* 甲隊分數顯示函數*/
  51. void display_1(uint z)
  52. {
  53.         P2 = 0XFE; /*11111101甲隊個位分數顯示*/
  54.         P0 = tab[z%10];
  55.         delay(10);
  56.         P2 = 0XFD; /*11111110甲隊十位分數顯示*/
  57.         P0 = tab[z/10];
  58.         delay(10);
  59. }
  60. /* 乙隊分數顯示函數*/
  61. void display_2(uint z)
  62. {
  63.         P2 = 0Xfb; /*11110111乙隊個位分數顯示*/
  64.         P0 = tab[z%10];
  65.         delay(10);
  66.         P2 = 0Xf7; /*11111011乙隊十位分數顯示*/
  67.         P0 = tab[z/10];
  68.         delay(10);
  69. }
  70. /* 甲分數處理函數*/
  71. int inc1()
  72. {
  73.                
  74.                         if(~J3)
  75.                         {
  76.                                 delay(10);
  77.                                 score1= score1+1;
  78.                         }while(~J3);        
  79.                
  80.                 if(~J4)
  81.                 {
  82.                         delay(10);
  83.                         score1= score1+2;
  84.                         }while(~J4);
  85.                         if(~J5)
  86.                         {
  87.                                 delay(10);
  88.                                 score1= score1+3;
  89.                         }while(~J5);        
  90.                   
  91.                 return score1;
  92. }

  93. /* 乙分數處理函數*/
  94. int inc2()
  95. {

  96.                                 if(~J3)
  97.                         {
  98.                                 delay(10);
  99.                                 score2= score2+1;
  100.                         }while(~J3);        
  101.                
  102.                 if(~J4)
  103.                 {
  104.                         delay(10);
  105.                         score2= score2+2;
  106.                         }while(~J4);
  107.                         if(~J5)
  108.                         {
  109.                                 delay(10);
  110.                                 score2= score2+3;
  111.                         }while(~J5);        
  112.                   
  113.                 return score1;
  114. }
  115. /* 甲乙隊切加分換處理函數*/
  116. uchar turn()
  117. {
  118.         if(~J2)
  119.         {
  120.                 delay(10);
  121.                 if(~J2)
  122.                 {
  123.                         delay(10);
  124.                         LED1 = 1;
  125.                         LED2 = 1;
  126.                         LED3 = 0;
  127.                         LED4 = 1;
  128.                         key = 1;
  129.                 }while(~J2);        
  130.         }
  131.         if(~J6)
  132.         {
  133.                 delay(10);
  134.                 if(~J6)
  135.                 {
  136.                         delay(10);
  137.                         LED1 = 1;
  138.                         LED2 = 1;
  139.                         LED3 = 1;
  140.                         LED4 = 0;
  141.                         key = 2;
  142.                 }while(~J6);        
  143.         }
  144.         return key;        
  145. }
  146. /* 加分顯示函數*/
  147. void marks()
  148. {
  149.         turn();
  150.                 if(key == 1)
  151.                 {
  152.                         inc1();
  153.                         if(score1<100)
  154.                         {
  155.                                 display_1(score1);
  156.                                 display_2(score2);
  157.                         }        
  158.                         else score1 =score1-100;                        
  159.                 }
  160.                 else if(key == 2)
  161.                 {
  162.                         inc2();
  163.                         if(score2<100)
  164.                         {
  165.                                 display_1(score1);
  166.                                 display_2(score2);        
  167.                         }
  168.                         else score2 = score2-100;                        
  169.                 }
  170. }
  171. /*模式選擇函數*/
  172. uchar mode_select()
  173. {
  174.         if(~J0)
  175.         {
  176.                 delay(10);
  177.                 if(~J0)
  178.                 {
  179.                         delay(10);
  180.                         mode = 1;
  181.                         LED1 = 0;
  182.                         LED2 = 1;
  183.                         LED3 = 1;
  184.                         LED4 = 1;
  185.                 } while(~J0);
  186.         }
  187.         if(~J1)
  188.         {
  189.                 delay(10);
  190.                 if(~J1)
  191.                 {
  192.                         delay(10);
  193.                         mode = 2;
  194.                         LED1 = 1;
  195.                         LED2 = 0;
  196.                         LED3 = 1;
  197.                         LED4 = 1;
  198.                 } while(~J1);
  199.         }

  200.         return mode;        
  201. }
  202.   
  203. /*倒計時處理*/
  204. void time_count()
  205. {
  206.         TR0 = 1;
  207.         P2 = 0XFB; /*11111010甲乙十位顯示*/
  208.         P0 = tab[CZ/10];
  209.         delay(10);
  210.         P2 = 0XFD; /*11110101甲乙個位顯示*/
  211.         P0 = tab[CZ%10];
  212.         delay(10);        
  213. }
  214. /* 主函數*/
  215. int main()
  216. {
  217.         TMOD= 0x01;
  218.         TH0=0x3c;
  219.     TL0=0xb0;
  220.         EA = 1; //cpu允許所有中斷
  221.         ET0 =1;//定時器T0中斷允許
  222.         TR0 = 0;//關閉定時器T0
  223.         P2 = 0XF0;
  224.         P0 = 0x3f;
  225.         SPK=0;
  226.         while(1)
  227.         {         
  228.                 mode_select();
  229.                 if(1 == mode)                //加分功能
  230.                 {         
  231.                         TR0 = 0;//關閉定時器
  232.                         CZ = 24;  //重新賦初值24秒
  233.                         display_1(score1);
  234.                         delay(10);
  235.                         display_2(score2);
  236.                         marks();
  237.                 }
  238.                 if(2 == mode)          //計時功能
  239.                 {         
  240.                         if(CZ == 0){TR0 = 0,SPK=1;delay(30);SPK = 0;
  241.                                                          foul_sever();
  242.                                                           }
  243.                         time_count();}        
  244.          
  245.         }
  246.         return 0;
  247. }
復制代碼



全部資料51hei下載地址:
籃球計分牌.rar (101.49 KB, 下載次數: 64)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:318695 發表于 2018-4-29 11:14 | 只看該作者
新人發帖,求獎勵幣
回復

使用道具 舉報

板凳
ID:299889 發表于 2018-6-28 21:29 | 只看該作者
管腳定義跟自己的原理圖都不對
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕一二三区 | 国产精品不卡一区 | 一区二区三区四区在线免费观看 | 蜜桃av鲁一鲁一鲁一鲁 | 91久久精品国产 | 日韩一区二区三区视频 | 日韩视频专区 | 久久精品一区二区三区四区 | 国产精品1区2区3区 国产在线观看一区 | 亚州激情| 啪啪免费 | 亚洲精品一区二区三区四区高清 | 成人av片在线观看 | 国偷自产av一区二区三区 | 中文字幕av网站 | 国产免费播放视频 | 久久精品视频在线观看 | 国产美女在线观看 | 日韩中文一区二区三区 | 黄色片在线网站 | 欧美一区二不卡视频 | 99久久精品免费看国产四区 | 亚洲综合成人网 | 国产精品久久久久久久久久久免费看 | 精品久久久久久久久久久久久久久久久 | 亚洲免费网址 | 亚洲精品中文字幕中文字幕 | 本道综合精品 | 久久久一区二区 | 精品成人免费一区二区在线播放 | 精品国产区 | 亚洲精品日韩综合观看成人91 | 天天射天天操天天干 | 黄色网毛片 | 特级黄一级播放 | 91精品国产乱码久久蜜臀 | 老司机久久 | 国产一区二区在线免费观看 | 日韩久久久久久久 | 成人福利网站 | 日韩精品一区二 |