Thông báo

Collapse
No announcement yet.

Hướng dẫn tạo mã ma trận = excel :D

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Hướng dẫn tạo mã ma trận = excel :D



    Khi làm việc với LED matrix hoặc Graphic LCD, hoặc bất kì 1 ứng dụng nào đó trên vđk mà bạn cần sử dụng đến matrix (hay array) định nghĩa sẵn, chẳng hạn như 1 bộ font các chữ cái cho led matrix... thì bạn sẽ tạo ra nó như thế nào,

    sẽ có nhiều cách để tạo mã và mỗi người sẽ có 1 cách riêng phù hợp với quy mô của ứng dụng...chẳng hạn:

    - ở quy mô nhỏ, các newbie thường chọn cách viết ra giấy, rồi chuyển từ binary thành hex rồi cho vào chương trình ngày xưa mới tập tọe mình toàn làm cách này, từ đó mình thuộc lòng chuyển đổi giữa các hệ cơ số

    - Ở cấp chuyên nghiệp, bạn sẽ viết 1 ứng dụng để chuyển từ font máy tính, text, đồ họa trên máy tính thành 1 mảng trong C rồi cho nó vào EEPROM

    Chương trình PvFont chẳng hạn



    Tuy nhiên mỗi cách đều có 1 nhược điểm riêng...

    Cách đầu thì bạn sẽ làm rất lâu, công phu, tỉ mỉ và sai sót lại lớn, và chỉ thực hiện được với cấp độ nhỏ, số lượng ít.

    Cách sau thì bạn có thể thiết kế hàng loại, rất nhanh và chính xác, nhưng bạn phải viết ra 1 chương trình như vậy = 1 ngôn ngữ lập trình nào đó không phải là nhanh chí ít cũng mất cả buổi để chỉnh sửa giao diện và câu lệnh, và đặc biệt sẽ rất khó khăn cho những bạn không thành thạo về lập trình ứng dụng


    Sau đây, mình sẽ hướng dẫn 1 cách tạo matrix nói chung là nằm cấp độ giữa 2 cách trên :whistle: bằng cách dùng chương trình excel, sẽ rất tiện dụng, trực quan khi bạn đã thành thạo nó, tạo ra 1 ma trận rất nhanh chóng...hihi :zzz:









    1. Cơ bản, tạo ra 1 byte:

    - Mở ứng dụng excel


    - Select nhiều cột, nhấn chuột phải chon column width = 2 để các cell có hình vuông





    - Giả sử bây giờ muốn tạo ô F2 đến ô M2 thành 1 byte, với mỗi giá trị trong ô là 1 bit, và ô F6 sẽ chứa giá trị của byte trên


    thì các bạn gõ vào ô F6 1 câu lệnh "= F2*1+G2*2+H2*4+I2*8+J2*16+K2*32+L2*64+M2*128"

    (nói thêm, các bạn có thể Nản thi phải nhập 1 câu lệnh lằng ngoằng như thế, nhưng vạn sự khởi đầu nan, đừng nản, khi bạn tạo 1 ma trận lớn, hàng vạn điểm, chỉ cần tạo 1 byte như thế, kéo chuột rẹt cái là xong cái ma trận đó rồi :lol: )
    -OK, bây giờ đã xong 1 byte, trong byte đó gồm các bit 0,1, nếu để trống thì hiểu là 0, còn 1 thì gõ số vào, bây giờ hãy thử đặt các số 1 vào byte trên, ô kết quả F6 sẽ cho giá trị tương ứng dạng số Dec




  • #2
    2 Tự động đổi mầu
    - ta thấy, khi để các số 1 thì nhìn không được trực quan lắm, nếu các ô đó đổi mầu sắc thì nhìn rất cool => no problem, excel làm tốt vấn đề này, thực hiện như sau:
    - select hết các ô của byte từ F2 đến M2, vào menu format, chọn conditional formatting...



    -bật ra 1 dialog, đặt thông số như hình "Cell value is equal to 1" rồi nhấn Format



    -chon tab parterns, rồi chọn mầu đỏ, nhấn OK, rồi OK tiếp



    - Hehe, giờ hãy thử đặt số 1 ở các vị trí khác nhau xem, hihi, ngạc nhiên chưa...



    -Hãy để background thành mầu đen đen cho giống led matrix





    3 Thay đổi trọng số

    - Trong byte trên nhìn ở hàng trên cùng thì từ trái qua phải thứ tự bít tăng dần, vậy nếu trong trường hợp khác ta lại muốn thay đổi thứ tự này là giảm dần,hoặc lộn xộn vậy làm thế nào để ô kết quả vẫn đúng mà không phải thay đổi cấu trúc hàng loại byte

    hãy chỉnh lại 1 chút thôi, là OK ngay

    - thêm 1 hàng hệ số nhân gồm 8 ô, bên dưới byte trên, và nhập vào ô F3 công thức "=POWER(2,F1)" nó có nghĩa là 2 mũ giá trị trong ô F1, ở đây F1 = 0 nên giá trị là 2 mũ 0 = 1, nếu F1 = 3 thì kq là 2 mũ 3 = 8



    - ok, áp dụng cho cả hàng này bằng cách nhấn chuột vào ô F3, di chuột đến góc dưới-phải của ô F3, trỏ chuột có dạng màu đen, nhấn và kéo đến ô M3 để copy công thức



    - được giá trị là 1,2,4,8...128, hehe, giờ sửa lại công thức trong ô F6 là "= F2*F3+G2*G3+H2*H3+I2*I3+J2*J3+K2*K3+L2*L3+M2*M3"



    -ok, bây giờ thì tha hồ thay đổi vị trí các bit ở hàng trên cùng, giá trị luôn đúng

    4 Nâng cao tí nhở, nếu bạn dùng led matrix 2 mầu cơ bản là đỏ và xanh

    - OK, no vấn đề, Excel chơi đc hết. :lol: Khi này Led sẽ có các mầu đỏ, xanh và vàng, mình sẽ tạo ra 1 byte mầu đỏ và 1 byte mầu xanh để các bạn xuất 2 byte này vào hàng chân đỏ và hàng chân xanh của Led matrix.

    - sửa lại file excel trên như sau, có ô kq là Red và Green



    -Vào lại Format>>conditional formatting... thêm mấy điều kiện nữa như hình dưới, ta hiểu 1 là sáng mầu đỏ, 2 là mầu xanh, 3 là mầu đỏ + xanh => ứng với mầu vàng,
    điều này cũng ứng với giá trị nhị phân 01 là đỏ, 10 là xanh, 11 là đỏ + xanh





    -Tiếp theo sửa lại câu lệnh trong ô red và green,
    ô RED "= MOD(F2,2)*F3+MOD(G2,2)*G3+MOD(H2,2)*H3+MOD(I2,2)*I 3+MOD(J2,2)*J3+MOD(K2,2)*K3+MOD(L2,2)*L3+MOD(M2,2) *M3"
    ô Green "=ROUNDDOWN(F2/2,0)*F3+ROUNDDOWN(G2/2,0)*G3+ROUNDDOWN(H2/2,0)*H3+ROUNDDOWN(I2/2,0)*I3+ROUNDDOWN(J2/2,0)*J3+ROUNDDOWN(K2/2,0)*K3+ROUNDDOWN(L2/2,0)*L3+ROUNDDOWN(M2/2,0)*M3"
    - Hihi đừng quá lo lắng về câu lệnh dài ngoẵng này, excel sẽ tính ra 100 ô có công thức này trong nháy mắt.
    Ta biết khi giá trị trong ô là 1 hoặc 3 thì RED hiểu là 1, vậy hàm Mod(x,y) sẽ chia x cho y và trả về phần dư, y = 2, nếu x = 1 hoặc 3 thì sẽ trả về 1, nếu x = 0 hoặc 2 thì trả về 0;
    Còn giá trị là 2 hoặc 3 thì GREEN phải sáng, tức là hiểu là 1, hàm ROUNDDOWN(z/2,w) sẽ chia giá trị z cho 2 rồi làm tròn w số sau dấu phẩy, nếu z = 0 , 1 thì kq là 0, z = 2,3 thì kết quả là 1,
    OK chứ, hihi







    -Vậy là xong ta có 1 byte cho Led 2 mầu cơ bản rồi. hihi

    Comment


    • #3
      5 nâng cao tí nữa..hihi, phần số hex
      - nhiều bạn sẽ không quen kiêu số dec, hay dùng kiểu số hex, quá đơn giản, có ngay
      -Trong excel không có hàm chuyển số dec sang số hex, nhưng lại cho phép nhúng các câu lện VB6
      - trong VB6, hàm chuyên là hex(num)

      -Vào menu tools>>Macro>>Visual Basic Editor



      -ta đc cửa sổ Microsoft visual basic



      - vào menu insert>>module



      - Thêm vào module 1 với 1 hàm sau:

      Function MakeHex(num)
      MakeHex = Hex(num)
      End Function



      - Tiếp theo vào menu file>> Close and return to microsoft excel



      -Ok, giờ hãy gõ vào 1 ô nào đó câu lệnh ="0x" & makehex(F6) để kiểm tra macro,





      ok chứ, vậy là số hex ngon lành cành đào rồi nhé

      6 Hãy ghép các bước trên để thành 1 ma trận hoàn thiện

      - đầu tiên, tạo file mới, rồi chỉnh sửa thành như hình dưới, (Theo các bước cơ bản đã hướng dẫn ở trên)



      - ở đây sẽ tạo ra 1 ma trận byte gồm 16 hàng và 3 côt, tức là trong C sẽ khai báo unsigned char MyArr[16][3] = {....};

      -Tiếp theo, ở phía dưới ta tạo tiếp 1 vùng có kích thước tương đương ma trận trên, nhập 8 cel tương ứng với 1 byte thành 1 ô cho dễ nhìn = cách select 8 ô, chuột phải >> format cells



      chọn tiếp merge cell >> ok



      Nhấn chuột vào góc dưới-phải của ô vừa nhập, kéo theo chiều ngang và dọc để được 3 cột, 16 hàng...





      Thêm kẻ viền



      -Bây giờ hãy viết câu lệnh cho byte đầu tiên

      ="0x" & makehex( MOD(A4,2)*A$2+MOD(B4,2)*B$2+MOD(C4,2)*C$2+MOD(D4,2 )*D$2+MOD(E4,2)*E$2+MOD(F4,2)*F$2+MOD(G4,2)*G$2+MO D(H4,2)*H$2)

      Trong câu lệnh này, mình thêm dấu $ ở các ô hàng số 2, mục đích là để cố định hàng này khi kéo rê theo chiều dọc Như đã hướng dẫn trên, kết quả sẽ cho là số hex





      Bây giờ chỉ việc kéo rê theo chiều dọc và ngang để nhân bản công thức cho toàn ma trận



      Phù, vậy là đã xong cho ma trận mầu đỏ -Làm tương tự để ra mầu xanh

      -Điều cần lưu ý là phải thêm dấu $ để khi kéo không bị sai



      -Bây giờ làm thế nào để copy vào C editor? đầu tiên hãy nhập (merge cell) ô trên cùng và ô dưới cùng thành 1 ô và gõ các nội dung là ô trên : unsigned char MyRedArr[16][3] = { ô dưới };
      tiếp theo, sửa lại 3 ô trên cùng 1 ít thêm các đoạn "{" & ; & "," ; & "}," ..... vào đầu và cuối cho phù hợp Kéo rê để sao chép công thức cho toàn ma trận



      xong rồi, giờ chỉ việc select và paste vào C editor thoai. hihi





      Tùy cách tổ chức dữ liệu trong C mà bạn có thể sắp xếp các cell cho phù hợp với ứng dụng của minh. hihi chúc thành

      File excel đã đính kèm, trong file này có phần macro chưa đính kèm đc, nên 1 số sheet sẽ ko hoạt động đúng nếu chưa chỉnh lại macro như hướng dẫn ở trên


      Nguồn bài: http://my.opera.com/giacmochapi911/b...ran-bang-excel
      Attached Files

      Comment


      • #4
        Bóc tem cho bài viết của bác nè. Bài viết tốt lắm. Rất cảm ơn.
        Đăng ký Dropbox có ngay 2GB lưu trữ online miễn phí:

        Comment


        • #5
          các bác có thể cho e xin sơ đồ nguyên ly của bảng led ma trận được không? nếu có thể thì cho e xin luôn code nạp cho bảng led chạy front chữ luôn nhé! thanks!

          Comment


          • #6
            bài hay quá ma ko thấy hình

            Comment


            • #7
              sao bây giờ mình mới đọc bài này nhỉ
              tiếc ghê
              cảm ơn bạn nhé

              Comment


              • #8
                Bài này mình viết cũng lâu rồi, nên các ảnh chụp mình để trên host Opera bị mất rồi. Bạn cứ down file excel đính kèm về rồi xem các công thức trong đó là ra. chỉ cần thay đổi dữ liệu trong vùng A4:X19 bằng các giá trị (1,2,3, hoặc ô trống) thì các vùng khác sẽ thay đổi theo.

                Comment


                • #9
                  cám ơn bài viết--để cho lên "bài mới" nha.

                  Comment

                  Về tác giả

                  Collapse

                  pvhanh Tìm hiểu thêm về pvhanh

                  Bài viết mới nhất

                  Collapse

                  Đang tải...
                  X