<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

      電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
      搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

      89C52來做定時記數器程序,51定時程序

      作者:佚名    文章來源:本站原創    點擊數:    更新時間:2017-7-11

      89C52來做定時記數器程序,51定時程序

      關鍵字:單片機c語言定時程序,89c52,定時程序

      使用89C52來做定時記數器


      /***************************************************************
      功能:實現單片機定時記數器
      ***************************************************************/
      #include "reg51.h"
      sbit DsDat=0x94;   /*定義數據位輸入給74ALS164數據位就是從P14出去的*/
      sbit DsClk=0x95;   /*定義脈沖信號給164,脈沖信號是從P15出去的*/
      sbit Gw=0x90;      /*定義個位定形P10*/
      sbit Sw=0x91;      /*定義十位P11*/
      sbit Bw=0x92;      /*定義百位P12*/
      sbit Qw=0x93;     /*定義千位P13*/
      sbit sw1=P3^2;    //啟動計時器按鈕
      sbit sw2=P3^3;   //結束按鈕
      sbit sw3=P3^4;    //查看按鈕總分鐘按鈕

      /*------------------------------------------------
      功能:對應0--9顯示碼.
      -------------------------------------------------*/
      unsigned char code Led_Show[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};//{0x50,0xf5,0x68,0x4a,0x47,0xc2,0xc0,0x5b,0x40,0x42,0x41,0xc4,0xf0,0x4c,0xe0,0xe1,0xff};
      unsigned int ms=0;//1000MS為1S作為中間變量
      unsigned char ss=0;//作為秒的中間變量
      static unsigned int nn=0;//分的中間變量
      static unsigned int all_nn=0;//總的時間分鐘
      unsigned int ms1=0;//定時器1 MS的中間變量
      unsigned int ss1=0;//定時器1 秒的中間變量
      static unsigned char alltime_show=0;//顯示總分鐘的標示
      static unsigned char time_shong=0;//
      /*-------------------------------------------------
      功能:1MS延時子程序
      -------------------------------------------------*/
      void Delay_xMs(unsigned int x)
      {
          unsigned int i,j;
          for( i =0;i < x;i++ )
          {
              for( j =0;j<500;j++ );
          }
      }
      /*-------------------------------------------------
      功能:數碼管顯示子程序
      -------------------------------------------------*/
      void Hc164(unsigned char temp )
      {//temp是要顯示的定符
          unsigned char i,temp1;
          temp1 = Led_Show[temp];
          for(i = 0;i < 8;i++ )
          {
             // DsClk = 0;/*先不給脈沖給164*/
              if( temp1 & 0x80 )
                 DsDat = 1;/*數據不傳輸*/
              else
                  DsDat= 0;/*一個位的數據傳輸*/
             
             DsClk = 1;/*給脈沖給164*/
          DsClk = 0;/*先不給脈沖給164*/
              temp1 <<=1;
          }
      }
      /*to BCD控制    個十百千    位*/
      void toBCD(unsigned int y1)
      {
      unsigned char x1,x2,x3,x4,y2,y3,y4;
      x1=y1/1000;/*顯示千位*/
      if(y1<1000)
      {}
      else
      {
      Hc164(x1);
      Qw=0;
      Delay_xMs(1);
      Qw=1;
      }

      y2=y1%1000;
      x2=y2/100;

      if (y1<100)
      {}
      else
      {
      Hc164(x2);/*顯示百位*/
      Bw=0;
      Delay_xMs(1);
      Bw=1;
      }
      y3=y2%100;
      x3=y3/10;
      if(y1<10)
      {}
      else
      {
      Hc164(x3);/*顯示十位*/
      Sw=0;
      Delay_xMs(1);
      Sw=1;
      }
      y4=y3%10;
      x4=y4;


      Hc164(x4);/*顯示個位*/
      Gw=0;
      Delay_xMs(1);
      Gw=1;
      }
      /*------------------------------------------------
      定時器0的初始化工作設為1MS中斷一次
      -------------------------------------------------*/
      void T0_first(void)
      {
      TMOD=0x01;//定時器0工作方式1
      TH0=0xFC;
      TL0=0x66;
      EA=1;//CPU啟動
      ET0=1;//T/C0開中斷
      TR0=1;//啟動記數
      }
      /*------------------------------------------------
      定時器T0關中斷
      --------------------------------------------------*/
      void T0_out(void)
      {
      EA=0;//CPU關中斷
      ET0=0;//T/C0關中斷
      TR0=0;//關記數器
      }
      /*------------------------------------------------
      中斷函數1MS中斷一次
      --------------------------------------------------*/
      void timer0(void)interrupt 1 using 1
      {
          TH0=0xFC;
      TL0=0x66;
      ms=ms+1;
      if (ms==1000)//夠了1S
      {
      ms=0;
      ss=ss+1;
      if (ss==60)//夠了1分了,
      {
         ss=0;
         nn=nn+1;//分鐘加1
         all_nn=all_nn+1;//總的時間分鐘加1
         if(nn==9999)
         nn=0;
         if (all_nn==9999)
         all_nn=0;
      }
      }

      }
      //////////////////////////////////////////////////////
      /*------------------------------------------------
      定時器1的初始化工作設為1MS中斷一次
      -------------------------------------------------*/
      void T1_first(void)
      {
      TMOD=0x10;//定時器1工作方式1
      TH1=0xFC;
      TL1=0x66;
      EA=1;//CPU啟動
      ET1=1;//T/C1開中斷
      TR1=1;//啟動記數
      }
      /*------------------------------------------------
      定時器T1關中斷
      --------------------------------------------------*/
      void T1_out(void)
      {
      EA=0;//CPU關中斷
      ET1=0;//T/C1關中斷
      TR1=0;//關記數器
      }
      /*------------------------------------------------
      中斷函數1MS中斷一次
      --------------------------------------------------*/
      void timer1(void)interrupt 3 using 3
      {
      TH1=0xFC;//重裁定時器1
      TL1=0x66;
      ms1=ms1+1;
      if (ms1==1000)//夠了1S
      {
      ms1=0;
      ss1=ss1+1;
      if(ss1>=4)
      {
         //if (time_shong==1)//這說明先前已經有啟動按鈕按下
         alltime_show=time_shong;
            T1_out();//停此定時器1
                  //EA=1;//CPU開中?
                  if (alltime_show==1)
                  T0_first();//重切縷?
         
         }
      }

      }

      /*-------------------------------------------------
      主程序
      功能:在數碼管上在數碼管上顯示出啟動的總時間,以分鐘為單位,如果要查總運行時間請按第三個按鈕,如果要停止當前運行狀態,請按第二個按鈕,如果要啟動,請按第一個按鈕
      -------------------------------------------------*/
      void main()
      {
      while(1) 
      {
          if (sw1==0)
          {
          alltime_show=1;
          ms=0;//中間變量MS清零
          ss=0;//中間變量ss清零
          nn=1;//中間變量分清零
          T0_first();//初始化定時器0
          }
          if(sw2==0)
          {
          alltime_show=2;
          ms=0;//中間變量MS清零
          ss=0;//中間變量ss清零
          nn=0;//中間變量分清零
            
          }
          if(sw3==0)
          {
           if (alltime_show!=3)//如果在查看總分鐘以前開始按鈕被按下時,
           time_shong=alltime_show;//先保存下來以后有用,
              alltime_show=3;
              T1_first();//啟動定時器1
          }
          switch(alltime_show)
          {
          case 1://啟動記時器
          {
           

      toBCD(nn);//在數碼管上顯示
      break;
          }
          case 2:
          {
          
          T0_out();//關閉T/C0定時器中斷 
      toBCD(nn);//在數碼管上顯示
      break;
          }
          case 3:
          {
           
           toBCD(all_nn);//顯示出總分
           break;
          }     
      }
          if (alltime_show==0)
          
      //if (time_go==0&&time_out==0&&alltime_show==0)
      toBCD(0);//一開始就顯示0;

      }
      }

      Tags:單片機,定時程序,c語言  
      責任編輯:admin
    4. 上一篇文章:
    5. 下一篇文章: 沒有了
    6. 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 久久亚洲精品人成综合网| 国产成人亚洲综合在线| 一本大道道无香蕉综合在线| 狠狠色综合久久久久尤物| 丁香婷婷亚洲六月综合色| 天天综合色天天综合| 狠狠色丁香婷婷综合| 亚洲妓女综合网99| 久久本道综合久久伊人| 亚洲综合色一区二区三区| 久久综合九色综合欧洲| 色综合天天娱乐综合网| 亚洲国产精品综合久久2007| 亚洲国产成人久久综合一区77| 婷婷综合另类小说色区 | 亚洲欧洲日韩综合| 国产成人AV综合久久| 久艾草国产成人综合在线视频 | 亚洲色欲久久久综合网东京热| 亚洲成色在线综合网站| 五月婷婷开心综合| 亚洲av综合日韩| 亚洲综合激情五月色一区| 综合自拍亚洲综合图不卡区| 国产婷婷综合在线视频| 国产成人精品综合网站| 制服丝袜人妻综合第一页| 亚洲欧洲日产国产综合网| 伊人久久综合无码成人网| 97久久婷婷五月综合色d啪蜜芽 | 久久香蕉综合色一综合色88| 丁香狠狠色婷婷久久综合 | segui久久综合精品| 婷婷久久综合九色综合绿巨人| 色综合小说久久综合图片| 婷婷激情五月综合| 久久乐国产精品亚洲综合| 亚洲AV综合色一区二区三区| 在线综合亚洲中文精品| 色综合视频一区中文字幕| 国产精品综合在线|