51單片機(jī)復(fù)習(xí)程序例舉001
1、點(diǎn)亮閃爍的LED燈。
#include
sbitLED00=P0^0;//位定義,定義單片機(jī)引腳
voiddelay(intt)
{
inti,j;
for(i=0;i<100*t;i++)
{
for(j=0;j<125;j++)
{
;
}
}
}
voidmain(void)
{
while(1)
{
LED00=0;//此開(kāi)發(fā)板是低電平點(diǎn)亮
delay(5);
LED00=1;//此開(kāi)發(fā)板是高電平熄滅
delay(5);
}
}
/******************************************************************************
*說(shuō)明:AT89S52芯片,12M晶振
*P0、P1兩個(gè)8位端口分別連接8個(gè)LED燈
*低電平點(diǎn)亮,高電平熄滅。
******************************************************************************/
#include
#include
//http://baike.baidu.com/view/1745068.htm?fromTaglist
//http://wenku.baidu.com/view/06ba3d00b52acfc789ebc97b.html
//sbitLED00=P0^0;//位定義,定義單片機(jī)引腳
voiddelay(intt)
{
inti,j;
for(i=0;i<100*t;i++)
{
for(j=0;j<125;j++)
{
;
}
}
}
voidmain(void)
{
P0=0xfe;//0b11111110
P1=0x7f;//0b01111111
while(1)
{
P0=_crol_(P0,1);//循環(huán)左移,每次循環(huán)1位
P1=_cror_(P1,1);//循環(huán)右移,每次循環(huán)1位
delay(5);
}
}
/******************************************************************************
*說(shuō)明:AT89S52芯片,12M晶振
*此開(kāi)發(fā)板繼電器的控制端口和單片機(jī)的P3^7引腳相連接
*因?yàn)槔^電器的工作電流比較大,
*所以P3^7連接的是一個(gè)三極管,通過(guò)三極管驅(qū)動(dòng)繼電器
******************************************************************************/
#include
sbitJDQ=P3^7;//位定義,定義單片機(jī)引腳
voiddelay(intt)
{
inti,j;
for(i=0;i<100*t;i++)
{
for(j=0;j<125;j++)
{
;
}
}
}
voidmain(void)
{
while(1)
{
JDQ=0;
delay(5);//延時(shí)0.5s
JDQ=1;
delay(5);
}
}
4、控制無(wú)源蜂鳴器每隔1s響1s (有一個(gè)疑問(wèn))/******************************************************************************
*說(shuō)明:AT89S52芯片,12M晶振
*此開(kāi)發(fā)板蜂鳴器的控制端口和單片機(jī)的P3^6引腳相連接
*用三極管進(jìn)行驅(qū)動(dòng)
*無(wú)源蜂鳴器:需要寫函數(shù)產(chǎn)生1KHz左右的聲音頻率(方波)
******************************************************************************/
#include
sbitFMQ=P3^6;//位定義,定義單片機(jī)引腳
/******************************************************************************
*名稱:delay1ms()
*功能:延時(shí)1ms
*參數(shù):intt
*返回:無(wú)
******************************************************************************/
voiddelay1ms(intt)
{
unsignedchari;
while(t--)
{
for(i=0;i<125;i++)
{
;
}
}
}
/******************************************************************************
*名稱:delay500us()
*功能:延時(shí)500us
*參數(shù):無(wú)
*返回:無(wú)
******************************************************************************/
voiddelay500us(void)
{
inti;
for(i=0;i<63;i++)
{
;
}
}
/******************************************************************************
*名稱:beep_sound()
*功能:產(chǎn)生FMQ發(fā)聲需要的1KHz的聲音頻率
*參數(shù):無(wú)
*返回:無(wú)
******************************************************************************/
voidbeep_sound(void)
{
FMQ=0;
delay500us();
FMQ=1;
delay500us();
}
voidmain(void)
{
inti,t;
while(1)
{
t=1000;//蜂鳴器發(fā)聲1000*1ms1KHz頻率的方波,一個(gè)周期是1ms
for(i=0;i { beep_sound(); } FMQ=1;//關(guān)掉FMQ1s(延時(shí)) delay1ms(1000); } } 注意:盡量使用定時(shí)器產(chǎn)生標(biāo)準(zhǔn)頻率的方波,或用延時(shí)函數(shù)產(chǎn)生時(shí),函數(shù)最好不要通過(guò)參數(shù)來(lái)改變延時(shí)效果。 疑問(wèn):把500us延時(shí)函數(shù)改成可以傳參數(shù)t的形式,結(jié)果蜂鳴器發(fā)出的聲音頻率和發(fā)聲的時(shí)長(zhǎng)變得面目全非,很無(wú)解。有經(jīng)驗(yàn)的朋友歡迎通過(guò)評(píng)論的方式討論一下。 改過(guò)后的delay500ms()函數(shù) 和 beep_sound()函數(shù)內(nèi)容如下: /****************************************************************************** *名稱:delay500us() *功能:延時(shí)500us *參數(shù):intt *