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

    關于8051對LED控制的各種程序

    作者:西西   來源:本站原創   點擊數:  更新時間:2014年04月05日   【字體:

        本*也是前幾天開始接觸單片機,從最經典也是最實用的8051開始入手?戳藥滋鞎唾Y料,發現以前一直看的微機還有大一上時候在計算機學的一些東西還是挺有用的。大家都是看郭天祥的吧=。= 本*不是。我是在x寶上買的開發板講課都是x寶店家獨家鏡頭,可謂是高端大氣上檔次,低調奢華有內涵,簡約時尚國際范,低端粗俗甩節操,土憋矯情無下限,狂拽酷帥吊炸天,冷艷高貴接地氣,時尚動感小清新,可愛鄉村非主流。好吧,廢話不多,其實我也是看郭天祥的,哈工大畢竟不是蓋的。ps:x寶老板是南郵的高材生。
        本*老老實實地把PPT最后的課后練習都做了遍,完全沒有什么百度,那些弱爆了換句話說。       
        下面,本*就郭天祥課件里面課后練習的題目做出自己的獨家見解-。-  

        題一:第一個發光管以間隔200ms閃爍。
        臥槽-,- 這種題目小兒科。本*表示,寫這類程序有兩種方法,我還是喜歡直接對IO口總線定義。
        
    #include<reg52.h>

        #include <intrins.h> //就蜂鳴器接的IO口不同的開發板設計電路時候可能會有所不同,本*x寶買的這塊接的是P3.4.
        sbit buzz=P3^4; 
        void delay()
        {
    unsigned int t=30000;
    while (t--);
        }
        void main()
        {
    unsigned char temp;
    temp=0xfe;
    while(1)
    {
    P1=temp;
    temp=_crol_(temp,1);
    buzz=~buzz;
    delay();
    }
        }
        題三: 
    用8個發光管演示出8位二進制數累加過程。
        
    #include<reg52.h> //表示這樣題目還是比較有意思的 ps:要學單片機首先我覺得這些進制的問題要搞清楚,二進制 十六進制和我們用的十進制的轉換關系。
        #include<intrins.h>
        void delay()
        {
    unsigned int a=30000;
    while(a--);
        }
        void main() //燈亮為0,滅為1;
        {
    P1=0x00;
    for(;P1<=0xfe;P1++)
    delay();
        }
        題四:8個發光管間隔200ms由上至下,再由下至上,再重復一次,然后全部熄滅再以300ms間隔全部閃爍5次。重復此過程。
        #include<reg52.h>
        #include<intrins.h>
        unsigned int temp;
        void delay(unsigned int z)
        {
    unsigned int x;
    unsigned char y;
    for(x=z;x>0;x--)
    for(y=100;y>0;y--);
        }
        void main()
        {
    unsigned int a,b,c;
    while(1)
    {
    for(a=0;a<2;a++)
    {
    temp=0xfe;
    b=0;
    while(b<=6)
    {
    P1=temp;
    temp=_crol_(temp,1);
    b++;
    delay(500);
    }
    c=0;
    while(c<=6)
    {
    P1=temp;
    temp=_cror_(temp,1);
    c++;
    delay(500);
    }
    }
    P1=0xff;
    for(a=0;a<5;a++)
    {
    P1=~P1;
    delay(1000);
    }
        }
        }
        題五:間隔300ms第一次一個管亮流動一次,第二次兩個管亮流動,依次到8個管亮,然后重復整個過程。
        #include<reg52.h>
        #include<intrins.h>
        unsigned int temp;
        void delay(unsigned int z)
        {
    unsigned char x;
    unsigned char y;
    for(x=z;x>0;x++)
    for(y=100;y>0;y++);
        }        
        void main()
        {
    unsigned int a;
    while(1)
    {
    a=0;
    temp=0xfe;
    while(a<=6)
    {
    P1=temp;
    temp=_crol_(temp,1);
    delay(30000);
    a++;
    }
    a=0;
    temp=0xfc;
    while(a<=5)
    {
    P1=temp;
    temp=_crol_(temp,1);
    delay(30000);
    a++;
    }
    a=0;
    temp=0xf8;
    while(a<=4)
    {
    P1=temp;
    temp=_crol_(temp,1);
    delay(30000);
    a++;
    }
    a=0;
    temp=0xf0;
    while(a<=3)
    {
    P1=temp;
    temp=_crol_(temp,1);
    delay(30000);
    a++;
    }
    a=0;
    temp=0xe0;
    while(a<=2)
    {
    P1=temp;
    temp=_crol_(temp,1);
    delay(30000);
    a++;
    }
    a=0;
    temp=0xc0;
    while(a<=1)
    {
    P1=temp;
    temp=_crol_(temp,1);
    delay(30000);
    a++;
    }
    a=0;
    temp=0x80;
    while(a<=0)
    {
    P1=temp;
    temp=_crol_(temp,1);
    delay(30000);
    a++;
    }
    temp=0x00;
    P1=temp;
    delay(30000);
    }
        }
        題六:間隔300ms先奇數亮再偶數亮,循環三次;一個燈上下循環三次;兩個分別從兩邊往中間流動三次;再從中間往兩邊流動三次;8個全部閃爍3次;關閉發光管,程序停止。
       #include<reg52.h>
        void delay()
        {
    unsigned int a=30000;
    while(a--);
        }    
        void main()
        {
    unsigned char a;
    while(1)
    {
    for(a=0;a<3;a++)
    {
    P1=0x55;
    delay();
    P1=0xaa;
    delay();
    }
    for(a=0;a<3;a++)
    {
    P1=0x7e;
    delay();
    P1=0xbd;
    delay();
    P1=0xdb;
    delay();
    P1=0xe7;
    delay();
    }
    for(a=0;a<3;a++)
    {
    P1=0xe7;
    delay();
    P1=0xdb;
    delay();
    P1=0xbd;
    delay();
    P1=0x7e;
    delay();
    }
    for(a=0;a<3;a++)
    {
    P1=0x00;
    delay();
    P1=~P1;
    delay();
    }
       }
        }
        學習是一個不斷積累的過程,郭天祥說十天可以學完,表示我做不到,不僅僅是學完8051,其實別的芯片程序大體還是通用的,我誒想想是這樣的=。= 不管怎么說,c語言是基礎,當然也有用匯編的,本*表示匯編看不懂。。。。 
        明天寫關于獨立按鍵和LED之間關系的各種程序。
        To be continue....  
     

        void delay() //關于這個延遲函數,本*學術有限,只會有這種估計的方法,關于晶振來計算然后寫的之后補強
        {
    unsigned int a =30000;
    while(a--);
        }
        void main()
        {
    while(1)
    {
    P1=0xfe;
    delay();
    P1=0xff;
    delay();
    }
        }
         
    題二:8個發光管由上至下間隔1s流動,其中每個管亮500ms,滅500ms,亮時蜂鳴器響,滅時關閉蜂鳴器,一直重復下去。
        
    #include <reg52.h> //表示蜂鳴器和led這些鏈接方式比較相同,同樣的還有繼電器,所以程序也都一樣,變下IO口而已。
    關閉窗口

    相關文章

    亚洲一区二区制服在线|在绩专区欧美自拍日韩|青春娱乐网97超碰人人射|在线观看国产网址你懂的