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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7137|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
籃球記分牌主要分為兩大部分:一部分是實(shí)現(xiàn)倒計(jì)時(shí)功能,和實(shí)驗(yàn)課所做的60S倒計(jì)時(shí)類(lèi)似。另一部分是實(shí)現(xiàn)計(jì)分功能,其基本功能和計(jì)數(shù)器類(lèi)似。同時(shí)外加兩部分切換顯示功能。

需要注意的是程序中的管腳與原理圖中管腳必須一致,在畫(huà)原理圖時(shí)也一樣應(yīng)當(dāng)注意復(fù)位電路、晶振、電源、數(shù)碼管接在芯片正確的管腳。復(fù)位電路中REST接的是芯片第9腳,晶振電路中XTAL2和XTAL1分別接18、19腳,將晶振產(chǎn)生的時(shí)鐘信號(hào)作為定時(shí)信號(hào)。芯片20腳接GND,40腳和31腳接VCC,數(shù)碼管是共陰數(shù)碼管。




程序源碼如下:
  1. #include<reg52.H>        //*****頭文件*****//
  2. #define uchar unsigned char         //*定義變量*//
  3. #define uint  unsigned int         //*定義uint為無(wú)符號(hào)整形變量*//
  4. unsigned t = 0x3cb0;
  5. uchar CZ=24; //*計(jì)時(shí)初值*//
  6. uchar key=0;
  7. uchar score;
  8. uchar mode=1;//*模式變量*//
  9. uchar score1=0;          //*甲隊(duì)得分變量*//
  10. uchar score2=0;  //*乙隊(duì)得分變量*//  
  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;      //*獨(dú)立按鍵 *//
  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. /********延時(shí)函數(shù)******/
  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. /* 服務(wù)程序*/
  33. void timer0 (void) interrupt 1 using 0
  34. {
  35.         TH0=0x3c; //*50ms*//
  36.         TL0=0xb0;
  37.         bittime++; //每來(lái)一次中斷,中斷次數(shù)bittime自加1
  38.         while(bittime==20)
  39.          {
  40.                   bittime=0;  //每經(jīng)一秒調(diào)用一次顯示程序
  41.                   bitdisplay=1;
  42.                 if(bitdisplay)
  43.                 {
  44.                         bitdisplay = 0;
  45.                         CZ--;
  46.                         if(-1 == CZ) CZ=24;        
  47.                 }
  48.          }
  49. }
  50. /* 甲隊(duì)分?jǐn)?shù)顯示函數(shù)*/
  51. void display_1(uint z)
  52. {
  53.         P2 = 0XFE; /*11111101甲隊(duì)個(gè)位分?jǐn)?shù)顯示*/
  54.         P0 = tab[z%10];
  55.         delay(10);
  56.         P2 = 0XFD; /*11111110甲隊(duì)十位分?jǐn)?shù)顯示*/
  57.         P0 = tab[z/10];
  58.         delay(10);
  59. }
  60. /* 乙隊(duì)分?jǐn)?shù)顯示函數(shù)*/
  61. void display_2(uint z)
  62. {
  63.         P2 = 0Xfb; /*11110111乙隊(duì)個(gè)位分?jǐn)?shù)顯示*/
  64.         P0 = tab[z%10];
  65.         delay(10);
  66.         P2 = 0Xf7; /*11111011乙隊(duì)十位分?jǐn)?shù)顯示*/
  67.         P0 = tab[z/10];
  68.         delay(10);
  69. }
  70. /* 甲分?jǐn)?shù)處理函數(shù)*/
  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. /* 乙分?jǐn)?shù)處理函數(shù)*/
  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. /* 甲乙隊(duì)切加分換處理函數(shù)*/
  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. /* 加分顯示函數(shù)*/
  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. /*模式選擇函數(shù)*/
  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. /*倒計(jì)時(shí)處理*/
  204. void time_count()
  205. {
  206.         TR0 = 1;
  207.         P2 = 0XFB; /*11111010甲乙十位顯示*/
  208.         P0 = tab[CZ/10];
  209.         delay(10);
  210.         P2 = 0XFD; /*11110101甲乙個(gè)位顯示*/
  211.         P0 = tab[CZ%10];
  212.         delay(10);        
  213. }
  214. /* 主函數(shù)*/
  215. int main()
  216. {
  217.         TMOD= 0x01;
  218.         TH0=0x3c;
  219.     TL0=0xb0;
  220.         EA = 1; //cpu允許所有中斷
  221.         ET0 =1;//定時(shí)器T0中斷允許
  222.         TR0 = 0;//關(guān)閉定時(shí)器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;//關(guān)閉定時(shí)器
  232.                         CZ = 24;  //重新賦初值24秒
  233.                         display_1(score1);
  234.                         delay(10);
  235.                         display_2(score2);
  236.                         marks();
  237.                 }
  238.                 if(2 == mode)          //計(jì)時(shí)功能
  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. }
復(fù)制代碼



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


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:318695 發(fā)表于 2018-4-29 11:14 | 只看該作者
新人發(fā)帖,求獎(jiǎng)勵(lì)幣
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国产一区二区三区 | 夜夜操av | 偷拍自拍网 | 一片毛片 | www.日日干| 欧美激情网站 | 天天操天天插 | 久久久久久亚洲 | 日日碰碰 | 欧美日韩专区 | 国产乱码久久久久久 | 国产视频1区 | 国产精品美女久久久久久久网站 | 欧美一区二区在线播放 | 91福利网址| 国产精品久久久久久久一区探花 | 黄色香蕉视频在线观看 | 综合国产在线 | 成人视屏在线观看 | 日韩午夜场 | 国产精品免费播放 | 久久久久久久久久久久一区二区 | 久久蜜桃精品 | 成人影院av | 欧美日韩国产一区二区三区 | 国产成人网 | 99久久婷婷 | 婷婷去俺也去 | 欧美伊人影院 | 91看片在线 | 婷婷亚洲综合 | 一区二区在线 | 欧美精品一区二区三区在线 | 日韩一区二区三区在线观看视频 | 日日爱视频| 精品国产一区二区三区成人影院 | 久热久| 黄色在线免费观看视频网站 | 国产成人jvid在线播放 | 亚洲国产69 | 在线色网|