<strong id="0toem"><dl id="0toem"></dl></strong><b id="0toem"><menuitem id="0toem"></menuitem></b>

      <b id="0toem"><menuitem id="0toem"></menuitem></b>
    1. <code id="0toem"><abbr id="0toem"></abbr></code>
      <strong id="0toem"><dl id="0toem"></dl></strong>
      <kbd id="0toem"></kbd>
              1. <code id="0toem"></code>
                <th id="0toem"><progress id="0toem"></progress></th><strong id="0toem"><form id="0toem"></form></strong>

                <th id="0toem"></th>
              2. 131 1300 0010
                其他
                當前位置: 首頁>> 元件技術(shù)>>其他>>
              3. 導(dǎo)航欄目
              4. 二極管
              5. 整流橋
              6. MOS管
              7. 其他
              8. 基于51單片機的計時器設(shè)計
                基于51單片機的計時器設(shè)計
              9. 基于51單片機的計時器設(shè)計
              10.   發(fā)布日期: 2019-10-27  瀏覽次數(shù): 1,280

                用51單片機定時器0的方式1計時,結(jié)果用4位數(shù)碼管顯示,分別為秒十位,秒個位,毫秒百位,毫秒十位。所以總共最大計時為1分鐘,精確到了0.01s。同時,加上3個獨立按鍵,分別控制秒表的清零,暫停和開始功能。

                按照模塊化的思想,首先先把要用的函數(shù)和預(yù)定義寫到一個頭文件中,要用到的預(yù)定義和全局變量如下:

                 

                基于51單片機的計時器設(shè)計

                #include

                #defineucharunsignedchar

                sbitClear=P3^7;//按鍵實現(xiàn)清零

                sbitStop=P3^6;//按鍵實現(xiàn)暫停

                sbitReStart=P3^5;//按鍵實現(xiàn)開始

                sbitdula=P2^6;//段選線接P2^6口

                sbitwela=P2^7;//位選線接P2^7口

                //table數(shù)組中存儲數(shù)碼管顯示0~F對應(yīng)的編碼

                ucharcodetable[]={

                0x3f,0x06,0x5b,0x4f,

                0x66,0x6d,0x7d,0x07,

                0x7f,0x6f,0x77,0x7c,

                0x39,0x5e,0x79,0x71};

                //計時時間,計時中斷發(fā)生一次,則加1,最大為5999

                inttime;

                接下來是將要用到的函數(shù)聲明:

                //用于動態(tài)掃描數(shù)碼管的時間較短的延時函數(shù)

                voidShortDelay();

                //用于鍵盤消抖的時間較長的延時函數(shù)

                voidLongDelay();

                //初始化

                voidInital();

                //在數(shù)碼管顯示秒十位,秒個位,微秒百位,微秒十位

                //用拼音表示很不好,將就著看吧

                voidDisplay(ucharshimiao,uchargemiao,ucharbaiwei,ucharshiwei);

                //清零函數(shù),按下清零鍵的時候調(diào)用

                voidClc();

                //暫停函數(shù),按下暫停鍵時候調(diào)用

                voidStopTImer();

                //開始或重新開始函數(shù),按下開始鍵時候調(diào)用

                voidReStartTImer();

                //鍵盤掃描函數(shù),是否有鍵被按下,并且執(zhí)行相應(yīng)操作

                voidKeyScan();

                接下來是主函數(shù):

                voidmain()

                {

                ucharshimiao,gemiao,baiwei,shiwei;

                Inital();//初始化

                while(1)

                {

                if(TIme==6000)//到了秒表最大值,自動歸零

                {

                TIme=0;

                }

                //分解出要顯示的各個數(shù)位

                shimiao=time/1000;

                gemiao=time%1000/100;

                baiwei=time%100/10;

                shiwei=time%10;

                //顯示

                Display(shimiao,gemiao,baiwei,shiwei);

                ShortDelay();

                //鍵盤掃描,有鍵按下執(zhí)行相應(yīng)操作

                KeyScan();

                }

                }


                下面的工作就是要寫相應(yīng)的處理函數(shù)了:

                首先是兩個延時函數(shù):

                voidShortDelay()

                {

                uchara=100;

                while(a--);

                }

                voidLongDelay()

                {

                inta=5000;

                while(a--);

                }


                初始化函數(shù):

                voidInital()

                {

                dula=0;

                wela=0;

                time=0;

                EA=1;

                ET0=1;//開定時器0中斷

                TMOD=0x01;

                TH0=0xdc;

                TL0=0x01;//裝載初值,計時方式1

                Clear=1;

                Stop=1;

                ReStart=1;//按鍵接口管腳輸出高電平

                }


                在數(shù)碼管上顯示時間的函數(shù):

                voidDisplay(ucharshimiao,uchargemiao,ucharbaiwei,ucharshiwei)

                {

                //輸出秒十位

                wela=1;

                P0=0xfb;

                wela=0;

                P0=0xff;

                dula=1;

                P0=table[shimiao];

                dula=0;

                ShortDelay();

                //輸出秒個位

                wela=1;

                P0=0xf7;

                wela=0;

                P0=0xff;

                dula=1;

                P0=table[gemiao];

                dula=0;

                ShortDelay();

                wela=1;

                P0=0xef;

                wela=0;

                P0=0xff;

                dula=1;

                P0=table[baiwei];

                dula=0;

                ShortDelay();

                wela=1;

                P0=0xdf;

                wela=0;

                P0=0xff;

                dula=1;

                P0=table[shiwei];

                dula=0;

                ShortDelay();

                }


                鍵盤掃描函數(shù):

                voidKeyScan()

                {

                if(Clear==0)

                {

                LongDelay();//消抖

                if(Clear==0)//確實是被按下

                {

                //Dosomthing

                Clc();

                }

                }

                //Stop和ReStart檢測方法相同

                if(Stop==0)

                {

                LongDelay();

                if(Stop==0)

                {

                //Dosomthing

                StopTimer();

                }

                }

                if(ReStart==0)

                {

                LongDelay();

                if(ReStart==0)

                {

                //Dosomthing

                ReStartTimer();

                }

                }

                }


                最后是3個按鍵按下后的處理函數(shù):

                voidClc()

                {

                TR0=0;//計時暫時停止

                time=0;//時間歸零

                Display(0,0,0,0);//顯示0000

                ShortDelay();

                }

                voidStopTimer()

                {

                //計時暫時停止,僅此而已

                TR0=0;

                }

                voidReStartTimer()

                {

                //計時重新開始,僅此而已

                TR0=1;

                }
                來源;21ic


              11. ·上一篇:
                ·下一篇:
              12. 其他關(guān)聯(lián)資訊
                深圳市日月辰科技有限公司
                地址:深圳市寶安區(qū)松崗鎮(zhèn)潭頭第二工業(yè)城A區(qū)27棟3樓
                電話:0755-2955 6626
                傳真:0755-2978 1585
                手機:131 1300 0010
                郵箱:[email protected]

                深圳市日月辰科技有限公司 版權(quán)所有:Copyright?2010-2023 www.xydibang.com 電話:13113000010 粵ICP備2021111333號
                <strong id="0toem"><dl id="0toem"></dl></strong><b id="0toem"><menuitem id="0toem"></menuitem></b>

                    <b id="0toem"><menuitem id="0toem"></menuitem></b>
                  1. <code id="0toem"><abbr id="0toem"></abbr></code>
                    <strong id="0toem"><dl id="0toem"></dl></strong>
                    <kbd id="0toem"></kbd>
                            1. <code id="0toem"></code>
                              <th id="0toem"><progress id="0toem"></progress></th><strong id="0toem"><form id="0toem"></form></strong>

                              <th id="0toem"></th>
                            2. 成年人啪啪视频 | 国产人人操人人 | 成人黄片18 | 色哟哟《欧美精品》 | 波多野结衣丝袜无码视频 |