本帖最后由 wulin 于 2018-12-2 10:47 編輯
給你一個利用定時器作驅(qū)動信號的無源蜂鳴器示例,詳細注釋。按一次鍵,響3下。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1 = P1^4;
sbit beep = P1^5;
uchar num=0; //響鈴計數(shù)變量
uint count=0; //中斷計數(shù)變量
void Timer0Init() //250微秒@12.000MHz
{
TMOD |= 0x02; //自動重載模式
TL0 = 0x06; //設置定時初值
TH0 = 0x06; //設置定時重載值
TR0 = 1; //定時器0開始計時
EA=1; //開總中斷
ET0=1; //開T0中斷
}
void delay(uint z)//延時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();//初始化定時器
while(1)
{
keyscan();//按鍵掃描
}
}
void timer0() interrupt 1 //T0中斷
{
if(num>0)
{
count++;
if(count<=1000)
beep=~beep; //蜂鳴器端口取反
if(count>1000) //0.25秒時間到
beep=1;
if(count>=2000)//0.5秒時間到
{
count=0; //計數(shù)清0
num--;
}
}
} |