第十四章 按鍵輸入實驗
1)實驗平臺:正點原子DNK210開發板
2)章節摘自【正點原子】DNK210使用指南 - CanMV版 V1.0
3)購買連結:https://detail.tmall.com/item.htm?&id=782801398750
4)全套實驗原始碼+手冊+影片下載地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html
5)正點原子官方B站:https://space.bilibili.com/394620890
6)正點原子K210技術交流企鵝群:605557868
本章實驗將介紹如何使用CanMV讓Kendryte K210獲取板載按鍵的狀態。透過本章的學習,讀者將學習到在CanMV下讀取Kendryte K210的GPIO上的高低電平狀態。
本章分為如下幾個小節:
14.1 maix.GPIO模組介紹
14.2 硬體設計
14.3 程式設計
14.4 執行驗證
14.1 maix.GPIO模組介紹
有關maix.GPIO模組的介紹,請見第12.1小節《maix.GPIO模組介紹》。
14.2 硬體設計
14.2.1 例程功能
- 當KEY0按鍵被按下後,雙色LED的紅燈亮起,反之熄滅
- 當KEY1按鍵被按下後,雙色LED的藍色亮起,反之熄滅
- 當KEY2按鍵被按下後,蜂鳴器發聲,反之不發聲
14.2.2 硬體資源
- 雙色LED
LEDR -IO24
LEDB -IO25
- 蜂鳴器 - IO17
- 獨立按鍵
KEY0按鍵 - IO18
KEY1按鍵 - IO19
KEY2按鍵 - IO16
14.2.3 原理圖
本章實驗內容,需要讀取獨立按鍵連線IO上的電平狀態,正點原子DNK210開發板上獨立按鍵的連線原理圖,如下圖所示:
圖14.2.3.1 獨立按鍵連線原理圖
透過以上原理圖可以看出,KEY0按鍵、KEY1按鍵和KEY2按鍵對應的IO編號分別為IO18、IO19和IO16,當獨立按鍵沒有被按下時,其對應的IO將處於懸空狀態,此時讀取到的電平將由IO的上下拉決定,當獨立按鍵被按下後,其對應IO的電平將被拉低。
14.3 程式設計
14.3.1 maix.GPIO模組
有關maix.GPIO模組的介紹,請見第14.1小節《maix.GPIO模組介紹》。
14.3.2 程式流程圖
圖14.3.2.1 按鍵輸入實驗流程圖
14.3.3 main.py程式碼
main.py中的指令碼程式碼如下所示:
from board import board_info
from fpioa_manager import fm
from maix import GPIO
# 為IO分配相應的硬體功能
fm.register(board_info.LEDR, fm.fpioa.GPIO0)
fm.register(board_info.LEDB, fm.fpioa.GPIO1)
fm.register(board_info.BEEP, fm.fpioa.GPIO2)
fm.register(board_info.KEY0, fm.fpioa.GPIOHS0)
fm.register(board_info.KEY1, fm.fpioa.GPIOHS1)
fm.register(board_info.KEY2, fm.fpioa.GPIOHS2)
# 構造GPIO物件
ledr = GPIO(GPIO.GPIO0, GPIO.OUT)
ledb = GPIO(GPIO.GPIO1, GPIO.OUT)
beep = GPIO(GPIO.GPIO2, GPIO.OUT)
key0 = GPIO(GPIO.GPIOHS0, GPIO.IN, GPIO.PULL_UP)
key1 = GPIO(GPIO.GPIOHS1, GPIO.IN, GPIO.PULL_UP)
key2 = GPIO(GPIO.GPIOHS2, GPIO.IN, GPIO.PULL_UP)
while True:
# 讀取按鍵狀態,並做相應的按鍵解釋
if key0.value() == 0:
ledr.value(0)
else:
ledr.value(1)
if key1.value() == 0:
ledb.value(0)
else:
ledb.value(1)
if key2.value() == 0:
beep.value(1)
else:
beep.value(0)
可以看到,首先為使用到的IO分配相應的硬體功能,接著是構造GPIO物件,特別的,獨立按鍵相關的GPIO物件都被初始化為上拉輸入模式,以讀取獨立按鍵的狀態,最後在一個迴圈分別讀取KEY0按鍵、KEY1按鍵和KEY2按鍵對應的GPIO輸入電平,以判斷獨立按鍵是否被按下,若KEY0按鍵被按下,則控制對應的GPIO輸出低電平以控制紅色LED亮起,反之則控制對應的GPIO輸出高電平以控制紅色LED熄滅,KEY1按鍵和KEY2按鍵的讀取和按鍵解釋同理。
14.4 執行驗證
將DNK210開發板連線CanMV IDE,並點選CanMV IDE上的“開始(執行指令碼)”按鈕後,此時,若按下板載的KEY0按鍵,則能看到雙色LED的紅色亮起,釋放KEY0按鍵後,雙色LED的紅色熄滅,若按下KEY1按鍵,則能看到雙色LED的藍色亮起,釋放KEY1按鍵後,雙色LED的藍色熄滅,若按下KEY2按鍵,則能聽到蜂鳴器發聲,釋放KEY2按鍵後,蜂鳴器不發聲,這與理論推斷的結果一致。