STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

    LED Matrix

    Chúng ta thướng thấy rất nhiếu biển quảng cáo đèn LED với đủ màu sắc và nội dung, bản chất của những biển quảng cáo đó cũng giống như LED matrix. Một chiếc LED matrix có 16 chân, 8 chân row và 8 chân column. Trong bài này tôi sẽ hướng dẫn lập trình trên LED matrix 2388ASR.
    02/09/2015
    10/08/2020
    5 phút đọc
    LED Matrix

    Bản chất của những biển quảng cáo với đủ màu sắc và nội dung cũng giống như LED matrix gồm 16 chân: 8 chân row và 8 chân column, có thể lập trình để tạo ra các hình ảnh.

    LED matrix 2388ASR

    LED matrix mặt trước.
    LED matrix mặt trước
    LED matrix mặt sau
    LED matrix mặt sau

    Đây là LED matrix đơn sắc, chỉ có một màu đỏ. Tập hợp của 64 đèn LED được xếp theo hàng và cột. Với bố trí như vậy có thể hiển thị hình ảnh, văn bản như một màn hình.

    Tivi LED cũng có thiết kế tương tự nhưng số lượng LED trên hàng và cột rất lớn như vậy sẽ tao được độ mịn cho hình ảnh.

    Ưu điểm của những bảng LED matrix là có độ bền cao và khi để ngoài trời sáng vẫn thấy rõ rất phù hợp với ngành quảng cáo.

    Cấu trúc

    LED matrix 8x8
    Cấu trúc LED matrix 8x8

    Với:

    • c0 là cột 0, c1 là cột 1, c2 là cột 2, c3 là cột 3, c4 là cột 4, c5 là cột 5, c6 là cột 6, c7 là cột 7.
    • r0 là dòng 0, r1 là dòng 1, r2 là dòng 2, r3 là dòng 3, r4 là dòng 4, r5 là dòng 5, r6 là dòng 6, r7 là dòng 7.

    Dự án mẫu sử dụng LED matrix

    Để điều khiển LED matrix, Arduino Uno sẽ không đủ chân nên trong sơ đồ sẽ sử dụng 2 IC 74HC595N. IC đầu tiên sẽ làm nhiệm vụ điều khiển các column của LED matrix. Các chân từ Q0 → Q7 của IC đầu tiên tương ứng với các chân col 0 → col 7 theo hình trên. Tương tự với IC thứ 2 sẽ điều khiển các chân row từ row 0 → row 7.

    ss_4
    Sơ đồ mạch

    Nguyên lý

    Trong lần dịch bit thứ nhất của IC điều khiển các chân row, sau khi dịch các dòng row đang có giá tri là 1. Những vị trí có số 1 trên đèn LED matrix sẽ là những ô sáng.

    void translateTargetBuffer()
    {
          digitalWrite(MC_LATCH, LOW);
          shiftOut(MC_DATA, MC_CLOCK, MSBFIRST, B00000000);
          shiftOut(MC_DATA, MC_CLOCK, MSBFIRST, B00000001);
          digitalWrite(MC_LATCH, HIGH);
          delay(1);
    }

    Hàm translateTargetBuffer trên sẽ hiển thị những điểm sáng trên đèn tùy thuộc vào giá trị data đưa vào. Vòng lặp từ 0 → 7 là 8 dòng và 8 cột.

    Do sử dụng 2 IC nên một lần dịch bit phải dịch bit shiftOut của một giá trị 16 bit mà một IC chỉ có khả năng dịch tối da 8 bit nên trong hàm trên cần dịch bit 2 lần.

    Ví dụ bật các LED trên 1 dòng

    Bật sáng tất cả các đèn tại vị row 1

    Bật LED trên LED matrix.

    Đầu tiên sử dụng IC thứ nhất để truyền vào col giá trị là B00000000, lúc này tất cả các col đều có giá trị là 0.

    ss_6

    Sau đó ta truyền vào cho row giá trị B00000001, toán tử giữa các bit là toán tử XOR.

    ss_7

    Các ô có giá trị là 1 sẽ sáng lên.

    Ví dụ bật các LED trên 1 dòng và 1 cột

    Làm đèn sáng theo hình dạng sau.

    ss_8

    Tạo một mảng row như sau:

    int row[] = {1, 2, 4, 8, 16, 32, 64, 128}; 
    

    và một mảng gồm 8 phần tử

    byte symbol[MC_ROWS] = { 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };

    các phần tử trong mảng symbol chỉ đơn giản là chuyển từ kiểu BIN sang HEX.

    Mã nguồn đầy đủ

    #define MC_CLOCK  10
    #define MC_LATCH  11
    #define MC_DATA   12
    
    #define MC_ROWS   8
    #define MC_COLS   8
    
    byte symbol[MC_ROWS] = { 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
    
    void setup()  
    {
      pinMode(MC_CLOCK,OUTPUT);
      pinMode(MC_LATCH,OUTPUT);
      pinMode(MC_DATA,OUTPUT);
    }
     
    void loop()
    {
      translateTargetBuffer();
    }
    
    void translateTargetBuffer()
    {
      for (int i = 0; i < MC_ROWS; i++)
      {
          digitalWrite(MC_LATCH, LOW);
          
          shiftOut(MC_DATA, MC_CLOCK, MSBFIRST, ~symbol[i]);
          shiftOut(MC_DATA, MC_CLOCK, MSBFIRST, (1<<i));
          
          digitalWrite(MC_LATCH, HIGH);
          
          delay(1);
      }
    }
    
    ss_9

    Dòng shiftOut(MC_DATA, MC_CLOCK, MSBFIRST,~symbol[i]) phải đảo ngược các bit, vì nếu không đảo ngược thì 1 XOR 1 = 0 dẫn đến ô muốn sáng thì lại là ô bị tắt.

    Ví dụ tạo hiệu ứng chạy chữ

    LED matrix chạy chữ.

    LED matrix chạy chữ.
    #define MC_CLOCK  10
    #define MC_LATCH  11
    #define MC_DATA   12
    
    #define MC_ROWS   8
    #define MC_COLS   8
    
    #define STDIO_MAX_ELEMENTS 5
    
    byte row[] = { 1, 2, 4, 8, 16, 32, 64, 128 };
    
    byte characterList[STDIO_MAX_ELEMENTS][MC_ROWS] = {
    { 0x1C, 0x22, 0x30, 0x18, 0x0C, 0x46, 0x46, 0x3C }, //S
    { 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //T
    { 0x78, 0x64, 0x66, 0x66, 0x66, 0x66, 0x64, 0x78 }, //D
    { 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E }, //I
    { 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C }, //O
    };
    
    void setup()
    {
      pinMode(MC_CLOCK, OUTPUT);
      pinMode(MC_LATCH, OUTPUT);
      pinMode(MC_DATA,  OUTPUT);
    }
     
    void loop()
    {
      for (int i = 0; i < 5; i++)
      {
        translateTargetBuffer(characterList[i]);
      }
    }
    
    void translateTargetBuffer(byte deviceContext[])
    {                
      for(int shift = 0; shift < 9; shift++)
      {
        for(int fps = 0; fps < 30; fps++)
        {
          for(int row_present = 0; row_present < 8; row_present++)
          {
            digitalWrite(MC_LATCH, 0);
            
            shiftOut(MC_DATA, MC_CLOCK, MSBFIRST, ~(deviceContext[row_present] << shift)); //col
            shiftOut(MC_DATA, MC_CLOCK, MSBFIRST, row[row_present]);//row
    
            digitalWrite(MC_LATCH, 1);
            delay(1);
          }
        }
      }
    }

    Như vậy ta đã có được một bảng đèn LED chạy chữ như những biển quảng cáo thường thấy:

    0 Bình luận
    Điện Tử Ứng Dụng

    Điện Tử Ứng Dụng

    Kiến thức điện tử, Arduino, Raspberry Pi, giới thiệu sản phẩm.

    Đề xuất

      Khi bạn nhấn vào sản phẩm do chúng tôi đề xuất và mua hàng, chúng tôi sẽ nhận được hoa hồng. Điều này hỗ trợ chúng tôi có thêm kinh phí tạo nhiều nội dung hữu ích. Tìm hiểu thêm.
      STDIO

      Trang chính

      Công ty TNHH STDIO

      30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
      +84 28.36205514 - +84 942.111912
      developer@stdio.vn

      383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
      Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

      Đã thông báo Bộ Công Thương
      ©STDIO, 2013 - 2020