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

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

        單片機左右流水燈與數碼管動態顯示C程序

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

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

        /*
        *功能:用定時器0實現定時200毫秒流水燈,
        *    同時用定時器1實現動態顯示654321,
        *    且蜂鳴器發聲;
        *日期:2014-03-24
        *作者:徐冉
        *注意事項:若打開兩個定時器時,必須使用兩個定時器,
        *     否則兩個定時器都不工作。!
        **/
        /**********AT89C52-RC 51hei單片機實驗板**************/
        /*************51hei-開發板*********************/
        #include <reg52.h>
        typedef unsigned int uint;
        typedef unsigned char uchar;
        sbit wela = P2^7;  //數碼管位聲明
        sbit dula = P2^6; //數碼管段選聲明
        sbit FM = P2^3;//蜂鳴器聲明
        uchar counter = 0, counter1 = 0, j = 0, flag = 0, flag1 = 0;
        uchar num = 6, num1 = 0;
        //數碼管段選編碼
        uchar code table_du [] = {  
                  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,  //熄滅
                           0x00  //自定義
               };
        //數碼管位選編碼
        uchar code table_we[] = {
               0xfe,
               0xfd,
               0xfb,
               0xf7,
               0xef,
               0xdf
               };
        void init();
        void display();
        void main()
        {
         
         init();
         while(1)
         {
           if(counter1 == 30)
           {
            counter1 = 0;
           display();
           num--;
           num1++;
           if(num == 0)
           {
            num = 6;
           }
           if(num1 == 6)
           {
            num1 = 0;
            }
           }
          
           if(counter == 200)//定時到4秒后,流水燈向右流動
           {     
            counter = 0;//counter清零,
           //關閉定時器0
           TR0 = 0;
           //ET0 = 0;
           flag = 1; //標志變量置1后,定時器重新初始化
           TH0 = 0xB8; //定時器0定時20毫秒
           TL0 = 0x00;
           TR0 = 1;   //重新打開定時器0
           //ET0 = 1;
           j = 0;
           }
         }
        }
        //定時器初始化程序
        void init()
        {
         //定時器0和定時器1初始化函數
         TMOD = 0x11;//定義定時器1和0在工作方式1下
         TH0 = 0xB8; //定時器0定時20毫秒
         TL0 = 0x00;
         TH1 = 0xFC; //定時器1定時20毫秒
         TL1 = 0x67;
         TR0 = 1;   //打開定時器0
         TR1 = 1;   //打開定時器1
         EA = 1; //打開總中斷
         ET0 = 1;  //打開定時器0中斷
         ET1 = 1;  //打開定時器1中斷
        }
        //數碼管顯示子程序
        void display()
        {
         dula = 1;
         P0 = table_du[num];
         dula = 0;
         P0 = 0xff;
         wela = 1;
         P0 = table_we[num1];
         wela = 0;
         dula = 1;
         P0 = table_du[num];
         dula = 0;
         P0 = 0xff;
         wela = 1;
         P0 = table_we[num1];
         wela = 0;
         
         dula = 1;
         P0 = table_du[num];
         dula = 0;
         P0 = 0xff;
         wela = 1;
         P0 = table_we[num1];
         wela = 0;
         
         dula = 1;
         P0 = table_du[num];
         dula = 0;
         P0 = 0xff;
         wela = 1;
         P0 = table_we[num1];
         wela = 0;
         
         dula = 1;
         P0 = table_du[num];
         dula = 0;
         P0 = 0xff;
         wela = 1;
         P0 = table_we[num1];
         wela = 0;
         
         dula = 1;
         P0 = table_du[num];
         dula = 0;
         P0 = 0xff;
         wela = 1;
         P0 = table_we[num1];
         wela = 0;
         
        }
        //中斷定時器0
        void int_time0() interrupt 1
        {
          TH0 = 0xB8;
          TL0 = 0x00;
          counter++;
          if(flag == 0)
          {
           if(counter % 10 == 0)//定時200毫秒
           {
            P1 = ~(1 << j++);//流水燈左移流動
            if(j == 8)
            {
             j = 0;
            }
           }
           }
           else
           {
            if(counter % 5 == 0)
           {
            //counter = 0;
             //流水燈右移流動
             P1 = ~(0x80 >> j++);
            FM = ~FM;
            if(j == 8)
            j = 0;
           }
           }
         
         
        }
        //中斷定時器1
        void int_time1() interrupt 3
        {
           TH1 = 0xFC;
          TL1 = 0x67;
          counter1++;
         
        }
         

         

        關閉窗口

        相關文章

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