按鍵
驅(qū)動(dòng)實(shí)驗(yàn)與LED
以及Beep
在整體使用邏輯上一樣,只是按鍵
是輸入模式。
找到按鍵使用的引腳
查看底板原理圖可知,按鍵
是KEY0
,斷開(kāi)狀態(tài)時(shí)KEY0
是高電平,接通是低電平。
查看IO引用圖可知,KEY0
使用的是UART1 CTS
引用。
查看I.MX6ULL
參考手冊(cè),UART1 CTS
復(fù)用為GPIO
之后是GPIO01_IO18
:
初始化GPIO01_IO18,配置電氣屬性并設(shè)置為輸入
// 將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方向以及默認(rèn)值
GPIO_Init(GPIO1, 18, (GPIO_CONFIG){GPIO_DIRECTION_INPUT, 0});
讀取按鍵狀態(tài)
復(fù)用并初始化完GPIO1_IO18
后通過(guò)讀取GPIO1_IO18
的電平狀態(tài)就可以知道當(dāng)前按鍵狀態(tài)了。按鍵接下時(shí)為低電平,按鈕彈起時(shí)為高電平。
但是在讀取按鍵
狀態(tài)時(shí)有一個(gè)問(wèn)題,就是由于按鍵
在按下時(shí)短時(shí)間內(nèi)的電平狀態(tài)可能不穩(wěn)定,在讀取的時(shí)候需要做一個(gè)延時(shí)讀取操作,防止讀取的異常的電平狀態(tài),它的讀取代碼如下:
if (GPIO_RedValue(GPIO1, 18) == 0)
{
//此時(shí)的電平是低電平,表示按鈕是接下?tīng)顟B(tài)
//為了防止電平抖動(dòng),延遲10ms再讀取一下電平狀態(tài),如果還是按下表示按鈕按下并且穩(wěn)定
Delay(10);
if (GPIO_RedValue(GPIO1, 18))
{
return 1;
}
else
{
return 0;
}
}
else
{
// 按鈕松開(kāi)
return 0;
}
修改主程序邏輯
這里改成按鍵
按下則LED
亮同時(shí)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;
編譯,燒寫(xiě)驗(yàn)證
make install
-
led
+關(guān)注
關(guān)注
242文章
23307瀏覽量
661542 -
模式
+關(guān)注
關(guān)注
0文章
65瀏覽量
13404 -
按鍵驅(qū)動(dòng)
+關(guān)注
關(guān)注
0文章
11瀏覽量
7154
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論