在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 第5課 讓發(fā)光二極管閃爍

            第5課 讓發(fā)光二極管閃爍

            作者: 時(shí)間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
            這里的for語句和上面的while語句都可以用來進(jìn)行延時(shí),這種方法稱為軟件延時(shí),和上面for語句一樣,其準(zhǔn)確的延時(shí)時(shí)間在C語言程序中不容易計(jì)算出來。如果想要得到精確的延時(shí)時(shí)間,我們則可以用到單片機(jī)內(nèi)部的硬件資源定時(shí)器,它可以精確的微秒級(jí),這個(gè)后面的課程中會(huì)講到。雖然得不到精確的延時(shí)時(shí)間,但大概的時(shí)間我們剛可以通過軟件仿真的方法得出,關(guān)于仿真具體的調(diào)試方法我們這里不作講解,這此我們給出一個(gè)51單片機(jī)經(jīng)常用到延時(shí)時(shí)間:
            for語句中兩個(gè)變量的類型都為unsigned int 時(shí),內(nèi)層的for語句變量的值恒為110時(shí),外層for語句變量的值為多少,這個(gè)for嵌套語句延時(shí)時(shí)間就約為多少毫秒。如下面的程序:
            unsigned int i;
            unsigned int j;
            for(i=1;i<=1000;i++)
            {
            for(j=1;j<=110;j++);
            }
            這個(gè)程序中外層for語句中變的值為1000,其延時(shí)的時(shí)間就約為1000毫秒,即1秒,若要想得到其它的延時(shí)時(shí)間,只需要改變i變量的值就可以了。
            下面我們利用 for語句寫一個(gè)程序,其功能為讓L1燈以間隔1秒的時(shí)間閃爍。程序如例2所示。
            例2 L2燈以1秒的時(shí)間時(shí)隔閃爍
            #include
            #define unsigned int;
            sbit D1=P1^0;
            uint i,j;
            void main()
            {
            while(1)
            {
            D1=0;
            for(i=1;i<=1000;i++)
            {
            j=1;j<=110;j++;
            }
            D1=1;
            for(i=1;i<=1000;i++)
            {
            j=1;j<=110;j++;
            }
            }
            }
            下載到實(shí)驗(yàn)板上現(xiàn)象如圖4所示:
            圖4 L1以1秒的間隔閃爍。
            例2程序中,在寫延時(shí)程序時(shí),分別用到了兩個(gè)延時(shí)程序,并且這兩個(gè)程序內(nèi)容格式完全相同,此時(shí)從簡化程序的角度出發(fā),我們可以采取另外一種寫法-子函數(shù)調(diào)用法.下面對(duì)其進(jìn)行介紹.
            3、不帶參數(shù)的子函數(shù)調(diào)用
            我們把上式中的延時(shí)函數(shù)單獨(dú)提取出來,然后寫成一個(gè)函數(shù)—此函數(shù)稱為一個(gè)程序中的子函數(shù),然后在主函數(shù)中直接調(diào)用即可。上式中延時(shí)函數(shù)的子函數(shù)寫法如下。
            void delay1s()
            { 
            for(i=1;i<=1000;i++)
            {
            j=1;j<=110;j++;
            }
             }
            上式中,void意為無返回值,也就是此函數(shù)執(zhí)行完畢后不返回任何值。delay1s表示函數(shù)名,這里用戶可以隨便取,只需要滿意C語言的命名規(guī)則即,因?yàn)檫@個(gè)子程序在上面已經(jīng)寫過,是延時(shí)1鈔的函數(shù),所以我們此時(shí)命名延時(shí)1秒(delay1ms)樣可以便于大家閱讀和記憶。函數(shù)名delay1s后面緊跟一小括號(hào),括號(hào)里面什么內(nèi)容也沒有,這表示此子函數(shù)不帶任何參數(shù)(后面會(huì)介紹到帶參數(shù)的子函數(shù))。
            需要注意的是,程序中中的子函數(shù),如果是寫在主函數(shù)之前,此不需要聲明,但如果是寫在主函數(shù)之后,則需要聲明,聲明的方法如下:將返回值特性、函數(shù)名及后面的小括號(hào)完全復(fù)制,若是無參函數(shù),則小括號(hào)內(nèi)為空,若是有參函數(shù),則需要在小括號(hào)內(nèi)依次寫上參數(shù)類型,參數(shù)類型之間用逗號(hào)隔開。最后在小括號(hào)后面加上分號(hào)即可。
            下面對(duì)例2的程序改為不帶參數(shù)子函數(shù)的寫法,程序如例3所示。
            例2 L2燈以1秒的時(shí)間時(shí)隔閃爍(不帶參數(shù)子函數(shù)的寫法)
            #include
            #define unsigned int;
            sbit D1=P1^0;
             
            void delay1s()
            void main()
            {
            while(1)
            {
            D1=0;
                  delay1s();   
            D1=1;
            delay1s();
            }
            }
            void delay1s()
            {
             uint i,j;
            for(i=1;i<=1000;i++)
            {
            j=1;j<=110;j++;
            }
             }
            在例3中,我們注意到“uint i,j”語句,i和j兩個(gè)變量的定義放到了子函數(shù)里,而沒有寫在主函數(shù)的最外面。在主函數(shù)外面定義的變量叫做全局變量,像這種定義在了函數(shù)內(nèi)部的稱為局部變量,這里i和j就是局部變量;局部變量只在當(dāng)前函數(shù)中起作用,程序一但執(zhí)行完當(dāng)前子函數(shù),它內(nèi)部的所有變量將自動(dòng)銷毀,當(dāng)下次再調(diào)用此子函數(shù)時(shí),編譯器重新為其分配內(nèi)存空間。我們要知道,在一個(gè)程序中,每個(gè)變量都占據(jù)著單片機(jī)的固定的RAM, 局部變量是用時(shí)隨時(shí)分配,不用時(shí)立即銷毀。一個(gè)單片機(jī)的RAM是很有限的,像STC89C52內(nèi)部有256字節(jié)的RAM,所以用時(shí)我們必須節(jié)約,顯然,放在子程序中更能節(jié)?。遥粒涂臻g。將來程序下載到實(shí)驗(yàn)板,我們此時(shí)依然可以看到如例2中的現(xiàn)象,L1燈以1秒的時(shí)間間隔閃爍。
            4、帶參數(shù)子函數(shù)的寫法
            上面我們講到過,C語言中子函數(shù)分為兩種,一種是不帶參數(shù)子函數(shù),另一種是帶參數(shù)的子函數(shù)。下面我們講一下帶參數(shù)子函數(shù)。在例3中,我們延時(shí) 1000ms,i=1000.如果我們要延時(shí)500ms,剛i=500.如果要延時(shí)300ms,i=300,這樣程序改起來就很麻煩,特別是在一些大型的程序中,這里我們?nèi)绻麑懗蓭?shù)的子函數(shù)就方便很多。程序?qū)懛ㄈ缦拢?div>void delayxms(unsigned int z)
            { 
            for(i=z;i>0;i--)
            {
            j=1;j<=110;j++;
            }
             }

            本文引用地址:http://www.biyoush.com/article/201612/324297.htm
            上面程序中小括號(hào)內(nèi)多了“unsigned int z”,其中“z”這個(gè)就是這個(gè)子函數(shù)帶的參數(shù),unsigned int 是定義參數(shù)z的類型為無符號(hào)整型。子函數(shù)中z這個(gè)參數(shù)我們稱為形參,在調(diào)用子函數(shù)時(shí)我們用一個(gè)真實(shí)的數(shù)據(jù)代替此形參,這個(gè)真實(shí)的數(shù)據(jù)我們稱為實(shí)參。在調(diào)用子函數(shù)時(shí),只需要的延時(shí)時(shí)間改變小括號(hào)內(nèi)的數(shù)據(jù)就可以了,如要延時(shí)1000s,則delayxms(1000),800ms時(shí),delayxms(800)。
            下面我們寫一個(gè)程序讓8個(gè)發(fā)光二極管以間隔800ms的時(shí)間閃爍。
            例5 8個(gè)發(fā)光二極管以間隔500ms的時(shí)間間隔閃爍。
            #include
            #define unsigned int;
            sbit D1=P1^0;
             
            void delayxms(unsigned int z)
            { 
            for(i=z;i>0;i--)
            {
            j=1;j<=110;j++;
            }
             }
            void main()
            {
            while(1)
            {
            D1=0;
                  delay1s();   
            D1=1;
            delay1s();
            }
            }
            上一頁 1 2 下一頁

            關(guān)鍵詞: 發(fā)光二極管單片

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉