新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 玩轉(zhuǎn)單片機(jī),你我都是菜鳥(續(xù)3)

玩轉(zhuǎn)單片機(jī),你我都是菜鳥(續(xù)3)

作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
好久沒有更新博文了,由于晚上回家沒有網(wǎng)所以很久沒更新了,好不容易寫的一篇突然斷電沒有保存,真夠杯具的。電來了又重新寫了。不知道最近還有沒有人關(guān)注我。其實這我都不惦記了,希望群里的朋友迷茫的盡快找到方向,盡快都成為高手。如果你還關(guān)注我不知道是因為我的經(jīng)歷還是因為我前一篇的那些題目?前幾篇寫的一些我的經(jīng)歷可能有些人看了,可能還會有同感,如果愿意可以跟著我的思路走,先完成我上篇博文提到的幾個題目。至于我的經(jīng)歷,如果你還感興趣可以留言,我在后邊再說說。。。。。。
下面開始第一個題目:流水燈
硬件前提:用51的P1口控制8個LED,1點亮,0熄滅。
(1)第1,3,5,7個燈半亮,其余的全亮。
(2)第1個亮1/8,第2個亮2/8,第3個亮3/8,第4個亮4/8,第5個亮5/8,第6個亮6/8, 第7個亮7/8,第8個全亮。
(3)所有的燈逐漸從暗到全亮,再由全亮到暗。
(4)8個燈從第一個開始依次漸亮,直到最后一個。再從最后一個起漸暗,直 到 第一個。如此循環(huán)往復(fù)。這才是真正的流水燈。


單片機(jī)初學(xué)者幾乎都做的一個實驗就是流水燈實驗,因為大家都做,所以就覺得很簡單,很多人對這個實驗幾乎不屑。其實要徹底的玩轉(zhuǎn)這個實驗也是很不簡單的事情,不信看看你能不能完成下面的實驗題,如果你能拿下它,那么你已經(jīng)一只腳穩(wěn)穩(wěn)地踏入了單片機(jī)門檻,并且你一定不想再回頭了,此時已經(jīng)有一部分人對你刮目相看了(包括我),因為就這幾個題目算起來我想了有整整一天了,總算有個結(jié)果,而且還有一些問題,尤其是第(2)個題目效果很不明顯。我把這幾個題目的程序貼出來,希望大家給點意見,我們互相交流,互相學(xué)習(xí),互相指導(dǎo)。
題目要求:第1,3,5,7個燈半亮,其余的全亮。
(1)程序:
#include
#defineucharunsignedchar
#defineledP1//led接在P1口
#defineTon40//基準(zhǔn)脈寬0.04ms
ucharLEDflag=0;//全局變量,最大255,保存T0中斷次數(shù)

voidinit();
voidled_on();
voidmain()
{
init();
while(1)
{

led_on();

}
}
voidinit()//定時器初始化
{
TMOD=0x02;//T0方式2,8位自動載入
TH0=256-Ton;//T0初始值
TL0=256-Ton;//重載值
TR0=1;//啟動T0
ET0=1;//開T0,T1中斷
EA=1;//全局中斷允許
}

voidtime0_int()interrupt1using3//T0中斷函數(shù),中斷1,使用工作組3
{
LEDflag++;//修改LEDflag
}

voidled_on()
{

if(LEDflag==0)//點亮8個燈
{
led=0x00;
}
if(LEDflag==12)//熄滅1,3,5,7燈
{
led=0x55;
}
}
題目要求:第1個亮1/8,第2個亮2/8,第3個亮3/8,第4個亮4/8,第5個亮5/8,第6個亮 6/8, 第7個亮7/8,第8個全亮。
(2)程序:
#include
#defineucharunsignedchar
#defineledP1//led接在P1口
#defineTon40//基準(zhǔn)脈寬0.04ms
uchari,LEDflag=0;//全局變量,最大255,保存T0中斷次數(shù)
//ucharcodeled_off[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
voidinit();
voidled_on();
voidmain()
{
init();
while(1)
{

led_on();

}
}
voidinit()//定時器初始化
{
TMOD=0x02;//T0方式2,8位自動載入
TH0=256-Ton;//T0初始值
TL0=256-Ton;//重載值
TR0=1;//啟動T0
ET0=1;//開T0,T1中斷
EA=1;//全局中斷允許
}

voidtime0_int()interrupt1using3//T0中斷函數(shù),中斷1,使用工作組3
{
LEDflag++;//修改LEDflag
}

voidled_on()
{
switch(LEDflag)
{
case32:led=0x00;
//為真時語句
break;
case64:led=0x01;
//為真時語句
break;
case96:led=0x03;
//為真時語句
break;
case128:led=0x07;
//為真時語句
break;
case160:led=0x0f;
//為真時語句
break;
case192:led=0x1f;
//為真時語句
break;
case224:led=0x3f;
//為真時語句
break;
case255:led=0x7f;
//為真時語句
break;
default:
//冗余語句
break;
}

}
題目要求:所有的燈逐漸從暗到全亮,再由全亮到暗。
(3)程序:
#include
#defineucharunsignedchar
#defineledP1//led接在P1口
#defineTon40//基準(zhǔn)脈寬0.04ms
ucharLEDflag=0;//全局變量,最大255,保存T0中斷次數(shù)
voidinit();
voidled_on_off();
voidmain()
{
init();
while(1)
{

led_on_off();

}
}

上一頁 1 2 下一頁

關(guān)鍵詞: 單片機(jī)流水

評論


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

關(guān)閉