giúp em với về ledmatrix

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • longtu
    Đệ tử 6 túi
    • Jul 2007
    • 146

    #31
    Nguyên văn bởi nguyennam8888 View Post
    anh , em không hiểu mấy,buff_mh[BITMAP_HEIGHT_BYTE][BITMAP_WIDTH_BIT] là sao, nó có tác dụng gí
    pt=&buff_mh[0][0];
    j=(y/6*BITMAP_WIDTH_BIT+x);
    em cũng không hiểu
    mong anh chỉ em cụ thể với , em mới bắt đầu thôi mà
    buff_mh[BITMAP_HEIGHT_BYTE][BITMAP_WIDTH_BIT] :mình coi ma trận led là màn hình Leds, thì đây chính là bộ đệm màn hình Leds(buffer_manhinh) đó, khi mình thay đổi dữ liệu trên bộ đệm này tức là mình đã thay đổi sự hiện thị trên màn hình Leds. Ban tìm hiểu thêm về mảng trong C nhé.

    pt=&buff_mh[0][0];//Đây là cách lấy điạ chỉ cho con trỏ. Bạn tìm hiểu thêm về con trỏ trong C nhé.

    Thân,

    Comment

    • tungtot_vl
      Đệ tử 6 túi
      • Jul 2007
      • 154

      #32
      lmd

      [QUOTE=nguyennam8888;22125]
      Nguyên văn bởi tungtot_vl View Post

      nếu như vậy là dich cả byte chứ, 4 lệnh trên em chưa biết cách sử dụng nó , trong tài liệu CCS tiếng việt cũng không nói nhiều về nó ,Bác chỉ cụ thể cho em đươc không
      khi thục hiện lệnh thì nó dịch một bit.
      tùy theo chuơng trình của bạn như thế nào mà bạn sử dụng nó cho thích hợp
      shift_right(mang,so byte,1 hoặc 0); dich các bit trong mãng sang phải 1 bit sau đó chèn vào giá trị đầu tiên là 1 hoặc 0
      shift_left(mang,so byte,1 hoặc 0)
      rotate_right(mang,so byte); xoay phải các bit trong mang
      rotate_left(mang,so byte);
      ví dụ:
      mang[2] có các bit là: 0b11110000,0b00001111;
      shift_left(mang,2,1); ==>khi đó các bit trong mang là: 0b11100000,0b00011111;
      shift_left(mang,2,0); ==>khi đó các bit trong mang là: 0b11100000,0b00011110;
      rotate_left(mang,2);==>khi đó các bit trong mang là: 0b11100000,0b00011111;
      rotate_right(mang,2);==>khi đó các bit trong mang là: 0b11111000,0b00000111;
      các hàm này khi ứng dụng cho dịch trái hay phải thì còn tùy thuộc vào code bạn viết nhé

      Comment

      • nguyennam8888
        Đệ tử 3 túi
        • Dec 2008
        • 50

        #33
        [QUOTE=tungtot_vl;22143]
        Nguyên văn bởi nguyennam8888 View Post

        khi thục hiện lệnh thì nó dịch một bit.
        tùy theo chuơng trình của bạn như thế nào mà bạn sử dụng nó cho thích hợp
        shift_right(mang,so byte,1 hoặc 0); dich các bit trong mãng sang phải 1 bit sau đó chèn vào giá trị đầu tiên là 1 hoặc 0
        shift_left(mang,so byte,1 hoặc 0)
        rotate_right(mang,so byte); xoay phải các bit trong mang
        rotate_left(mang,so byte);
        ví dụ:
        mang[2] có các bit là: 0b11110000,0b00001111;
        shift_left(mang,2,1); ==>khi đó các bit trong mang là: 0b11100000,0b00011111;
        shift_left(mang,2,0); ==>khi đó các bit trong mang là: 0b11100000,0b00011110;
        rotate_left(mang,2);==>khi đó các bit trong mang là: 0b11100000,0b00011111;
        rotate_right(mang,2);==>khi đó các bit trong mang là: 0b11111000,0b00000111;
        các hàm này khi ứng dụng cho dịch trái hay phải thì còn tùy thuộc vào code bạn viết nhé
        bây giở giả sừ em có một mảng gồm 4 byte :K[4]= {0b11010101,0b01011011,0b01111000,0b11100011};
        em muốn dich phai byte thứ 4 trong mảng với bít đầu tiên của byte thứ 3 trong mảng thì phải làm như thế nào

        Comment

        • tungtot_vl
          Đệ tử 6 túi
          • Jul 2007
          • 154

          #34
          lmd

          [QUOTE=nguyennam8888;22145]
          Nguyên văn bởi tungtot_vl View Post
          bây giở giả sừ em có một mảng gồm 4 byte :K[4]= {0b11010101,0b01011011,0b01111000,0b11100011};
          em muốn dich phai byte thứ 4 trong mảng với bít đầu tiên của byte thứ 3 trong mảng thì phải làm như thế nào
          cái này thì không thực hiện được rồi. vì hàm trên chỉ thực hiện cho số byte là hằng số và bắt đầu từ vị trí byte đầu tiên trong mãng. do đó không thể dịch riêng cho byte số 4 được mà phải dịch cho toàn bộ mãng hoặc dịch các byte đầu tiên trong mãng thì được.
          do đó bạn muốn dùng các hàm này để dịch chữ cho LMD thì tốt nhất bạn nên chia mãng hiển thị chữ của bạn ra làm nhiều mãng nhỏ rồi dịch các mãng nhỏ đó
          vì bạn dùng 595 để gửi data do đó mỗi data ra 595 là một byte nằm ngang của màn hình hiển thị. nên khi bạn dich byte này sang phải hay sang trái thì màn hình hiển thị sẽ dịch 1 hàng.
          nếu bạn dùng LMD 8 hàng thì nên chi làm 8 mãng, mỗi mãng là 1 hàng. do đó dịch mãng 1 sang 1 bước thì các điểm ảnh của màn hình hàng 1 cũng dịch sang 1 bước. do đó khi bạn dịch cả 8 mãng sang một bước thì toàn bộ màn hình cũng dịch sang 1 bước. làm như thế thì bạn đã dịch chữ được sang một bước rồi đó hi hi. cứ như thế lập lại cho đến hết màn hình là được. đơn giản mà phải không

          Comment

          • nguyennam8888
            Đệ tử 3 túi
            • Dec 2008
            • 50

            #35
            em hiểu rồi, nhưng nếu với nhiều hàng thì em có thể đổi mảng data từ mảng một chiều sang mảng hai chiều cũng được phải không, như thế có ổn không anh

            Comment

            • tungtot_vl
              Đệ tử 6 túi
              • Jul 2007
              • 154

              #36
              toàn bộ font tôi điều dùng mãng 1 chiều cả
              ví dụ chữ A chiếu 8 byte đầu tiên, chữ B chiếm 8 byte tiếp theo.. trong một mãng.
              còn các màn hình hiển thị sẽ chia làm 8 mãng, mỗi mãng lá 1 hàng.
              ta chỉ cần lấy data từ font lần lượt cho vào các mãng.
              để lấy chữ A ta lấy: mang1[0] = font[0]; mang2[0] = font[1];.. mang8[0] = font[7]; như vậy ta đã lấy chữ A trong font ra để hiển thị trên màn hình và khi đó dùng các lệnh dịch trên để dịch các mãng 1-8 thì chữ A sẽ dịch qua. Do đó trong mãng font bạn có thể chứa bao nhiêu ký tự đã mã hóa sẳn vẫn được, chỉ cần dùng ký tự nào là ta tìm đến vị trí của ký tự đó để lấy nó ra.
              Last edited by tungtot_vl; 14-01-2009, 05:29 PM. Lý do: sai

              Comment

              • nguyennam8888
                Đệ tử 3 túi
                • Dec 2008
                • 50

                #37
                Nguyên văn bởi tungtot_vl View Post
                toàn bộ font tôi điều dùng mãng 1 chiều cả
                ví dụ chữ A chiếu 8 byte đầu tiên, chữ B chiếm 8 byte tiếp theo.. trong một mãng.
                còn các màn hình hiển thị sẽ chia làm 8 mãng, mỗi mãng lá 1 hàng.
                ta chỉ cần lấy data từ font lần lượt cho vào các mãng.
                để lấy chữ A ta lấy: mang1[0] = font[0]; mang2[0] = font[1];.. mang8[0] = font[7]; như vậy ta đã lấy chữ A trong font ra để hiển thị trên màn hình và khi đó dùng các lệnh dịch trên để dịch các mãng 1-8 thì chữ A sẽ dịch qua. Do đó trong mãng font bạn có thể chứa bao nhiêu ký tự đã mã hóa sẳn vẫn được, chỉ cần dùng ký tự nào là ta tìm đến vị trí của ký tự đó để lấy nó ra.
                rotate_left(mang1[0], 1);
                sao nó lại báo lỗi hả anh, báo ở chỗ số 1 ấy

                Comment

                • nguyennam8888
                  Đệ tử 3 túi
                  • Dec 2008
                  • 50

                  #38
                  Nguyên văn bởi longtu View Post
                  buff_mh[BITMAP_HEIGHT_BYTE][BITMAP_WIDTH_BIT] :mình coi ma trận led là màn hình Leds, thì đây chính là bộ đệm màn hình Leds(buffer_manhinh) đó, khi mình thay đổi dữ liệu trên bộ đệm này tức là mình đã thay đổi sự hiện thị trên màn hình Leds. Ban tìm hiểu thêm về mảng trong C nhé.

                  pt=&buff_mh[0][0];//Đây là cách lấy điạ chỉ cho con trỏ. Bạn tìm hiểu thêm về con trỏ trong C nhé.

                  Thân,
                  j=(y/6*BITMAP_WIDTH_BIT+x);cái hàng này em không hiểu

                  Comment

                  • nguyennam8888
                    Đệ tử 3 túi
                    • Dec 2008
                    • 50

                    #39
                    bác lại giúp em nha, chương trình em viết giống gợi ý mà vẫn không ổn
                    Attached Files

                    Comment

                    • tungtot_vl
                      Đệ tử 6 túi
                      • Jul 2007
                      • 154

                      #40
                      lmd

                      Nguyên văn bởi nguyennam8888 View Post
                      rotate_left(mang1[0], 1);
                      sao nó lại báo lỗi hả anh, báo ở chỗ số 1 ấy
                      nên viết là: rotate_left(mang1, 1);

                      Comment

                      • longtu
                        Đệ tử 6 túi
                        • Jul 2007
                        • 146

                        #41
                        Nguyên văn bởi nguyennam8888 View Post
                        j=(y/6*BITMAP_WIDTH_BIT+x);cái hàng này em không hiểu
                        Tôi giả xử bạn có màn hình led là 16x16, khii đó bạn khai báo Buff_mh như sau:
                        #define BITMAP_HEIGHT_BYTE] 2
                        #define BITMAP_WIDTH_BIT 16
                        unsigned char buff_mh[BITMAP_HEIGHT_BYTE][BITMAP_WIDTH_BIT]
                        ...
                        Bây giờ giả xử bạn chọn tọa độ (0,0) là điểm led tại góc trái-phía duoi màn hình led. Bây giờ bạn muốn điểm có tọa độ là (0,0) sáng lên, ban chỉ cần goi hàm point(0,0);

                        void point(int8 x,int8 y)
                        {
                        unsigned char *pt;
                        int8 mask=0b00000001;
                        int16 j;
                        mask = mask << (y%8);//xác định vi tri y:
                        pt=&buff_mh[0][0];
                        j=(y/8*BITMAP_WIDTH_BIT+x);//xác dinh vi tri x
                        pt+=j;
                        *pt|= mask;
                        }

                        Xin loi các bạn, doan code nay hom truoc mình viet nhầm hàng này:
                        j=(y/8*BITMAP_WIDTH_BIT+x);//chia cho 8 chứ khong phai chia 6

                        Thân,

                        Comment

                        • nguyennam8888
                          Đệ tử 3 túi
                          • Dec 2008
                          • 50

                          #42
                          Nguyên văn bởi tungtot_vl View Post
                          toàn bộ font tôi điều dùng mãng 1 chiều cả
                          ví dụ chữ A chiếu 8 byte đầu tiên, chữ B chiếm 8 byte tiếp theo.. trong một mãng.
                          còn các màn hình hiển thị sẽ chia làm 8 mãng, mỗi mãng lá 1 hàng.
                          ta chỉ cần lấy data từ font lần lượt cho vào các mãng.
                          để lấy chữ A ta lấy: mang1[0] = font[0]; mang2[0] = font[1];.. mang8[0] = font[7]; như vậy ta đã lấy chữ A trong font ra để hiển thị trên màn hình và khi đó dùng các lệnh dịch trên để dịch các mãng 1-8 thì chữ A sẽ dịch qua. Do đó trong mãng font bạn có thể chứa bao nhiêu ký tự đã mã hóa sẳn vẫn được, chỉ cần dùng ký tự nào là ta tìm đến vị trí của ký tự đó để lấy nó ra.
                          bác có thể viết mẫu cho em được không, phần cứng mô phỏng trong Protus em gửi ở trên ấy, cảm ơn bác

                          Comment

                          • tungtot_vl
                            Đệ tử 6 túi
                            • Jul 2007
                            • 154

                            #43
                            lmd

                            Nguyên văn bởi nguyennam8888 View Post
                            bác có thể viết mẫu cho em được không, phần cứng mô phỏng trong Protus em gửi ở trên ấy, cảm ơn bác
                            lần này tôi phá giới nhé. lần sau chắc ko rảnh đâu
                            chúc vui!
                            Attached Files

                            Comment

                            • nguyennam8888
                              Đệ tử 3 túi
                              • Dec 2008
                              • 50

                              #44
                              Nguyên văn bởi tungtot_vl View Post
                              lần này tôi phá giới nhé. lần sau chắc ko rảnh đâu
                              chúc vui!
                              bác cho em font.c luôn nha, font chữ của bac đẹp quá

                              Comment

                              • tungtot_vl
                                Đệ tử 6 túi
                                • Jul 2007
                                • 154

                                #45
                                lmd

                                Nguyên văn bởi nguyennam8888 View Post
                                bác cho em font.c luôn nha, font chữ của bac đẹp quá
                                bac nay duoc voi dòi tiên nhi. tôi chi có font 16 bác lấy về loc ra font 8 nhé.
                                font này mã hóa ngươc với font trong bài tôi làm cho bác. bác muốn dùng được nó thì có 2 cách:
                                1: đổi font ngược lại
                                2: đổi hàm display() ở các hàm output_hight(data); thành output_low(data); và output_low(data); thành output_hight(data);. còn trong hàm rotate thì đổi số 0 thành số 1
                                Attached Files

                                Comment

                                Working...