<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        51單片機秒表C程序

        作者:huqin   來源:徐冉   點擊數:  更新時間:2014年03月24日   【字體:

        本程序所用的原理圖下載: 點這里 ,單片機芯片使用的stc89c52;電路找到相應部分即可.這是一整個單片機開發板的電路圖其他的忽略.
        本程序的keil工程下載: http://www.thefapper.com/f/miaobiao.rar   以下是通過測試的源代碼:

        /*
        *功能:用定時器0實現秒表,實現60秒定時,精確度為1毫秒
        *   利用key1獨立按鍵實現定時器的啟動和停止,
        *   利用key2獨立按鍵實現秒表的清零;
        *日期:2013-03-24
        *作者:徐冉
        *注意事項:若打開兩個定時器時,必須使用兩個定時器,
        *     否則兩個定時器都不工作。!
        **/
        /**********stc89C52-RC 51hei單片機實驗板**********/
        /**********51hei-5開發板**********/
        #include <reg52.h>
        typedef unsigned int uint;
        typedef unsigned char uchar;
        sbit wela = P2^7;
        sbit dula = P2^6;
        sbit key1 = P3^4;
        sbit key2 = P3^5;
        sbit FM   = P2^3;//蜂鳴器
        uchar code table[] = { 
               0x3F,  //"0"
                        0x06,  //"1"
                        0x5B,  //"2"
                        0x4F,  //"3"
                        0x66,  //"4"
                        0x6D,  //"5"
                        0x7D,  //"6"
                        0x07,  //"7"
                        0x7F,  //"8"
                        0x6F,  //"9"
                        0x77,  //"A"
                        0x7C,  //"B"
                        0x39,  //"C"
                        0x5E,  //"D"
                        0x79,  //"E"
                        0x71,  //"F"
                        0x76,  //"H"
                        0x38,  //"L"
                        0x37,  //"n"
                        0x3E,  //"u"
                        0x73,  //"P"
                        0x5C,  //"o"
                        0x40,  //"-"
                        0x00,  //熄滅
                        0x40  //自定義
         };
        uint counter, num_h, num_m;
        void delay(uint xms);
        void display_h(uint num_h);
        void init();
        void display_m(uint num_m);
        void keyscan_D();
        void keyscan_Q();
        //主函數
        void main()
        {
         init();
         while(1)
         {
          dula = 1;
          P0 = table[22];
          dula = 0;
          P0 = 0xff;
          wela = 1;
          P0 = 0xfb;
          wela = 0;
          keyscan_D();
          keyscan_Q();
          display_h(num_h);
          display_m(num_m);
         }
        }
        //定時器0初始化函數
        void init()
        {

         TMOD = 0x01;
         TH0 = 0xFC;
         TL0 = 0x67;
         TR0 = 1;
         EA = 1;
         ET0 = 1;
        }
        //毫秒位顯示子函數
        void display_h(uint num_h)
        {
         uchar bai,shi,ge;
         bai = num_h / 100 % 10;
         shi = num_h / 10 % 10;
         ge  = num_h % 10;
         dula = 1;
         P0 = table[bai];
         dula = 0;
         P0 = 0xff;
         wela = 1;
         P0 = 0xf7;
         wela = 0;
         P0 = 0x00;
         delay(1);
            dula = 1;
         P0 = table[shi];
         dula = 0;
         P0 = 0xff;
         wela = 1;
         P0 = 0xef;
         wela = 0;
         P0 = 0x00;
         delay(1);
         
         dula = 1;
         P0 = table[ge];
         dula = 0;
         P0 = 0xff;
         wela = 1;
         P0 = 0xdf;
         wela = 0;
         P0 = 0x00;
         delay(1);
        }
        //秒位顯示子函數
        void display_m(uint num_m)
        {
         uchar shi_, ge_;
         shi_ = num_m / 10 % 10;
         ge_ = num_m % 10;
         dula = 1;
         P0 = table[shi_];
         dula = 0;
         P0 = 0xff;
         wela = 1;
         P0 = 0xfe;
         wela = 0;
         P0 = 0x00;
         delay(1);
         dula = 1;
         P0 = table[ge_];
         dula = 0;
         P0 = 0xff;
         wela = 1;
         P0 = 0xfd;
         wela = 0;
         P0 = 0x00;
         delay(1);
        }
        //延時子函數
        void delay(uint xms)
        {
         uint i, j;
         for(i = xms; i > 0; i--)
           for(j = 125; j > 0; j--);
        }
        //獨立按鍵1檢測子函數 ,開啟和關閉
        void keyscan_D()
        {
         if(key1 == 0)
         {
          delay(10);
          if(key1 == 0)
          {
           TR0 = ~TR0;
           FM = 0;
           while(!key1);
           FM = 1; 
          }
         }
        }
        //獨立按鍵2檢測子函數,清零
        void keyscan_Q()
        {
         if(key2 == 0)
         {
          delay(10);
          if(key2 == 0)
          {
           counter = 0;
           num_h = 0;
           num_m = 0;
           FM = 0;
           while(!key2);
           FM = 1;
          }
         }
        }
        //定時器0中斷子程序
        void int_time0() interrupt 1
        {
         TH0 = 0xFC;
         TL0 = 0x67;
         counter++;
         if(counter == 1)
         {
          counter = 0;
          num_h++; //毫秒自增
          if(num_h == 1000)
          {
           num_h = 0;
           num_m++; //秒自增
           if(num_m == 60)
           {
            num_m = 0;
           }
          }
         }
        }

         

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮