新聞中心

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

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

作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏

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_off()
{
uchari;//i初始化
i=0;//i初始化
while(i!=255)//由暗變亮
{
if(LEDflag==0)//點亮
{
led=0x00;
}
if(LEDflag==i)//熄滅
{
led=0xff;
}
if(LEDflag==255)//修改變量
{
i++;
}


}
i=0;//i初始化
while(i!=255)//由暗變亮
{
if(LEDflag==0)//點亮
{
led=0xff;
}
if(LEDflag==i)//熄滅
{
led=0x00;
}
if(LEDflag==255)//修改變量
{
i++;
}


}
}
題目要求:8個燈從第一個開始依次漸亮,直到最后一個。再從最后一個起漸暗,直到第一個。如此循環(huán)往復(fù)。這才是真正的流水燈。
(4)程序:
#include
#defineucharunsignedchar
#defineledP1//led接在P1口
#defineTon40//基準(zhǔn)脈寬0.04ms
ucharLEDflag=0;//全局變量,最大255,保存T0中斷次數(shù)
ucharcodeled_off[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
voidinit();
voidled_on_off();
voidmain()
{
init();
while(1)
{

led_on_off();

}
}
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_off()
{
uchari=0,j=0;//i初始化
for(j=0;j<8;j++)
{
i=0;//i初始化
while(i!=255)//由暗變亮
{
if(LEDflag==0)//點亮
{
led=led_off[j];
}
if(LEDflag==i)//熄滅
{
led=0xff;
}
if(LEDflag==255)//修改變量
{
i++;
}


}
}
for(j=8;j>0;j--)
{
i=0;//i初始化
while(i!=255)//由暗變亮
{
if(LEDflag==0)//點亮
{
led=0xff;
}
if(LEDflag==i)//熄滅
{
led=led_off[j-1];
}
if(LEDflag==255)//修改變量
{
i++;
}


}
}


}

上面是這幾個題目的程序,全部是我自己寫的或是參考別人程序?qū)懙?,全部通過調(diào)試都能完成題目要求,只是第二個題目不是很完美,效果不是很明顯。我這個人很追求完美,但是第二個題目想了很久也沒想到更好的思路,也許是思維受到別人程序的限制了,希望能得到你們的指導(dǎo),也許你會有不一樣的思路。其實流水燈的控制很多,但是只要能掌握其原理,變來變?nèi)ヒ簿湍敲磶追N,控制總在你的掌握之中。無論控制什么,個人看法還是掌握原理,只要原理明白,就完全在你的控制之中,俗話說“萬變不離其中”嗎!就是這個道理。

上一頁 1 2 下一頁

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

評論


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

關(guān)閉