外观
蜂鸣器实验
电路分析
简易万用表项目中使用一个有源蜂鸣器进行鸣叫提示,单片机引脚通过控制S8050三极管从而控制有源蜂鸣器与导通;此处R3为三极管基极限流电阻,具体大小根据实际使用情况进行更改;R4作为下拉电阻,当PC12引脚悬空时,R4能够给予一个确定的低电平来防止蜂鸣器无故鸣叫。
功能实现
创建工程
- 点击左上方文件、选择新建,选择新建MounRiver工程;
- 对工程进行修改,修改完成后点击“完成”按键,系统会自动生成好工程;
- 创建直接的工程库文件夹,分别创建头文件与源文件;
- 对工程库路径进行包含;
代码实现
- 包含头文件,在头文件中包含ch32相关的头文件,方便对相关库函数进行调用;
C
#ifndef MYLIB_INC_POWERSWITCH_H_
#define MYLIB_INC_POWERSWITCH_H_
#include "ch32v20x.h"
#include "debug.h"
#endif /* MYLIB_INC_POWERSWITCH_H_ */
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 在源文件中创建三个函数,用于实现控制蜂鸣器鸣叫与停止功能;
- 包含对应的头文件,初始化蜂鸣器引脚函数--使能对应的引脚;默认将PC12拉低,确保是关闭状态;随后初始化引脚设置,推挽输出,50Mhz。
C
/*
* 函数内容:初始化蜂鸣器引脚
* 函数参数:无
* 返回值:无
*/
void Init_BEEP_GPIO(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_WriteBit(GPIOC,GPIO_Pin_12,Bit_RESET);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- 打开蜂鸣器函数--就是将引脚电平拉高;关闭蜂鸣器函数--就是将引脚电平拉低。
C
/*
* 函数内容:打开蜂鸣器
* 函数参数:无
* 返回值:无
*/
void Open_BEEP(void)
{
GPIO_WriteBit(GPIOC, GPIO_Pin_12, Bit_SET);
}
/*
* 函数内容:关闭蜂鸣器
* 函数参数:无
* 返回值:无
*/
void Close_BEEP(void)
{
GPIO_WriteBit(GPIOC, GPIO_Pin_12, Bit_RESET);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- 在头文件中进行声明;
C
#ifndef MYLIB_INC_BEEP_H_
#define MYLIB_INC_BEEP_H_
#include "ch32v20x.h"
#include "stdio.h"
void Init_BEEP_GPIO(void);
void Open_BEEP(void);
void Close_BEEP(void);
#endif /* MYLIB_INC_BEEP_H_ */
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
- 在main.c中包含对应的头文件进行调用;注意要把上节课的长按开关机代码也包含进来,否则无法开机,松手断电就没了。
C
#include "debug.h"
#include "powerswitch.h"
#include "beep.h"
/* Global typedef */
/* Global define */
/* Global Variable */
/*********************************************************************
* @fn main
*
* @brief Main program.
*
* @return none
*/
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
SystemCoreClockUpdate();
Delay_Init();
Init_Power_Con_GPIO();
Init_BEEP_GPIO();
while(1)
{
Scanf_Power_Key();
Open_BEEP();
}
}
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
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
TIP
当长按开机时,蜂鸣器开始鸣叫。
源码&USB下载工具等软件,均在gitee资料中