新聞中心

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

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

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


單片機(jī)初學(xué)者幾乎都做的一個(gè)實(shí)驗(yàn)就是流水燈實(shí)驗(yàn),因?yàn)榇蠹叶甲?,所以就覺得很簡(jiǎn)單,很多人對(duì)這個(gè)實(shí)驗(yàn)幾乎不屑。其實(shí)要徹底的玩轉(zhuǎn)這個(gè)實(shí)驗(yàn)也是很不簡(jiǎn)單的事情,不信看看你能不能完成下面的實(shí)驗(yàn)題,如果你能拿下它,那么你已經(jīng)一只腳穩(wěn)穩(wěn)地踏入了單片機(jī)門檻,并且你一定不想再回頭了,此時(shí)已經(jīng)有一部分人對(duì)你刮目相看了(包括我),因?yàn)榫瓦@幾個(gè)題目算起來(lái)我想了有整整一天了,總算有個(gè)結(jié)果,而且還有一些問(wèn)題,尤其是第(2)個(gè)題目效果很不明顯。我把這幾個(gè)題目的程序貼出來(lái),希望大家給點(diǎn)意見,我們互相交流,互相學(xué)習(xí),互相指導(dǎo)。
題目要求:第1,3,5,7個(gè)燈半亮,其余的全亮。
(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()//定時(shí)器初始化
{
TMOD=0x02;//T0方式2,8位自動(dòng)載入
TH0=256-Ton;//T0初始值
TL0=256-Ton;//重載值
TR0=1;//啟動(dòng)T0
ET0=1;//開T0,T1中斷
EA=1;//全局中斷允許
}

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

voidled_on()
{

if(LEDflag==0)//點(diǎn)亮8個(gè)燈
{
led=0x00;
}
if(LEDflag==12)//熄滅1,3,5,7燈
{
led=0x55;
}
}
題目要求:第1個(gè)亮1/8,第2個(gè)亮2/8,第3個(gè)亮3/8,第4個(gè)亮4/8,第5個(gè)亮5/8,第6個(gè)亮 6/8, 第7個(gè)亮7/8,第8個(gè)全亮。
(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()//定時(shí)器初始化
{
TMOD=0x02;//T0方式2,8位自動(dòng)載入
TH0=256-Ton;//T0初始值
TL0=256-Ton;//重載值
TR0=1;//啟動(dòng)T0
ET0=1;//開T0,T1中斷
EA=1;//全局中斷允許
}

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

voidled_on()
{
switch(LEDflag)
{
case32:led=0x00;
//為真時(shí)語(yǔ)句
break;
case64:led=0x01;
//為真時(shí)語(yǔ)句
break;
case96:led=0x03;
//為真時(shí)語(yǔ)句
break;
case128:led=0x07;
//為真時(shí)語(yǔ)句
break;
case160:led=0x0f;
//為真時(shí)語(yǔ)句
break;
case192:led=0x1f;
//為真時(shí)語(yǔ)句
break;
case224:led=0x3f;
//為真時(shí)語(yǔ)句
break;
case255:led=0x7f;
//為真時(shí)語(yǔ)句
break;
default:
//冗余語(yǔ)句
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();

}
}

上一頁(yè) 1 2 下一頁(yè)

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

評(píng)論


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

關(guān)閉