入门第二步——HC32L196点灯
LED又叫做发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。注意LED具备单向导电性,所以注意正负极别接反了。引脚较长的就是正极,而引脚较短的就是负极。贴片式二极管在底部会有倒三角符号,一横的一边是正极,另一边是负极,三角形符号的边靠近的是正极,角靠近的是负极。
点亮LED灯的原理就是正极接高电平,负极接低电平。这里就要说到单片机驱动能力了。由于单片机的I/O口的结构决定了它灌电流能力较强,所以基本都采用低电平点亮led的方式。即单片机IO口接led负极,LED正极接高电平,考虑到安全性,再串联一个电阻。如果不加电阻限流,单片机引脚的输出电压将直接施加在LED发光管上,而发光管的导通电压都在2V以下,这会导致流过发光管的电流远远超过极限,要么烧坏单片机,要么烧坏发光管。
言归正传,本次项目的原理图如下:
根据原理图可看出,LED的正极接在VCC上,负极接在单片机上,单片机在初始化的时候如果不对引脚设计的时候,这个LED就被点亮了,因为引脚默认为低电平,在这里就处于导通状态。
下面看程序:
首先新建一个App_Gpio_Init.c和App_Gpio_Init.h文件,写程序得建立一个良好的习惯。
main.c
#include "main.h"
int main()
{
App_LedInit();
Gpio_WriteOutputIO(GpioPortA, GpioPin0, FALSE); //点亮LED
while(1);
}
App_Gpio_Init.c
#include "App_Gpio_Init.h"
void App_LedInit(void)
{
stc_gpio_cfg_t stcGpioCfg; ///定义结构体变量
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); ///< 打开GPIO外设时钟门控
stcGpioCfg.enDir = GpioDirOut; ///< 端口方向配置->输出(其它参数与以上(输入)配置参数一致)
stcGpioCfg.enPu = GpioPuDisable; ///< 端口上拉配置->不使能
stcGpioCfg.enPd = GpioPdDisable; ///< 端口下拉配置->不使能
stcGpioCfg.bOutputVal=TRUE; ///< 端口低电平驱动,初始化为高电平,使LED处于熄灭状态
Gpio_Init(GpioPortA, GpioPin0, &stcGpioCfg); ///< GPIO IO LED端口初始化
}
循环点亮LED
#include "main.h"
int main()
{
App_LedInit();
while(1)
{
delay1ms(500); //进来先延时500ms
Gpio_WriteOutputIO(GpioPortA, GpioPin0, FALSE); //点亮LED
delay1ms(500); //再延时500ms
}
}
本章完