11_单片机_蜂鸣器

部分内容参考,详情请查阅 https://blog.csdn.net/qq_36347513/article/details/121474727

1. 声音是由物体振动产生的声波。是通过介质(空气或固定、液体)传播,并能被人或动物听觉器官所感知的波动现象。

 人耳识别声音的频率为 20Hz~20KHz

 频率:每秒钟周期性变化的次数(物体在1秒内振动的次数)

 周期:物体振动 一次所经历的时间,T=1/f

2. 蜂鸣器:是一种一体化结构的电子讯响器。

2.1. 根据驱动方式分类:有源蜂鸣器(也称自激式蜂鸣器)和 无源蜂鸣器(也成为他激式蜂鸣器)

  ”源“ 是指振动源。

  a. 有源蜂鸣器内部带振动源,只要一上电就会发声;工作原理如下:

  

  b. 无源蜂鸣器内部不带振动源,所以直接使用直流信号无法使其发声,必须使用PWM驱动

  

  有源蜂鸣器优点:程序控制简单;无源蜂鸣器优点:价格便宜;声音频率可控

2.2. 单片机的蜂鸣器电路

  


3. 定时器实现控制蜂鸣器发声(当前是无源蜂鸣器)

3.1. 延时函数 实现上述现象

 1 #include <REG51.H>
 2 
 3 /*********************************
 4  * 使用”延时函数“实现蜂鸣器发声
 5 *********************************/
 6 
 7 sbit buzzer = P0^0;
 8 
 9 /**********函数声明***************/
10 void delay50us(void);            // f = 1/50*2*(10^-6) = 10KHz
11 void delay500us(void);        // f = 1/500*2*(10^-6) = 1KHz
12 void delay1ms(void);            // f = 1/1*2*(10^-3) = 500Hz
13 void delay10ms(void);            // f = 1/10*2*(10^-3) = 50Hz
14 void delay100ms(void);        // f = 1/100*2*(10^-3) = 5Hz
15 
16 void main(void)
17 {
18     while(1)
19     {
20         buzzer = 0;
21         delay100ms();
22         buzzer = 1;
23         delay100ms();
24     }
25 }
26 
27 void delay50us(void)  
28 {
29     unsigned char a,b;
30     for(b=9;b>0;b--)
31         for(a=1;a>0;a--);
32 }
33 
34 void delay500us(void)   
35 {
36     unsigned char a,b;
37     for(b=99;b>0;b--)
38         for(a=1;a>0;a--);
39 }
40 
41 void delay1ms(void)  
42 {
43     unsigned char a,b;
44     for(b=199;b>0;b--)
45         for(a=1;a>0;a--);
46 }
47 
48 void delay10ms(void)   
49 {
50     unsigned char a,b,c;
51     for(c=5;c>0;c--)
52         for(b=4;b>0;b--)
53             for(a=248;a>0;a--);
54 }
55 
56 void delay100ms(void)  
57 {
58     unsigned char a,b,c;
59     for(c=7;c>0;c--)
60         for(b=74;b>0;b--)
61             for(a=95;a>0;a--);
62 }
View Code

3.2. 定时器0 实现上述现象

 1 #include <REG51.H>
 2 
 3 /*********************************************
 4  * 使用”定时器“实现蜂鸣器发声
 5  * 蜂鸣器频率是10KHz,则周期=1/1*10^4 =100us 
 6  * 1/2周期是50us
 7 **********************************************/
 8 
 9 sbit buzzer = P0^0;
10 
11 /********************函数声明*****************/
12 void Timer0Init(void);
13 
14 
15 void main(void)
16 {
17     Timer0Init();
18     while(1);
19 }
20 
21 void Timer0Init(void)
22 {
23     TMOD = 0x01;
24     TL0 = 0xCE;
25     TH0 = 0xFF;
26     TR0 = 1;
27     ET0 = 1;
28     EA = 1;
29 }
30 
31 void timer0_isr(void) interrupt 1 using 1
32 {
33     TL0 = 0xCE;
34     TH0 = 0xFF;
35     
36     buzzer = ~buzzer;
37 }
View Code

4. 实现蜂鸣器发出”滴-滴-滴“声音

 1 #include <REG51.H>
 2 
 3 /*********************************************
 4  * 使用”定时器“实现蜂鸣器发声
 5  * 蜂鸣器频率是10KHz,则周期=1/1*10^4 =100us 
 6  * 1/2周期是50us
 7 **********************************************/
 8 
 9 sbit buzzer = P0^0;
10 unsigned char N=200;
11 unsigned char flag = 0;
12 
13 /********************函数声明*****************/
14 void Timer0Init(void);
15 
16 
17 void main(void)
18 {
19     Timer0Init();
20     while(1);
21 }
22 
23 void Timer0Init(void)
24 {
25     TMOD = 0x01;
26     TL0 = 0x18;
27     TH0 = 0xfC;
28     TR0 = 1;
29     ET0 = 1;
30     EA = 1;
31 }
32 
33 void timer0_isr(void) interrupt 1 using 1
34 {
35     TL0 = 0x18;
36     TH0 = 0xfC;
37     
38     N--;
39     if(flag == 0)
40     {
41         if(N == 0)
42         {
43             flag = 1;
44             N = 200;
45         }
46         else
47         {
48             buzzer = ~buzzer;
49         }
50     }
51     else
52     {
53         buzzer = 1;
54         if(N == 0)
55         {
56             flag = 0;
57             N = 200;
58         }
59     }
60 }
View Code

 

posted on 2023-04-16 20:37  Ivan2023  阅读(39)  评论(0)    收藏  举报