51單片機(jī)復(fù)習(xí)001
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1、更改keil uvision3的字體以及關(guān)鍵字顏色的設(shè)置:
修改順序入下1打開(kāi)edit2打開(kāi)edit最下方configuration3打開(kāi)colars4選擇8051editcfile可以修改C語(yǔ)言的大小和關(guān)鍵詞著色問(wèn)題。
源自http://zhidao.baidu.com/question/137561189.html
voiddelay1ms(unsignedinti)
{
unsignedcharj;
while(i--)
{
for(j=0;j<125;j++)//1ms基準(zhǔn)延時(shí)程序
{
;
}
}
//j<125是因?yàn)閒or(){;}循環(huán)每循環(huán)一次括號(hào)內(nèi)消耗3個(gè)指令周期,{;}內(nèi)執(zhí)行一個(gè)空語(yǔ)句消耗1個(gè)指令周期,即:每循環(huán)一次消耗4個(gè)指令周期(12M晶振:1us*4)
//注意在寫(xiě)延時(shí)函數(shù)時(shí)while(){}和for(;;){}的區(qū)別。
最好利用定時(shí)器實(shí)現(xiàn),這樣比較精確。通過(guò)延時(shí)函數(shù)實(shí)現(xiàn)也行,不過(guò)要確保延時(shí)的精確度,最好不要使用帶有參數(shù)的延時(shí)函數(shù)。
示例如下:
無(wú)源蜂鳴器要發(fā)聲音,必須給它提供一定頻率(1KHz左右)的方波。(聲音頻率)
實(shí)現(xiàn)方法:周期性的將打片機(jī)引腳“置位、延時(shí)、復(fù)位、延時(shí)”
示例中無(wú)源蜂鳴器接在AT89S52單片機(jī)的P3^6引腳:
/******************************************************************************
*說(shuō)明:AT89S52芯片,12M晶振
*此開(kāi)發(fā)板蜂鳴器的控制端口和單片機(jī)的P3^6引腳相連接
*用三極管進(jìn)行驅(qū)動(dòng)
*無(wú)源蜂鳴器:需要寫(xiě)函數(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); } } 將delay500ms()函數(shù) 和 beep_sound()函數(shù)改成如下形式,蜂鳴器的聲音頻率和發(fā)聲時(shí)長(zhǎng)完全面目全非了,很無(wú)解!歡迎有經(jīng)驗(yàn)的朋友通過(guò)評(píng)論的方式進(jìn)行交流。 /****************************************************************************** *名稱:delay500us() *功能:延時(shí)500us *參數(shù):intt *返回:無(wú) ******************************************************************************/ voiddelay500us(intt) { inti; for(i=0;i<63*t;i++) { ; } } /****************************************************************************** *名稱:beep_sound() *功能:產(chǎn)生FMQ發(fā)聲需要的1KHz的聲音頻率 *參數(shù):無(wú) *返回:無(wú) ***********