天天看點

【.NET 與樹莓派】TM1638 子產品的按鍵掃描

上一篇水文中,老周馬馬虎虎地介紹 TM1638 的數位管驅動,這個子產品除了驅動 LED 數位管,還有一個功能:按鍵掃描。記得前面的水文中老周寫過一個 16 個按鍵的子產品。那個是我們自己寫代碼去完成鍵掃描的。但是,缺點是很明顯的,它會占用我們應用的許多運作時間,尤其是在微控制器開發闆上,資源就更緊張了。是以,有一個專門的晶片來做這些事情,可以大大地降低代碼的執行時間開銷。

讀取 TM1638 子產品的按鍵資料,其過程是這樣的:

1、把STB線拉低;

2、發送讀取按鍵的指令,一個位元組;

3、DIO轉為輸入模式,讀出四個位元組。這四個位元組包含按鍵資訊;

4、拉高STB的電平。

時序如下圖所示。

 其中,Command1 就是讀鍵指令,即 0100 0010。

 上一篇水文中定義的指令常量中就包含了該指令。

上回咱們已經寫了 WriteByte 方法,現在,為了讀按鍵資料,還要實作一個 ReadByte 方法。

由于 TM1638 的大部分操作都是輸出,隻有讀按鍵是輸入操作,是以,在ReadByte方法中,先将 DIO 引腳改為輸入模式,讀完後改回輸出模式。不過呢,因為這個子產品隻有這個指令是要讀資料,其他指令都是寫資料,而且這按鍵資訊是一次性讀四個位元組,要是每讀一個位元組都切換一次輸入輸出,有點浪費性能,咱們把上面的代碼去掉切換輸入輸出的代碼。

然後把輸入輸出切換的代碼移到 ReadKey 方法中。

下面重點看看如何分析讀到的這四個字。資料手冊上有一個表。

 總共有四個位元組,每個位元組有八位,是以,它能包含 24 個按鍵的資訊,原理圖如下:

 K1、K2、K3 三根線,每根線并聯出八個按鍵(KS1 - KS8),這就是它讀掃描 24 鍵的原因。但,如果你買到的子產品和老周一樣,是八個按鈕的,那就是隻接通了 K3。然後我們把 K3 代入前面那個表格。

 也就是說,每個位元組隻用到了 B0 和 B4 兩個二進制位(第一位和第五位),其他的位都是 0。

然而,子產品的實際電路和資料手冊上所标注的不一樣,經老周測試,買到的這個子產品的按鍵順序是這樣的。

 是以才會有這段鍵值分析代碼(按鍵編号老周是按照以 0 為基礎算的,即 0 到 7,你也可以編号為 1 到 8,這個你可以按需定義,隻要知道是哪個鍵就行)。

是以,你買回來的子產品要親自測一下,看看它在生産封裝時是如何走線的。可以在讀到位元組後 WriteLine 輸出一下,然後各個鍵按一遍,看看哪個對哪個。有可能不同廠子出來的子產品接線順序不同。

好了,現在 TM1638 類就完整了,老周重新上一遍代碼。

構造函數有三個參數。

分别代表連接配接三個引腳的 GPIO 接口号。

比如,老周測試時用的這三個口。

 是以,new 的時候就這樣寫:

可以用以下程式測試一下。