|
|
驅(qū)動無源蜂鳴器用定時器中斷比較方便,給你一個示例參考。
無標(biāo)題.jpg (84.35 KB, 下載次數(shù): 76)
下載附件
2020-4-8 06:54 上傳
- #include <STC89C5xRC.H>
- sbit key=P3^2;
- sbit buzzer=P3^7;
- unsigned char count;
- unsigned int count1;
- bit flag=0;
- bit sign=0;
- void Timer0Init() //250微秒@12.000MHz
- {
- TMOD= 0x02; //設(shè)置8位自動重裝模式
- TL0 = 0x06; //設(shè)置定時初值
- TH0 = 0x06; //設(shè)置定時重載值
- TR0 = 1; //定時器0開始計時
- EA = 1; //開總中斷
- ET0 = 1; //開定時器0中斷
- }
- void main()
- {
- Timer0Init();//初始化定時器
- P2=0xfe;//初始化流水燈
- while(1)
- {
- if(!key)//鍵控流水燈
- {
- if(++count>=50&&sign==0)
- {
- sign=1;//按鍵自鎖
- flag=1;//啟動蜂鳴器
- P2=P2<<1|0x01;//流水燈
- if(P2==0xff)
- P2=0xfe;
- }
- }
- else //松手
- {
- sign=0;//按鍵自鎖清0
- count=0;//消抖計數(shù)清0
- }
- }
- }
- void timer0() interrupt 1
- {
- if(flag)
- {
- buzzer=~buzzer;//蜂鳴器取反
- if(++count1>=500)//0.125s
- {
- count1=0;//計數(shù)器清0
- buzzer=1;//蜂鳴器復(fù)位
- flag=0; //啟動標(biāo)志清0
- }
- }
- }
復(fù)制代碼
|
|