欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

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

搜索
查看: 4175|回復(fù): 4
收起左側(cè)

單片機(jī)編程控制LED七段數(shù)碼管作顯示的籃球賽計(jì)時(shí)計(jì)分系統(tǒng)

[復(fù)制鏈接]
ID:867528 發(fā)表于 2020-12-25 09:43 | 顯示全部樓層 |閱讀模式
本次設(shè)計(jì)用由AT89C51編程控制LED七段數(shù)碼管作顯示的球賽計(jì)時(shí)計(jì)分系統(tǒng)。系統(tǒng)應(yīng)具有賽程定時(shí)設(shè)置,賽程時(shí)間暫停,及時(shí)刷新甲、乙雙方的成績(jī)以及賽后成績(jī)暫存等功能。
內(nèi)容包括:顯示、鍵盤、時(shí)鐘等內(nèi)容
  •    設(shè)計(jì)說(shuō)明
2.1需求分析
2.1.1 計(jì)分系統(tǒng)
分為“A隊(duì)”和“B隊(duì)”的“3分”,“2分”,“1分”各六個(gè)按鍵輸入部分,以及兩隊(duì)比分的LED顯示部分。在每次增加分?jǐn)?shù)的同時(shí),“24秒”計(jì)時(shí)恢復(fù)為初始值,“12分鐘”計(jì)時(shí)暫停,等待比賽的繼續(xù)進(jìn)行
2.1.2 計(jì)時(shí)系統(tǒng)
(1)比賽開(kāi)始/繼續(xù):當(dāng)“比賽開(kāi)始/繼續(xù)”鍵按下后,“24s”和“12分鐘”計(jì)時(shí)器開(kāi)始倒計(jì)時(shí);
(2)手動(dòng)24s復(fù)位:當(dāng)“24s復(fù)位” 鍵按下后,“24s”倒計(jì)時(shí)恢復(fù)初始值,“12分鐘”倒計(jì)時(shí)暫停,等待比賽的繼續(xù);
(3)比賽暫停:“比賽暫停”鍵按下后,“24s”倒計(jì)時(shí)和“12分鐘”倒計(jì)時(shí)均暫停,等待比賽的繼續(xù)進(jìn)行;
(4)自動(dòng)增加比賽節(jié)數(shù):當(dāng)“12分鐘”倒計(jì)時(shí)完成后,判斷當(dāng)前節(jié)數(shù)是否為最后一節(jié),若不是,則節(jié)數(shù)自動(dòng)增加,并“12分鐘”和“24s”均恢復(fù)默認(rèn)值,等待下一節(jié)比賽的進(jìn)行。
2.2原理分析

采用單片機(jī)AT89C51作為本設(shè)計(jì)的核心元件。利用7段共陰LED作為顯示器件。在此設(shè)計(jì)中共接入了6個(gè)7段共陰LED顯示器,其中2個(gè)4位LED顯示器用于記錄AB隊(duì)的分?jǐn)?shù),每隊(duì)1個(gè)4位LED顯示器顯示范圍可達(dá)到0~999分,足夠滿足賽程需要;2個(gè)兩位LED顯示器用來(lái)記錄賽程時(shí)間,其中1個(gè)用于顯示分鐘,1個(gè)用于顯示秒鐘;使用1個(gè)2位LED顯示器用于顯示“24s”倒計(jì)時(shí),賽程計(jì)時(shí)均采用倒計(jì)時(shí)方式。即比賽前將時(shí)間設(shè)置好,即12分鐘,比賽開(kāi)始時(shí)啟動(dòng)計(jì)時(shí),直至計(jì)時(shí)到零為止。本設(shè)計(jì)中設(shè)立了10個(gè)按鍵,其中6個(gè)用于設(shè)置兩隊(duì)的比分,1個(gè)用于比賽開(kāi)始/比賽繼續(xù),1個(gè)用于暫停,1個(gè)用于手動(dòng)增加比賽節(jié)數(shù),一個(gè)用于恢復(fù)“24s”倒計(jì)時(shí)等功能。

2.3總體設(shè)計(jì)
系統(tǒng)主要包括單片機(jī)、LED顯示電路、按鍵控制電路、時(shí)鐘電路及復(fù)位電路等組成
2.4軟硬件設(shè)計(jì)
2.4.1 硬件設(shè)計(jì)
設(shè)計(jì)思路:
(1)按鍵模塊設(shè)計(jì) :
按鍵接至P1口和P3口,按鍵按下時(shí)輸入是低電平。鍵的設(shè)置如下:“A1”,“A2”,“A3”鍵是A隊(duì)加1分、加2分,加3分鍵盤,B隊(duì)同理!氨荣愰_(kāi)始/比賽繼續(xù)”是啟動(dòng)鍵,“比賽暫!笔菚和fI。此外,還有兩個(gè)按鍵, “24s”復(fù)位鍵,“增加比賽節(jié)數(shù)”鍵。
(2) LED顯示模塊設(shè)計(jì) :
顯示分為計(jì)時(shí)和計(jì)分顯示兩個(gè)部分,均采用共陰極LED數(shù)碼管動(dòng)態(tài)掃描顯示,由2個(gè)四位一體和4個(gè)兩位一體的共陰極數(shù)碼管構(gòu)成。數(shù)碼管的7個(gè)段控端輸出經(jīng)過(guò)74HC573驅(qū)動(dòng)器進(jìn)行電流放大驅(qū)動(dòng)接至P0口。采用動(dòng)態(tài)掃描方式,在足夠短的周期內(nèi),使各位數(shù)碼管逐個(gè)輪流受控顯示。
設(shè)計(jì)截圖:
2.4.2 軟件設(shè)計(jì)
軟件設(shè)計(jì)采用C語(yǔ)言模塊設(shè)計(jì)方法,程序由主程序、T0中斷程序、顯示程序、外部中斷0程序、按鍵程序、初始函數(shù)、計(jì)時(shí)函數(shù)、延時(shí)函數(shù)組成。

測(cè)試結(jié)果與分析
設(shè)計(jì)采用C語(yǔ)言編程,在Keil C51軟件編譯環(huán)境中,經(jīng)過(guò)編譯和連接,生成十六進(jìn)制的目標(biāo)代碼文件.hex。在硬件上,用Proteus軟件繪制出原理圖,經(jīng)過(guò)純電路調(diào)試無(wú)誤后,將生成的目標(biāo)代碼文件加載到Proteus界面的AT89C51中。接著再進(jìn)行軟硬件聯(lián)合調(diào)試,反復(fù)調(diào)試,直至所有顯示及按鍵功能實(shí)現(xiàn),直至仿真成功。
運(yùn)行截圖:
  •    框圖
C語(yǔ)言程序代碼:
  1. #include<reg52.h>
  2. #include<absacc.h>

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

  5. sbit A8=P2^0;
  6. sbit A9=P2^1;
  7. sbit A10=P2^2;
  8. sbit A11=P2^3;
  9. sfr P00=0x80;


  10. uchar code wei_1[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};
  11. uchar code table[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0x77,0x7c,0x39,0x5e,0x79,0x71,0X00,0X40};

  12. uchar minute=12;  //分
  13. uchar second=0;   //秒
  14. uchar key_status=0;     //按鍵狀態(tài)值
  15. uchar scoreA=0;     //A隊(duì)得分
  16. uchar scoreB=0;     //B隊(duì)得分
  17. uchar count1=20;    //記錄定時(shí)器時(shí)間
  18. uchar match=1;      //比賽節(jié)數(shù)
  19. uchar rule_time=24; //記錄24秒規(guī)則
  20. uchar rule_flag=0;          //記錄24秒規(guī)則是否啟用


  21. /*
  22. 初始化IO口
  23. */
  24. void IO_init(){
  25.     A8=0;
  26.     A9=0;
  27. }
  28. /*
  29. 初始化時(shí)間
  30. */

  31. void time_init(){
  32.     TMOD = 0x01;
  33.     TH0 = (65536-50000)/256;
  34.     TL0 = (65536-50000)%256;
  35.     EA = 1;
  36.     ET0 = 1;
  37. }
  38. /*
  39. 延時(shí)函數(shù)
  40. */
  41. void delay_ms(uint z){
  42.   uint i;
  43.     uchar j;
  44.     for(i=0;i<z;i++){

  45.         for(j=0;j<100;j++);
  46.     }
  47. }

  48. /*
  49. 計(jì)時(shí)函數(shù)
  50. */
  51. void T0_Time() interrupt 1 using 1{
  52.     if (count1-- == 0)
  53.     {
  54.         second--;
  55.         rule_time--;
  56.         count1 = 20;
  57.     }
  58.     TH0 = (65536-50000)/256;
  59.     TL0 = (65536-50000)%256;
  60. }

  61. /*
  62. 時(shí)間顯示函數(shù)
  63. */
  64. void time_display(uchar w2,uchar d2){
  65.     uchar shi1,ge1;
  66.     shi1=d2/10;
  67.     ge1=d2%10;

  68.     P00=wei_1[w2];
  69.     A10=1;
  70.     A10=0;
  71.     P00=table[shi1];;
  72.     A8=1;
  73.     A8=0;
  74.     delay_ms(5);
  75.     P00=0;
  76.     A10=1;
  77.     A10=0;
  78.     A8=1;
  79.     A8=0;

  80.     P00=wei_1[w2+1];
  81.     A10=1;
  82.     A10=0;
  83.     P00=table[ge1];
  84.     A8=1;
  85.     A8=0;
  86.     delay_ms(5);
  87.     P00=0;
  88.     A10=1;
  89.     A10=0;
  90.     A8=1;
  91.     A8=0;  
  92. }

  93. /*
  94. 分?jǐn)?shù)顯示函數(shù)
  95. */
  96. void score_dispaly(uchar w2,uchar d2){
  97.     uchar qian2,shi2,ge2;
  98.     qian2=d2/100;
  99.     shi2=d2%100/10;
  100.     ge2=d2%100%10;

  101.     P00=wei_1[w2];
  102.     A9=1;
  103.     A9=0;
  104.     P00=table[qian2];;
  105.     A8=1;
  106.     A8=0;
  107.     delay_ms(10);
  108.     P00=0;
  109.     A9=1;
  110.     A9=0;
  111.     A8=1;
  112.     A8=0;

  113.     P00=wei_1[w2+1];
  114.     A9=1;
  115.     A9=0;
  116.     P00=table[shi2];
  117.     A8=1;
  118.     A8=0;
  119.     delay_ms(10);
  120.     P00=0;
  121.     A9=1;
  122.     A9=0;
  123.     A8=1;
  124.     A8=0;  

  125.     P00=wei_1[w2+2];
  126.     A9=1;
  127.     A9=0;
  128.     P00=table[ge2];
  129.     A8=1;
  130.     A8=0;
  131.     delay_ms(10);
  132.     P00=0;
  133.     A9=1;
  134.     A9=0;
  135.     A8=1;
  136.     A8=0;
  137. }

  138. /*
  139. 鍵盤輸入函數(shù)
  140. */
  141. void key(){
  142.     static uchar key_new = 0, key_l;
  143.     key_status = 0;                 
  144.     P1 = 0x0f;
  145.     if((P1 & 0x0f) != 0x0f)   
  146.     {
  147.         delay_ms(1);           
  148.         if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
  149.         {                     
  150.             key_new = 0;
  151.             /*
  152.             矩陣鍵盤掃描
  153.             */
  154.             key_l = (P1 | 0xf0);  
  155.             P1 = key_l;
  156.             switch(P1)
  157.             {
  158.                 /*
  159.                 開(kāi)始計(jì)時(shí)/比賽繼續(xù)  
  160.                 */
  161.                 case 0x7e:
  162.                     TR0=1;
  163.                     rule_flag=1;
  164.                     time_display(6,rule_time);
  165.                     break;     
  166.                 /*
  167.                 暫停比賽
  168.                 */
  169.                 case 0x7d:
  170.                     TR0=0;
  171.                     break;

  172.                 /*
  173.                 加分,同時(shí)24秒清零和總計(jì)時(shí)器停止計(jì)時(shí)
  174.                 */
  175.                 case 0xee:
  176.                     TR0=0;
  177.                     scoreA +=3;
  178.                     rule_time=24;  
  179.                     rule_flag=0;
  180.                     break;
  181.                 case 0xed:
  182.                     TR0=0;                 
  183.                     scoreA +=2;
  184.                     rule_time=24;  
  185.                     rule_flag=0;
  186.                     break;
  187.                 case 0xeb:
  188.                     TR0=0;
  189.                     scoreA +=1;
  190.                     rule_time=24;  
  191.                     rule_flag=0;
  192.                     break;
  193.                 case 0xde:
  194.                     TR0=0;
  195.                     scoreB +=3;
  196.                     rule_time=24;  
  197.                     rule_flag=0;
  198.                    break;
  199.                 case 0xdd:
  200.                     TR0=0;
  201.                     scoreB +=2;
  202.                     rule_time=24;  
  203.                     rule_flag=0;
  204.                     break;
  205.                 case 0xdb:
  206.                     TR0=0;
  207.                     scoreB +=1;
  208.                     rule_time=24;  
  209.                     rule_flag=0;
  210.                     break;
  211.                 /*
  212.                 增加比賽節(jié)數(shù),同時(shí)24秒復(fù)位和總計(jì)時(shí)器復(fù)位
  213.                 */
  214.                 case 0xbd:
  215.                     match++;
  216.                     minute=12;
  217.                     second=0;
  218.                     TR0=0;
  219.                     rule_time=24;  
  220.                     rule_flag=0;
  221.                     break;
  222.                 /*
  223.                 手動(dòng)24秒復(fù)位
  224.                 */
  225.                 case 0xbe:
  226.                     if(TR0==1){
  227.                             rule_time=0;  
  228.                             rule_flag=0;
  229.                     }else{
  230.                             rule_flag=0;
  231.                     }
  232.                     break;
  233.             }  
  234.         }         
  235.     }
  236.     else
  237.     {
  238.         key_new = 1;
  239.     }
  240. }

  241. void main()
  242. {
  243.     IO_init();
  244.     time_init();
  245.     while(1){
  246.         key();

  247.         if(second==0){
  248.             /*
  249.                 判斷某節(jié)比賽是否結(jié)束
  250.             */
  251.             if(minute==0){
  252.                 /*
  253.                 判斷是否為最后一節(jié)比賽
  254.                 */
  255.                 if(match<4){
  256.                     /*
  257.                     計(jì)時(shí)系統(tǒng)恢復(fù)為默認(rèn)值,比賽節(jié)數(shù)加一
  258.                     */
  259.                     second=60;
  260.                     minute=11;
  261.                     match++;
  262.                     rule_time=24;  
  263.                     rule_flag=0;
  264.                 }  
  265.                 TR0=0;
  266.             }
  267.             /*
  268.             比賽分鐘數(shù)減一
  269.             */
  270.             else {
  271.                 second=60;
  272.                 minute--;
  273.             }              
  274.         }
  275.         /*
  276.         24秒結(jié)束,計(jì)時(shí)器暫停和24秒復(fù)位
  277.         */
  278.         if(rule_time<=0){
  279.             TR0=0;
  280.             rule_time=24;  
  281.         }

  282.         /*
  283.         顯示
  284.         */
  285.         time_display(0,minute);
  286.         time_display(2,second);
  287.         time_display(4,match);
  288.         time_display(6,rule_time);
  289.         score_dispaly(1,scoreA);
  290.         score_dispaly(5,scoreB);
  291.     }
  292. }
復(fù)制代碼
以上的Word格式文檔51黑下載地址:
單片機(jī)文檔 18電3 趙俊杰.docx (540.65 KB, 下載次數(shù): 27)
回復(fù)

使用道具 舉報(bào)

ID:891769 發(fā)表于 2021-3-14 19:17 | 顯示全部樓層
能分享一下Proteus仿真工程嗎?自己畫太麻煩了
回復(fù)

使用道具 舉報(bào)

ID:894520 發(fā)表于 2021-4-19 13:14 來(lái)自觸屏版 | 顯示全部樓層
仔aa 發(fā)表于 2021-3-14 19:17
能分享一下Proteus仿真工程嗎?自己畫太麻煩了

你好,現(xiàn)在有Protus仿真程序了嘛
回復(fù)

使用道具 舉報(bào)

ID:1026567 發(fā)表于 2022-5-15 12:27 | 顯示全部樓層
你好,能不能把仿真圖分享一下,
回復(fù)

使用道具 舉報(bào)

ID:1025410 發(fā)表于 2022-5-16 19:36 | 顯示全部樓層
吧主,求仿真圖
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表