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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2638|回復: 1
收起左側

單片機足球賽補時器電路與源程序設計

[復制鏈接]
ID:399107 發表于 2018-9-25 21:37 | 顯示全部樓層 |閱讀模式
足球賽補時牌設計:要求用6位數碼管按照“mm--ss”格式動態顯示補時及倒計時,并加2個按鍵(一個設置補時多少分鐘,按一次加1,可循環設置0-19分鐘,另一個按下,開始倒計時),計時到0時,驅動蜂鳴器發出響聲,頻率為1/100ms,持續10s。要求在KEIL中編寫程序,用PROTEUS設計電路并仿真運行。(評分標準:高位沒有數字時不顯示:A;高位沒有數字時顯示0B

電路原理圖如下:

電路圖

電路圖


單片機代碼:

  1. #include <reg51.h> //51單片機頭文件
  2. #include<intrins.h>        //51庫函數
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit DX = P2^6;//段選接P2.6引腳
  6. sbit WX = P2^7; //位選接P2.7引腳
  7. sbit BUZZ = P2^0;
  8. char second = 0;
  9. char minute = 0; //計數,時間(分鐘)




  10. /****
  11.         共陰級
  12.         table[10]表示不顯示
  13.         table[11] 表示“-”
  14. **************/
  15. uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,
  16.                 0x7d, 0x07, 0x7f, 0x6f, 0x00, 0x40};
  17. uchar s[8];
  18. uchar delay = 1;
  19. uchar n = 0;
  20. uint mm=0;
  21. uchar speak = 0; //標識蜂鳴器是否開始發聲


  22. void delay_ms(uint t)        //延時函數
  23. {
  24.          uint i,j;
  25.         for(i=0;i<t;i++)
  26.         for(j=0;j<110;j++);
  27. }


  28. void init()
  29. {
  30.         EA = 1;                          //開全局中斷
  31.         EX0 = 1;//INT0中斷允許
  32.         IT0 = 1;//觸發方式為下降沿觸發
  33.         EX1 = 1;//INT0中斷允許
  34.         IT1 = 1;//觸發方式為下降沿觸發


  35.         TMOD = 0x19;          //T1軟啟動、定時器、工作方式1;T0硬啟動、定時器、工作方式1
  36.         TH0 = 0x4C;       //給定初值
  37.         TL0 = 0x00;
  38.         TH1 = 0xff;       //給定初值
  39.         TL1 = 0x00;
  40.         ET0 = 1;           //定時器中斷打開
  41.         ET1 = 1;
  42.         TR0 = 0;           //不啟動定時器中斷
  43.         TR1 = 0;                   //
  44. }
  45. void fun()
  46. {
  47.         s[0] = table[second%10];
  48.         s[1] = table[second/10];
  49.         s[2] = table[11];
  50.         s[3] = table[11];
  51.         if(minute%10!=0)        
  52.                 s[4] = table[minute%10];
  53.         else
  54.                 s[4] = table[10];
  55.         if(minute/10!=0)        
  56.                 s[5] = table[minute/10];
  57.         else
  58.                 s[5] = table[10];
  59. }
  60. void dispaly()
  61. {
  62.         uchar i;
  63.         uchar temp = 0xdf;
  64.         fun();
  65.         for(i=0;i<6;i++){
  66.                 DX = 0;
  67.                 WX = 0;


  68.                 P0 = 0x00;
  69.                 DX = 1;
  70.                 P0 = s[ i];
  71.                 DX = 0;


  72.                 P0 = 0xff;
  73.                 WX = 1;
  74.                 P0 = temp;
  75.                 WX = 0;


  76.                 temp = _cror_(temp, 1);
  77.         
  78.                 TH1 = 0xff;
  79.                 TL1 = 0x00;
  80.                 TR1 = 1;  //延時        
  81.                 while(delay<1);
  82.                  


  83.                 delay = 0;
  84.         }
  85. }


  86. void main()
  87. {
  88.         init();                        
  89.         while(1){
  90.           dispaly();


  91.            if(speak==1){
  92.                            DX = 1;
  93.                         P0 = table[10];
  94.                         DX = 0;
  95.                         P0 = 0xff;
  96.                         WX = 1;
  97.                         P0 = 0x01;
  98.                         WX = 0;


  99.                         BUZZ = 0;
  100.                             TR1 = 1;
  101.                         TL0 = 19664%256;
  102.                         TH0 = 19664/256;       //給定初值                                                         
  103. //                        delay_ms(10000);
  104. //                        TR1 = 0;
  105. //                        speak=0;
  106.            }           
  107.         }        
  108. }
  109. void EX_INT0() interrupt 0
  110. {
  111.         minute++;
  112.         if(minute > 19) minute=19;
  113. }
  114. void EX_INT1() interrupt 2
  115. {
  116.         TR0 = 1;
  117. }
  118. void ET_T0() interrupt 1
  119. {
  120.         TL0 = 19664%256;
  121.         TH0 = 19664/256;       //給定初值
  122.         n++;
  123.         if(n==20){
  124.                  n = 0;
  125.                  if(minute ==0 && second==0){
  126.                          TR0 = 0;
  127.                         speak = 1;        
  128.                  }                          
  129.                  else if(second==0){
  130.                         minute --;
  131.                         second = 59;
  132.                  }
  133.                  else{
  134.                    second--;                          
  135.                  }
  136.         }
  137. }
  138. void ET_T1() interrupt 3
  139. {
  140.         if(speak==1){
  141.                 mm++;
  142.                 BUZZ = ~BUZZ;
  143.                 TL0 = 19664%256;
  144.                 TH0 = 19664/256;       //給定初值
  145.                  if(mm==200){
  146.                          speak=0;                                                                     
  147.                         TR1 = 0;
  148.            }           
  149.         }        
  150.         delay=1;
  151. }
復制代碼


評分

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

查看全部評分

回復

使用道具 舉報

ID:501451 發表于 2019-3-30 22:10 | 顯示全部樓層
大佬厲害了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表