專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計實(shí)例 >> 瀏覽文章

關(guān)于8051對LED控制的各種程序

作者:西西   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時間:2014年04月05日   【字體:

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

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

    #include <intrins.h> //就蜂鳴器接的IO口不同的開發(fā)板設(shè)計電路時候可能會有所不同,本*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個發(fā)光管演示出8位二進(jìn)制數(shù)累加過程。
    
#include<reg52.h> //表示這樣題目還是比較有意思的 ps:要學(xué)單片機(jī)首先我覺得這些進(jìn)制的問題要搞清楚,二進(jìn)制 十六進(jìn)制和我們用的十進(jìn)制的轉(zhuǎn)換關(guān)系。
    #include<intrins.h>
    void delay()
    {
unsigned int a=30000;
while(a--);
    }
    void main() //燈亮為0,滅為1;
    {
P1=0x00;
for(;P1<=0xfe;P1++)
delay();
    }
    題四:8個發(fā)光管間隔200ms由上至下,再由下至上,再重復(fù)一次,然后全部熄滅再以300ms間隔全部閃爍5次。重復(fù)此過程。
    #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個管亮,然后重復(fù)整個過程。
    #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先奇數(shù)亮再偶數(shù)亮,循環(huán)三次;一個燈上下循環(huán)三次;兩個分別從兩邊往中間流動三次;再從中間往兩邊流動三次;8個全部閃爍3次;關(guān)閉發(fā)光管,程序停止。
   #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();
}
   }
    }
    學(xué)習(xí)是一個不斷積累的過程,郭天祥說十天可以學(xué)完,表示我做不到,不僅僅是學(xué)完8051,其實(shí)別的芯片程序大體還是通用的,我誒想想是這樣的=。= 不管怎么說,c語言是基礎(chǔ),當(dāng)然也有用匯編的,本*表示匯編看不懂。。。。 
    明天寫關(guān)于獨(dú)立按鍵和LED之間關(guān)系的各種程序。
    To be continue....  
 

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

相關(guān)文章