Hiển thị phím nhấn lên LED 7 đoạn

Hiển thị phím nhấn lên LED 7 đoạn

Hiển thị phím được nhấn trên keypad lên LED 7 đoạn

Board UnoX kết nối với keypad 4x4 và LED 7 đoạn (anode chung), khi nhấn phím 1 trên bàn phím thì LED 7đoạn sẽ sáng số 1, tương tự với các phím khác.

Linh kiện cần dùng

Tìm hiểu LED 7 đoạn

  • LED 7 đoạn: LED 7 đoạn có cấu tạo gồm 8 LED đơn (7 đoạn và một dấu chấm) được kí hiệu là: a, b, c, d, e, f, g, dp (dấu chấm). Hiện nay, LED 7 đoạn có 2 loại: anot chung (chân anot của 8 LED đơn nối chung với nhau) và catot chung (chân catot của 8 LED đơn nối chung với nhau ).
  • Đối với LED 7 đoạn anot chung, khi sử dụng, bạn cần kết nối chân anot chung với nguồn VCC (sử dụng thêm trở hạn dòng 220 Ohm). Đối với các chân còn lại, khi cấp điện áp 0V (mức 0) thì LED tương ứng sẽ sáng và điên áp 5V (mức 1) thì LED sẽ tắt. Với LED catot chung thì ngược lại, chân catot chung sẽ nối với GND, các chân còn lại mức 1 sẽ làm sáng và mức 0 sẽ làm tắt các thanh LED tương ứng.
  • Ví dụ: Để hiển thị số 1 (thanh b và c trên LED sẽ sáng lên), ta sẽ cấp nguồn 5v vào chân Vcc (thông qua trở 220 Ohm), chân số 6 (thanh b) và chân sô 4 (thanh c) sẽ kết nối với GND, các chân còn lại kết nối với 5V.
  • LED 7 đoạn thường được dùng để hiển thị số từ 0 đến 9 và một số kí tự.

Lưu ý: Ví dụ này sẽ sử dụng LED 7 đoạn anot chung.

Tìm hiểu về kaypad 4x4

  • Keypad 4x4: Cấu tạo gồm 16 nút nhấn kết nối thành 4 hàng và 4 cột.
  • Keypad được dùng để nhập dữ liệu, tương tác giữa người dùng với thiết bị.

Kết nối các thiết bị

UnoXLED 7 đoạn
A51
A42
VCC3
A34
56
47
39
210

Lưu ý: Chân số 5 (dp) và chân số 8 (VCC) của LED 7 đoạn không sử dụng.

Mã nguồn

  • Tải thư viện Keypad library
  • Sử dụng thư viên Keypad.h tạo một đối tượng Keypad.
  • Đối tượng Keypad này sẽ trả về giá trị phím bấm ( kiểu char) thông qua hàm getKey() và hiển thị lên LED 7 đoạn thông qua hàm showLED(int number)
  • Tuy nhiên hàm showLED(int number) có thông số truyền vào là kiểu int, vì vậy cần chuyển giá trị phím nhần từ kiểu char sang kiểu int bằng lệnh: int key = (int)k - 48;
  #include "Keypad.h"                               //  https://github.com/Chris--A/Keypad
  const int segmentPins[8] = {A2,2,3,A5,A4,A3,5,4}; //  Khai báo chân LED 7 đoạn (dp,g,f,e,d,c,b,a).
  const byte ROWS = 4;                              //  Khai báo số hàng keypad.
  const byte COLS = 4;                              //  Khai báo số cột keypad.
  int i=0;
  /*  - Mảng nhị phân mã hóa số từ 0 đến 9 và kí tự E (Error) cho LED 7 đoạn.
      - LED 7 đoạn Anot chung nên bit nên để LED sáng thì chân IO phải xuất mức 0.
      - 8bit dữ liệu tương ứng với vị trí các thanh như sau:
            B00000011 ứng với các thanh a,b,c,d,e,f,g,dp.
      - Để hiển thị số 0, thanh g và dp sẽ tắt (ứng với mức 1) các thanh còn lại sáng
      (ứng với mức 0) nên mã nhị phân của số 0 sẽ là B00000011 */
  const byte numberal[11] = {
    B00000011,                                      //  0
    B10011111,                                      //  1
    B00100101,                                      //  2
    B00001101,                                      //  3
    B10011001,                                      //  4
    B01001001,                                      //  5
    B01000001,                                      //  6
    B00011111,                                      //  7
    B00000001,                                      //  8
    B00001001,                                      //  9
    B01100001                                       //  Error
  };
  /*  Mảng giá trị phím bấm */
  char keys[ROWS][COLS] = {
    {'1','2','3',':'},
    {'4','5','6',':'},
    {'7','8','9',':'},
    {':','0',':',':'}
  };
  byte rowPins[ROWS] = {13, 12, 11, 10};            //  Khai báo chân kết nối với hàng của keypad.
  byte colPins[COLS] = {9, 8, 7, 6};                //  Khai báo chân kết nối với cột của keypad.
  Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Khai báo đối tượng bàn phím.

  void setup() {
    for (int vitri = 0; vitri < 8; vitri++)   {     //  Cấu hình các chân LED là ngõ ra số.
      pinMode(segmentPins[vitri], OUTPUT);
      digitalWrite(segmentPins[vitri], HIGH);
    }
    showLED(0);                                     //  Hiển thị số 0 khi vừa khởi động.
  }

  void loop()
  {
    char k = keypad.getKey();                       //  Biến key lưu giá trị nhận được từ keypad.
    int key = (int)k - 48;                          //  Chuyển đổi giá trị trả về từ phím bấm (từ char sang int).
    if ( key >= 0 && key <= 10)
      showLED(key);                                   //  Hiển thị giá trị phím bấm lên LED.
  }

  /*  Hàm hiển thị dữ liệu lên LED 7 đoạn */
  void showLED(int number)
  {
    number = constrain(number,0,10);                //  Hàm constrain giúp chặn giá trị biến number chỉ chạy từ 0 đến 10.
    boolean isBitSet;
    for(int segment=0; segment < 8; segment++) {
      isBitSet = bitRead(numberal[number], segment);
      digitalWrite(segmentPins[segment], isBitSet);
    }
  }

Kết quả

  • Hiển thị số từ 0 đến 9 tương ứng với các phím số trên keypad.
  • Đối với những phím khác còn lại sẽ hiển thị kí tự E (Error).

Ứng dụng mở rộng

  • Tạo một máy tính đơn giản.
  • Ổ khóa thông minh (mở khóa bằng cách nhập mật khẩu từ keypad).