Search Code

如何使用TM1638四位顯示器。觀看影片

如何使用TM1638四位顯示器。觀看影片

TM1638模組係一個多功能元件,可以顯示數字同字符,同時可以由按鈕控制。喺呢個教學入面,你會學到點樣設定同編程呢個顯示器,去顯示各種數值,包括數字同十六進制值。到呢個指南結束嘅時候,你會有一個完全正常運作嘅顯示器,可以回應按鈕按下,並且根據用戶輸入改變顯示內容。你可以喺影片入面(喺影片00:00)睇到示範。
TM1637 keypad display module-1

硬件解釋

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模組,你需要按照以下方式連接到你嘅微控制器:
Arduino wiring for TM1637 keypad display module
Arduino wiring for TM1637 keypad display module
- 將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 - 程式碼講解同示範

圖片

TM1637 keypad display module-1
TM1637 keypad display module-1
TM1637 keypad display module-2
TM1637 keypad display module-2
TM1637 keypad display module-3
TM1637 keypad display module-3
TM1637 keypad display module
TM1637 keypad display module
Arduino wiring for TM1637 keypad display module
Arduino wiring for TM1637 keypad display module
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);
}

你可能需要嘅嘢

資源與參考資料

文件📁

Arduino 函式庫 (zip)

  • TM1638 库
    TM1638 库
    robojax-TM1638-library-master.zip 5.03 MB

用户手册