按键
驱动实验与LED
以及Beep
在整体使用逻辑上一样,只是按键
是输入模式。
查看底板原理图可知,按键
是KEY0
,断开状态时KEY0
是高电平,接通是低电平。
查看IO引用图可知,KEY0
使用的是UART1 CTS
引用。
查看I.MX6ULL
参考手册,UART1 CTS
复用为GPIO
之后是GPIO01_IO18
:
// 将UART1_CTS_B利用为GPIO01_IO18
IOMUXC_SetPinMux(IOMUXC_UART1_CTS_B_GPIO1_IO18, 0);
// 配置电气属性
IOMUXC_SetPinConfig(IOMUXC_UART1_CTS_B_GPIO1_IO18, CONST_GPIO_INPUT_PAD_VALUE);
// 配置GPIO方向以及默认值
GPIO_Init(GPIO1, 18, (GPIO_CONFIG){GPIO_DIRECTION_INPUT, 0});
复用并初始化完GPIO1_IO18
后通过读取GPIO1_IO18
的电平状态就可以知道当前按键状态了。按键接下时为低电平,按钮弹起时为高电平。
但是在读取按键
状态时有一个问题,就是由于按键
在按下时短时间内的电平状态可能不稳定,在读取的时候需要做一个延时读取操作,防止读取的异常的电平状态,它的读取代码如下:
if (GPIO_RedValue(GPIO1, 18) == 0)
{
//此时的电平是低电平,表示按钮是接下状态
//为了防止电平抖动,延迟10ms再读取一下电平状态,如果还是按下表示按钮按下并且稳定
Delay(10);
if (GPIO_RedValue(GPIO1, 18))
{
return 1;
}
else
{
return 0;
}
}
else
{
// 按钮松开
return 0;
}
这里改成按键
按下则LED
亮同时BEEP
响
Clk_Init();
Led_Init();
Beep_Init();
Key0_Init();
while (1)
{
Delay(10);
if (Key0_GetValue())
{
Led_On();
Beep_On();
}
else
{
Led_Off();
Beep_Off();
}
}
return 0;
make install
全部0条评论
快来发表一下你的评论吧 !