如何使用TM1638四位顯示器。觀看影片
TM1638模組係一個多功能元件,可以顯示數字同字符,同時可以由按鈕控制。喺呢個教學入面,你會學到點樣設定同編程呢個顯示器,去顯示各種數值,包括數字同十六進制值。到呢個指南結束嘅時候,你會有一個完全正常運作嘅顯示器,可以回應按鈕按下,並且根據用戶輸入改變顯示內容。你可以喺影片入面(喺影片00:00)睇到示範。
硬件解釋
TM1638模組係設計用嚟顯示資訊同接收按鈕輸入。佢包含一個8位LED顯示器同一個16個按鈕嘅矩陣。每個按鈕都可以編程去觸發唔同功能,令到用戶介面更加方便。呢個模組透過三個引腳連接到微控制器:一個數據輸入/輸出引腳、一個時鐘引腳同一個選通引腳。呢個設定令到微控制器同TM1638之間可以高效通訊。 TM1638 IC管理顯示器同按鈕輸入。佢使用一個串行通訊協議,可以用最少嘅接線去控制顯示器同讀取按鈕狀態。每次按下按鈕都會向微控制器發送一個信號,然後微控制器可以根據邊個按鈕被按下嚟執行特定動作。數據手冊詳情
| 製造商 | QYF |
|---|---|
| 零件編號 | TM1638 |
| 邏輯/IO電壓 | 5 V |
| 供電電壓 | 5 V |
| 輸出電流(每段) | 20 mA |
| 峰值電流(總計) | 120 mA |
| 輸入邏輯閾值 | 0.2 V(低)/ 0.8 V(高) |
| 封裝 | DIP-28 |
- 確保供電電壓穩定喺5 V,以達到最佳性能。
- 限制輸出電流,避免損壞顯示器。
- 使用電阻去避免過大電流通過LED。
- 喺軟件入面為按鈕輸入做去抖,避免多重觸發。
- 保持接線短,以減少通訊噪音。
接線指示
要接線TM1638模組,你需要按照以下方式連接到你嘅微控制器:
VCC嘅引腳連接到你微控制器嘅5V電源。
- 將TM1638上面嘅GND引腳連接到你微控制器嘅接地。
- 將STB引腳(通常標示為STROBE)連接到你微控制器嘅數位引腳5。
- 將CLK引腳(時鐘)連接到你微控制器嘅數位引腳2。
- 將DIO引腳(數據輸入/輸出)連接到你微控制器嘅數位引腳3。
喺開機之前,確保檢查你嘅接線。如果你跟住影片(喺影片02:30)做,接線應該冇問題。
程式碼範例同講解
以下程式碼片段初始化TM1638模組並設定顯示器。識別符module代表用嚟同顯示器互動嘅TM1638實例。
TM1638QYF module(DIO, CLK, STB);
void setup()
{
module.setupDisplay(true, 7);
}
喺呢個片段入面,顯示器被設定為顯示最大亮度(7)。下一部分程式碼處理按鈕按下,並根據邊個按鈕被按下嚟改變顯示內容。
void update(TM1638QYF* module, word* mode) {
word buttons = module->getButtons();
if (buttons != 0) {
*mode = buttons >> 1;
}
switch (*mode) {
case 0: module->setDisplayToString("press 1"); break;
// 其他情況跟住落嚟
}
}
呢個函數用getButtons()檢查邊個按鈕被按下,並相應更新顯示器。變數mode決定根據按下嘅按鈕顯示乜嘢文字。最後,主循環不斷更新顯示器。
void loop()
{
update(&module, &mode);
}
呢個循環呼叫update函數,確保顯示器根據用戶互動刷新。想完全理解嘅話,請參考文章下面載入嘅完整程式碼。
示範 / 預期效果
當你接好所有線並上載程式碼之後,按下按鈕應該會相應改變顯示文字。例如,按下按鈕1會顯示「press 1」,而按下按鈕2就會改為「press 2」。如果有任何問題,請雙重檢查你嘅接線,並確保使用咗正確嘅引腳。睇吓影片(喺影片05:00)都會幫你確認一切運作正常。影片時間戳
- 00:00 - 介紹
- 02:30 - 接線指示
- 05:00 - 程式碼講解同示範
28-This is the Arduino code for a TM1638 8-digit display with a 4x4 matrix button.
語言: C++
/*
* This is the Arduino code for TM1638 8-digit display.
* with 16 matrix buttons.
* *
* Written by Ahmad Nejrabi for Robojax Video
* Date: Dec 10, 2017, in Ajax, Ontario, Canada
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
*/
/*
// http://arduinolearning.com/code/qyf-tm1638-and-arduino-module.php#codesyntax_2
* Modified for Robojax video on Dec 10, 2017
*/
#include <TM1638.h>
#include <TM1638QYF.h>
#define STB 5
#define DIO 3
#define CLK 2
TM1638QYF module(DIO, CLK, STB);
word mode;
void setup()
{
module.setupDisplay(true, 7);
mode = 0;//initial button zero
}
void update(TM1638QYF* module, word* mode) {
word buttons = module->getButtons();
// button pressed - change mode
if (buttons != 0) {
*mode = buttons >> 1;
if (*mode < 0) {
module->clearDisplay();
delay(100);
}
}
switch (*mode) {
case 0://S1
module->setDisplayToString("press 1");
break;
case 1://S2
module->setDisplayToString("press 2");
break;
case 2://S3
module->setDisplayToString("press 3");
break;
case 4://S4
module->setDisplayToString("press 4");
break;
case 8://S5
module->setDisplayToString("press 5");
break;
case 16://S6
module->setDisplayToString("press 6");
break;
case 32://S7
module->setDisplayToString("press 7");
break;
case 64://S8
module->setDisplayToString("press 8");
break;
case 128://S9
module->setDisplayToString("press 9");
break;
case 256://S10
module->setDisplayToString("press 10");
break;
case 512://S11
module->setDisplayToString("press 11");
break;
case 1024://S12
module->setDisplayToString("press 12");
break;
case 2048://S13
module->setDisplayToString("press 13");
break;
case 4096://S14
module->setDisplayToString("press 14");
break;
case 8192://S15
module->setDisplayToString("press 15");
break;
case 16384://S16
module->setDisplayToString("robojax");
break;
default:// unknown button
module->setDisplayToString("?????");
break;
}
}
void loop()
{
update(&module, &mode);
}
你可能需要嘅嘢
-
亞馬遜TM1638 on Amazonamzn.to
-
阿里巴巴速卖通TM1638 Keypad module on AliExpresss.click.aliexpress.com
資源與參考資料
-
外部TM1638 Library (from GitHub)github.com