熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
連衡_ 發(fā)表于 2018-12-2 10:52 思路參考我在14樓說的就可以了 |
zzzy 發(fā)表于 2018-12-1 21:34 改變里面的延時(shí)長度只是改變蜂鳴的聲音,還是一直響,不斷的那種 ![]() |
|
本帖最后由 wulin 于 2018-12-2 10:47 編輯 給你一個(gè)利用定時(shí)器作驅(qū)動(dòng)信號(hào)的無源蜂鳴器示例,詳細(xì)注釋。按一次鍵,響3下。 #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit key1 = P1^4; sbit beep = P1^5; uchar num=0; //響鈴計(jì)數(shù)變量 uint count=0; //中斷計(jì)數(shù)變量 void Timer0Init() //250微秒@12.000MHz { TMOD |= 0x02; //自動(dòng)重載模式 TL0 = 0x06; //設(shè)置定時(shí)初值 TH0 = 0x06; //設(shè)置定時(shí)重載值 TR0 = 1; //定時(shí)器0開始計(jì)時(shí) EA=1; //開總中斷 ET0=1; //開T0中斷 } void delay(uint z)//延時(shí)ms { uint x,y; for(x=z;x>0;x--) for(y=114;y>0;y--); } void keyscan()//按鍵掃描 { if(!key1) { delay(10); if(!key1) num=3;//響鈴3次 while(!key1); } } void main() { Timer0Init();//初始化定時(shí)器 while(1) { keyscan();//按鍵掃描 } } void timer0() interrupt 1 //T0中斷 { if(num>0) { count++; if(count<=1000) beep=~beep; //蜂鳴器端口取反 if(count>1000) //0.25秒時(shí)間到 beep=1; if(count>=2000)//0.5秒時(shí)間到 { count=0; //計(jì)數(shù)清0 num--; } } } |
| 循環(huán)結(jié)構(gòu)就行 |
|
無源的 做個(gè)符合頻率的定時(shí)器,在中斷處理中 if(stop==0) beep =!beep; main函數(shù)中 stop =1; for(i=0;i<3;i++) { stop = 0; delay(500); stop = 1; delay(500); } |
|
while(1)死循環(huán)不要了 delay(5)太短了,500試試不明顯再加倍 |
| 用for循環(huán)加個(gè)變量來計(jì)數(shù) |
| 這個(gè)方法很多,給一個(gè)脈沖響一次,時(shí)間長度看脈沖長度,給三次就是響三下 |
| 將a定義為全程變量 |
|
用這個(gè)程序就可以,雖然程序很幼稚,但你要求的功能達(dá)到了,嘿嘿嘿。 #include <reg51.h> sbit FMQ=P1^5; void Delay25us() //@12.000MHz { unsigned char i; i = 10; while (--i); } void main (void) { unsigned char i; unsigned int j; for (j=0;j<5000;j++) { FMQ=1; for (i=0;i<5;i++) { Delay25us(); } FMQ=0; for (i=0;i<5;i++) { Delay25us(); } } for (j=0;j<5000;j++) { FMQ=0; for (i=0;i<5;i++) { Delay25us(); } FMQ=0; for (i=0;i<5;i++) { Delay25us(); } } for (j=0;j<5000;j++) { FMQ=1; for (i=0;i<5;i++) { Delay25us(); } FMQ=0; for (i=0;i<5;i++) { Delay25us(); } } for (j=0;j<5000;j++) { FMQ=0; for (i=0;i<5;i++) { Delay25us(); } FMQ=0; for (i=0;i<5;i++) { Delay25us(); } } for (j=0;j<5000;j++) { FMQ=1; for (i=0;i<5;i++) { Delay25us(); } FMQ=0; for (i=0;i<5;i++) { Delay25us(); } } for (j=0;j<5000;j++) { FMQ=0; for (i=0;i<5;i++) { Delay25us(); } FMQ=0; for (i=0;i<5;i++) { Delay25us(); } } while (1); } |
| 將a定義為全程變量 |
|
在for循環(huán)里面加個(gè)while(1) while(1) { for(a=0;a<3;a++) { } while(1) } |
永遠(yuǎn)的檉柳 發(fā)表于 2018-12-1 19:29 圖片的就是for循環(huán)呀,沒用,請(qǐng)問還有其他方法嗎 |
| for循環(huán)3次跳出 |
| 用for循環(huán) |
| 無源的 |
|
是無源的 |
Powered by 單片機(jī)教程網(wǎng)