外观
点亮LED灯
电路分析
简易万用表项目中总共有两个LED灯,一个用于电源指示灯,另外一个是状态灯,可以通过代码来控制亮灭。
LED灯本质上是发光二极管,当发光二极管两端有电势差导致电流流过时,发光二极管会发光,在LED指示灯电路中可以看到,一端接入3.3V,通过一个1K的限流电阻到达LED的阳极,阴极连接PB0引脚,若想点亮LED灯,需要将PB0输出低电平,形成电势差。
功能实现
创建工程
- 点击左上方文件、选择新建,选择新建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
- 在源文件中创建三个函数,用于实现控制LED点亮与熄灭功能;
- 包含对应的头文件,初始化LED引脚函数-使能对应的引脚;默认将PB0拉高,确保是熄灭状态;随后初始化引脚设置,推挽输出,50Mhz;
C
/*
* 函数内容:初始化LED引脚
* 函数参数:无
* 返回值:无
*/
void Init_LED_GPIO(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_WriteBit(GPIOB,GPIO_Pin_0,Bit_SET);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
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
- 打开LED函数--就是将引脚电平拉低;关闭LED函数,就是将引脚电平拉高。
C
/*
* 函数内容:打开LED
* 函数参数:无
* 返回值:无
*/
void Open_LED(void)
{
GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_RESET);
}
/*
* 函数内容:关闭LED
* 函数参数:无
* 返回值:无
*/
void Close_LED(void)
{
GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
}
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_LED_H_
#define MYLIB_INC_LED_H_
#include "ch32v20x.h"
#include "stdio.h"
void Init_LED_GPIO(void);
void Open_LED(void);
void Close_LED(void);
#endif /* MYLIB_INC_LED_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 "led.h"
#include "powerswitch.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_LED_GPIO();
while(1)
{
Scanf_Power_Key();
Open_LED();
Delay_Ms(500);
Close_LED();
Delay_Ms(500);
}
}
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
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
TIP
当长按开机时,led灯每隔1s进行闪烁;
源码&USB下载工具等软件,均在gitee资料中