1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
sbit BUZZ = P2^3; //蜂鸣器控制引脚
int i=0;
unsigned char T0RH = 0; //T0重载值高字节
unsigned char T0RL = 0; //T0重载值低字节
sbit k2=P2^7;
//延迟函数
void delay_ms(unsigned int m)
{
int a, b;
for(a=0;a<5000;a++)
for(b=0;b<m;b++);
}
/* 蜂鸣器启动函数,frequ-工作频率 */
void OpenBuzz(unsigned int frequ)
{
unsigned int reload; //计算所需的定时器重载值
reload = 65536 - (11059200/12)/(frequ*2); //由给定频率计算定时器重载值
T0RH = (unsigned char)(reload >> 8); //16 位重载值分解为高低两个字节
T0RL = (unsigned char)reload;
TH0 = 0xFF; //设定一个接近溢出的初值,以使定时器马上投入工作
TL0 = 0xFE;
ET0 = 1; //使能 T0 中断
TR0 = 1; //启动 T0
}
/* 蜂鸣器停止函数 */
void StopBuzz()
{
ET0 = 0; //禁用 T0 中断
TR0 = 0; //停止 T0
}
/* T0 中断服务函数,用于控制蜂鸣器发声 */
void InterruptTimer0() interrupt 1
{
TH0 = T0RH; //重新加载重载值
TL0 = T0RL;
BUZZ = ~BUZZ; //反转蜂鸣器控制电平
}
|