找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)籃球計(jì)時(shí)器Proteus仿真程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


單片機(jī)源程序如下:
  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.                
  46.                 for(j=0;j<100;j++);
  47.         }
  48. }

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

  62. /*
  63. 時(shí)間顯示函數(shù)
  64. */
  65. void time_display(uchar w2,uchar d2){
  66.         uchar shi1,ge1;
  67.         shi1=d2/10;
  68.         ge1=d2%10;
  69.        
  70.         P00=wei_1[w2];
  71.         A10=1;
  72.         A10=0;
  73.         P00=table[shi1];;
  74.         A8=1;
  75.         A8=0;
  76.         delay_ms(5);
  77.         P00=0;
  78.         A10=1;
  79.         A10=0;
  80.         A8=1;
  81.         A8=0;
  82.        
  83.         P00=wei_1[w2+1];
  84.         A10=1;
  85.         A10=0;
  86.         P00=table[ge1];
  87.         A8=1;
  88.         A8=0;
  89.         delay_ms(5);
  90.         P00=0;
  91.         A10=1;
  92.         A10=0;
  93.         A8=1;
  94.         A8=0;       
  95. }

  96. /*
  97. 分?jǐn)?shù)顯示函數(shù)
  98. */
  99. void score_dispaly(uchar w2,uchar d2){
  100.         uchar qian2,shi2,ge2;
  101.         qian2=d2/100;
  102.         shi2=d2%100/10;
  103.         ge2=d2%100%10;
  104.        
  105.         P00=wei_1[w2];
  106.         A9=1;
  107.         A9=0;
  108.         P00=table[qian2];;
  109.         A8=1;
  110.         A8=0;
  111.         delay_ms(10);
  112.         P00=0;
  113.         A9=1;
  114.         A9=0;
  115.         A8=1;
  116.         A8=0;
  117.        
  118.         P00=wei_1[w2+1];
  119.         A9=1;
  120.         A9=0;
  121.         P00=table[shi2];
  122.         A8=1;
  123.         A8=0;
  124.         delay_ms(10);
  125.         P00=0;
  126.         A9=1;
  127.         A9=0;
  128.         A8=1;
  129.         A8=0;       
  130.        
  131.         P00=wei_1[w2+2];
  132.         A9=1;
  133.         A9=0;
  134.         P00=table[ge2];
  135.         A8=1;
  136.         A8=0;
  137.         delay_ms(10);
  138.         P00=0;
  139.         A9=1;
  140.         A9=0;
  141.         A8=1;
  142.         A8=0;
  143. }

  144. /*
  145. 鍵盤輸入函數(shù)
  146. */
  147. void key(){
  148.         static uchar key_new = 0, key_l,temp;
  149.         key_status = 0;                  
  150.         P1 = 0x0f;
  151.         if((P1 & 0x0f) != 0x0f)               
  152.         {
  153.                 delay_ms(1);                    
  154.                 if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
  155.                 {                                               
  156.                         key_new = 0;
  157.                         /*
  158.                         矩陣鍵盤掃描
  159.                         */
  160.                         key_l = (P1 | 0xf0);   
  161.                         P1 = key_l;
  162.                         switch(P1)
  163.                         {
  164.                                 /*
  165.                                 開始計(jì)時(shí)/比賽繼續(xù)       
  166.                                 */
  167.                                 case 0x7e:  
  168.                                         TR0=1;  
  169.                                         rule_flag=1;
  170.                                         time_display(6,rule_time);
  171.                                         break;         
  172.                                 /*
  173.                                 暫停比賽
  174.                                 */
  175.                                 case 0x7d:
  176.                                         TR0=0;
  177.                                         break;  
  178.                                
  179.                                 /*
  180.                                 加分,同時(shí)24秒清零和總計(jì)時(shí)器停止計(jì)時(shí)
  181.                                 */
  182.                                 case 0xee:
  183.                                         TR0=0;
  184.                                         scoreA +=3;
  185.                                         rule_time=24;   
  186.                                         rule_flag=0;
  187.                                         break;
  188.                                 case 0xed:
  189.                                         TR0=0;                                        
  190.                                         scoreA +=2;
  191.                                         rule_time=24;   
  192.                                         rule_flag=0;
  193.                                         break;
  194.                                 case 0xeb:  
  195.                                         TR0=0;
  196.                                         scoreA +=1;
  197.                                         rule_time=24;   
  198.                                         rule_flag=0;
  199.                                         break;
  200.                                 case 0xde:  
  201.                                         TR0=0;
  202.                                         scoreB +=3;
  203.                                         rule_time=24;   
  204.                                         rule_flag=0;
  205.                                    break;
  206.                                 case 0xdd:  
  207.                                         TR0=0;
  208.                                         scoreB +=2;
  209.                                         rule_time=24;   
  210.                                         rule_flag=0;
  211.                                         break;
  212.                                 case 0xdb:  
  213.                                         TR0=0;
  214.                                         scoreB +=1;
  215.                                         rule_time=24;   
  216.                                         rule_flag=0;
  217.                                         break;
  218.                                 /*
  219.                                 增加比賽節(jié)數(shù),同時(shí)24秒復(fù)位和總計(jì)時(shí)器復(fù)位
  220.                                 */
  221.                                 case 0xbd:
  222.                                         match++;
  223.                                         minute=12;
  224.                                         second=0;
  225.                                         TR0=0;
  226.                                         rule_time=24;   
  227.                                         rule_flag=0;
  228.                                         break;
  229.                                 /*
  230.                                 手動(dòng)24秒復(fù)位
  231.                                 */
  232.                                 case 0xbe:
  233.                                         if(TR0==1){
  234.                                                         rule_time=0;   
  235.                                                         rule_flag=0;
  236.                                         }else{
  237.                                                         rule_flag=0;  
  238.                                         }
  239.                                         break;
  240.                         }       
  241.                 }                       
  242.         }
  243.         else
  244.         {
  245.                 key_new = 1;
  246.         }
  247. }

  248. void main()
  249. {
  250.         IO_init();
  251.         time_init();
  252.         while(1){
  253.                 key();
  254.                
  255.                 if(second==0){
  256.                         /*
  257.                                 判斷某節(jié)比賽是否結(jié)束
  258.                         */
  259.                         if(minute==0){
  260.                                 /*
  261.                                 判斷是否為最后一節(jié)比賽
  262.                                 */
  263.                                 if(match<4){
  264.                                         /*
  265.                                         計(jì)時(shí)系統(tǒng)恢復(fù)為默認(rèn)值,比賽節(jié)數(shù)加一
  266.                                         */
  267.                                         second=60;
  268.                                         minute=11;
  269.                                         match++;
  270.                                         rule_time=24;   
  271.                                         rule_flag=0;
  272.                                 }       
  273.                                 TR0=0;
  274.                         }
  275.                         /*
  276.                         比賽分鐘數(shù)減一
  277.                         */
  278.                         else {       
  279.                                 second=60;
  280.                                 minute--;
  281.                         }                               
  282.                 }
  283.                 /*
  284.                 24秒結(jié)束,計(jì)時(shí)器暫停和24秒復(fù)位
  285.                 */
  286.                 if(rule_time<=0){
  287.                         TR0=0;
  288.                         rule_time=24;       
  289.                 }
  290.                
  291.                 /*
  292.                 顯示
  293.                 */
  294.                 time_display(0,minute);
  295.                 time_display(2,second);
  296.                 time_display(4,match);
  297.                 time_display(6,rule_time);
  298.                 score_dispaly(1,scoreA);
  299.                 score_dispaly(5,scoreB);
  300.         }
  301. }
復(fù)制代碼

所有資料51hei附件下載:
籃球計(jì)時(shí)器.7z (70.69 KB, 下載次數(shù): 0)


評分

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

查看全部評分

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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