Thông báo

Collapse
No announcement yet.

Ai đã thất bại trong việc làm led matrix ....

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

  • có ai viết chương trình bằng vi điều khiển chỉ mình với.cach chay chữ bằng atmega32.thank

    Comment


    • Nguyên văn bởi toandtvt Xem bài viết
      Em làm thử 1 mạch led ma trận 8x64, dùng 74138 quét 8 hàng và 595 xuất cột. Nhưng phần quét em làm ko được nên nó chẳng xuất ra chữ gì cả.

      Giúp em sửa lại code để xuất ký tự và dịch qua trái phải với...



      #include <16F877A.h>
      #include <def_877a.h>
      #FUSES NOWDT, HS, NOPUT,NOBROWNOUT, NOLVP, NOCPD,NOWRT, NODEBUG, NOPROTECT
      #use delay(clock=20000000)

      #bit clk = 0x06.1 //RB1
      #bit latch = 0x06.2 //RB2
      #bit data = 0x06.3 //RB3

      const unsigned char chuoi[8]= {
      0x01, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
      };

      void send_2_595(int8 temp) {
      #bit flag_bit = temp.7 // bien temp la du lieu 8-bit can gui
      int8 i;

      for(i=0;i<8;i++)
      {
      if(flag_bit)
      data=1; //bit 1
      else data=0; //bit 0
      clk=1;
      clk=0;
      temp<<1; // Dich trai 1 bit
      }
      latch=1;
      latch=0; //Chot du lieu
      }

      void hien_thi()
      {
      int8 i,j;
      for(i=0;i<8;i++)
      {

      send_2_595(chuoi[i]);

      PORTD = i;
      delay_ms(1);
      send_2_595(0xff);

      }

      }

      void main()
      {
      int8 i,j;
      TRISB = 0x00;
      TRISD = 0x00;
      //clk =1;
      // latch =1;

      while(1)
      {
      hien_thi();
      }
      }
      Nhìn qua đoạn code của bạn tui có ý kiến thía này :
      - Chưa hiểu bạn đã hiểu và phân biệt được quét hàng và quét cột khác nhau như thế nào chưa và thực hiện quét như thế nào?
      - Bạn đã thử với 1 mâtrix ok chưa? (cứ từ từ rùi khoai sẽ nhừ, đừng có mà đi tắt nhanh quá)
      - Dữ liệu tạo theo hàng và theo cột khác nhau đấy, bạn xem lại đi,bạn quét hàng 8x64 mà có mỗi 8 hex dữ liệu
      - Bạn lưu ý sườn lên của các chân 595 thì nó mới hoạt động như mong đợi, bạn xem lại cách hoạt động 595
      - con pic877a có spi cứng đó, nếu bạn sử dụng nó sẽ cải thiện được tốc độ có thể được 5 Mbits/s
      Có gì ko hiếu thì lại pót lên nhá!
      Cứ làm từ từ đi, thế mới hiểu kỹ được!
      chúc thành công!

      Comment


      • sau khi đọc 2 topic về quang báo, mình thấy mông lung quá
        http://www.dientuvietnam.net/forums/...909#post311909
        thì mình muốn hỏi
        topic theo link trên sử dụng AVR để điều khiển ma trận led theo kiểu quét cột
        mà topic này sử dụng 89cxx thì khuyên nên sử dụng quét hàng để có thể mở rộng ma trận ???
        và sử dụng AVR họ có thể mở rộng thành bảng dài cả mấy met rất đơn giản
        liệu sử dụng 89C có thể mở rộng bảng ma trận được vậy không?
        |

        Comment


        • Nguyên văn bởi COLE Xem bài viết
          to: hoangphat
          - mình đã thử chạy file 16x128 CHAY NGANG thì thấy khi chữ chạy qua thì có 1 sọc đen 1 hàng cứ chạy từ dưới lên, không biết khi ráp mạch thực tế thì chữ có bị sọc đen như vậy không?
          - mình không thấy file mạch in của mạch 16x128, post lên hoạc mình chưa biết sử dụng Protues, nên hướng dẫn mình lấy mạch in đi
          - nếu còn mạch dư không sử dụng thì cho biết giá để lại mình nha.
          - mạch này mình có thể gắn thêm thành 32x192 được không? vì mình muốn hiện chữ "chuc mung năm mới"
          thank topic hửu ích.
          tiếp tục dự án đi các bạn ơi
          nếu chạy có sọc ngang chữ thì do phâh mềm tạo font chưa đăng ký nên nó choi vậy chứ ct vẽ j thì chạy vậy ko thêm bớt j đâu
          mạch có thể mở rộng lên 32x128 (chưa ôn đinh nên chưa post dc)
          mạch thì em vẽ pác tự làm thôi chứ em ko dư cái nào còn thiều nhìu :d
          8051 là con em viết thành thạo. em sẵn sàng giúp đỡ các pác nếu em có thể
          liên lạc với em qua địa chi email: Mob: 01882.076.989

          Comment


          • mấy bác giúp với làm đèn ống trang trí này như thế nào vậy. em rất mong mấy bác giúp đỡ
            http://www.mediafire.com/?gc43gpz8usogp2p

            Comment


            • chọn vdk là do người dùng, làm
              thực ra con 89S/C ko thể so sánh với AVR và PIC (về tốc độ,hỗ trợ rom ,ADC , các chức năng khác rất lý tưởng cho matrix)
              nếu pác xác định theo lĩnh vuvj này để phát triển thành sản phẩm thì nên theo AVR và PIC khỏi chê hỗ trợ tỷ lệ thuận với giá
              em nhớ có pác nói nếu tích học đầy đủ cho 1 mạch CPU (rom,ADC..)cho 89S/C thì giá cũng ngang PIC và AVR (em thấy rẻ hơn )
              nhưng 89S/C bít cách dùng thì ko thua 2 con kia đâu (thêm ram để xử lý nhanh ,rom 24cxx mở rọng bộ nhớ,ds1307 để chạy ngày giờ và ADC để đo nhiệt )
              89S/C dùng cho SV ngâm cứu nên giá rẻ và mục đích lớn nhất cũng là bảng 16x64 để làm đồ án còn có pác làm lớn hơn để tặng gia đình,treo trong nhà 1 phân nhỏ để kinh doanh(cái này em ko mun đụng chạm nhưng chắc chắn sẽ có)
              chính vì lý do đó em đặt ra giới hạn để phụ hợp với ý nghĩ trên
              16x128 cũng ok rồi nhưng ngược lại ko bán dc vì hịu úng chưa có và giao tiếp pc
              các pác đã ngâm cứu ai cũng bít 2 cái này khó nhất ko kém quét
              em cũng ko mun mất lòng nên chỉ để các pác ngâm cứu để phát triển ok hơn chứ nói ra mà chưa làm dc thì tiu :d
              nhưng các pác thật sự theo topic này thì sẽ có lúc em hé lộ 1 gốc nhỏ của PROJECT LED MATRIX DISPLAY giao tiếp PC như mục đích lập topic lúc đầu (em thành cong cho bảng nhỏ 8x64)
              thứ nhất để các pác khỏi ỷ y là có sẵn chỉ làm theo nọp bài ko mất chút sức nào (ngược lại ko hỉu j hết và em là người bị thiệt thòi ) suốt time em lập topic mong các pác vui vẻ thao luận hợp tác cũng ngâm cứu để hoàn thành nhưng ko dc cuois cụng chỉ còn 1 mình (như ko rồi)em ngâm cứu 1 mình để chia sẻ nhưng ko ai theo em thậm chí ko quan tâm topic này nữa em chia sẻ cái riêng em chứ ko phải của chung (thiệt thòi chưa)
              để lấy lại lửa em phải post bài tâm huyết 16x128 để topic sôi nổi hơn nhưng ko dc
              đó là lời nói chân thành nhé đừng ai bắt bẻ hay trách móc trong topic ra yahoo gặp em nc để tránh loãng luồng
              em sẽ phát triển trên 8x64 để các pác cùng ngâm cứu còn ai mun làm hơn thì tính sau
              các pác cao thủ ra tay dc thì giúp em lun
              thanks các pác mong topic hữu ích
              8051 là con em viết thành thạo. em sẵn sàng giúp đỡ các pác nếu em có thể
              liên lạc với em qua địa chi email: Mob: 01882.076.989

              Comment


              • bác nào cần file mach in cho mach hiện thị 16 hàng dùng matrix 2 màu thì gửi mail cho mình mình share cho, mạch 1 lớp nên nối dây hơi nhiều nhưng có thể làm thủ công rất tiết kiệm đối với sv .

                Comment


                • Nguyên văn bởi hoangphat Xem bài viết
                  nếu chạy có sọc ngang chữ thì do phâh mềm tạo font chưa đăng ký nên nó choi vậy chứ ct vẽ j thì chạy vậy ko thêm bớt j đâu
                  mạch có thể mở rộng lên 32x128 (chưa ôn đinh nên chưa post dc)
                  mạch thì em vẽ pác tự làm thôi chứ em ko dư cái nào còn thiều nhìu :d
                  ùm cám ơn nhé
                  vì đang theo 89c để điều khiển led nên muốn theo cho rành trước khi sử dụng pic hay avr
                  không khéo tẩu hỏa nhậm ma, đang dành tiền mua linh kiện về ráp nên chưa thử thực tế chỉ tham khảo qua topic và tìm hiểu về 89c nên khi thực tế sẽ cần bạn giúp nhiều.
                  thanks
                  Last edited by COLE; 05-12-2010, 20:12.
                  |

                  Comment


                  • Mình làm được hiển thị chữ trên led ma trận rồi,dùng pp quét hàng; nhưng phần dịch chữ trái phải vẫn chưa làm được. Mình dùng phương pháp ghép (byte1 >>1)|(byte2<<7).... nhưng vẫn ko được. Ai làm được thì post giải thuật hoặc code C cho mình tham khảo với. Thank!!!

                    Comment


                    • hay lắm đó cho e tham gia với liên lạc với e nha ... chanlytinhyeu1309@yahoo.com

                      Comment


                      • Nguyên văn bởi danh Xem bài viết
                        gửi hoangphat, mình dùng Reads-51, MSC-51IDE, VIETNAM 8051, ASEM ... các chương trình này mình dùng và dịch thử các file ASM led matrix 16x64 rất tốt nhưng chỉ có file ASM 16x128 của bạn là các chương trình này báo rất nhiều lỗi ở phần code data và không dịch được, không biết mấy pác khác có dịch thử file ASM của bạn hoangphat chưa hay chỉ dùng file HEX của bạn hoangphat để mô phỏng thôi.
                        Bạn hoangphat ơi sao các chương trình của bạn (http://my.opera.com/Phankeyelectronic/links/) mình không download được mong bạn hướng dẫn nếu không thể công khai ở đây thì bạn gửi vào mail cho mình danh2304@yahoo.com.
                        mình nghĩ không phải riêng mình mà tất cả mọi người vào đây đều muốn nói lời cảm ơn bạn rất nhiều vì chủ đề của bạn mở ra giúp cho rất nhiều người đam mê lĩnh vực này nhưng không có điều kiện được trao đổi học hỏi thêm rất nhiều, rất tiếc là mình vẫn chưa dịch đc và làm thử, một lần nữa "thanhkiu vina miêu"
                        mình cũng không dịch đc bạn ơi, mình sử dụng Pinnacle:


                        báo lỗi như vầy

                        còn khi sử dụng Prog-studio thì như vầy:







                        click ok là chương trình bị out.

                        mong các bạn hướng dẫn khúc này, đề tiếp tục project
                        Last edited by COLE; 09-12-2010, 21:40.
                        |

                        Comment


                        • Mình là dân ham chơi với led matrix và đã đọc 27 trang không thiếu trang nào nhưng và thấy rất cảm ơn người mở ra topic này nhưng thấy đây là topic danh cho những anh em asm nên không co ý kiến gì nhưng thấy bác hoang dai nói bảo nhìn asm toét mắt nên em có ý kiến đấy là ngôn ngữ của mỗi người. Bác đã làm 8515 thì post nên cho anh em xem đi. Minh cung mới chuyển sang avr nên cũng mông lung lắm. Mình làm cái Led matrix 16*64 nhưng la mua modul. Có mạch đầy đủ nhưng mình ko biết up lên đây kiểu gì copy tạm cái code cho mọi người xem và góp ý.Đang tập viết cái giao tiếp với PC mà khó quá.
                          #include <mega32.h>
                          #include <delay.h>
                          // SPI functions
                          #include <spi.h>
                          #define SCK PORTB.7 //Chan cap xung de dua data vào trong thanh ghi dich
                          #define DATA PORTB.5 //Chan dua data vào thanh ghi dich
                          #define SCL PORTB.3 //Khi data da vào trong thanh ghi dich, dua mot xung ra chân này de dua data tu thanh ghi dich ra các chân cua IC74HC595
                          //Bon chân sau day dieu khien viec cap nguon ra các hàng cua led ma tran

                          #define A PORTC.0;
                          #define B PORTC.1;
                          #define OE1 PORTC.3;
                          unsigned char r=0;
                          unsigned char i,k;
                          unsigned char flash VN[]={0 ,231,255,231,0 ,156,128,156,0 ,3 ,131,19 ,0 ,14,15,14,0 ,6,6,6,0 ,231,224,231,128,64,15 ,240,3 ,60 ,240,15,
                          231,231,231,231,240,128,128,152,240,3 ,131,49 ,207,14,14,14,63,6,6,6,60 ,224,224,102,192,4 ,30 ,224,7 ,120,120 ,7 ,
                          231,231,231,231,152,128,128,240,49 ,131,3 ,240,206,14,14,15,63,6,6,6,102,224,224,60 ,224,14,60 ,192,15,240,60 ,3 ,
                          231,255,231,0 ,156,128,156,0 ,19 ,131,3 ,0 ,78 ,15,14,0 ,38,6,6,0,231,224,231,0 ,224,31,120,128,30,224,30 ,1 ,
                          };

                          unsigned char DMem[128];

                          /*void Data_in(unsigned char k)
                          { // k là bit du lieu vào có giá tri. là 0 hoac 1;
                          DATA=k; // DATA dua du lieu vào thanh ghi dich
                          SCK=0; // Tao ra mot xung o chân SCK
                          SCK=1;
                          }
                          */
                          void LatchData()
                          {
                          SCL=0; // Sau khi dua du du lieu vào các thanh ghi dich
                          SCL=1; // Ta tao mot xung de dua du lieu tu thanh ghi dich ra các chân cua 74HC595
                          }
                          // Timer 1 output compare A interrupt service routine
                          interrupt [TIM1_COMPA] void timer1_compa_isr(void)
                          {

                          spi(DMem[r*32+31]);
                          spi(DMem[r*32+30]);
                          spi(DMem[r*32+29]);
                          spi(DMem[r*32+28]);
                          spi(DMem[r*32+27]);
                          spi(DMem[r*32+26]);
                          spi(DMem[r*32+25]);
                          spi(DMem[r*32+24]);
                          spi(DMem[r*32+23]);
                          spi(DMem[r*32+22]);
                          spi(DMem[r*32+21]);
                          spi(DMem[r*32+20]);
                          spi(DMem[r*32+19]);
                          spi(DMem[r*32+18]);
                          spi(DMem[r*32+17]);
                          spi(DMem[r*32+16]);
                          spi(DMem[r*32+15]);
                          spi(DMem[r*32+14]);
                          spi(DMem[r*32+13]);
                          spi(DMem[r*32+12]);
                          spi(DMem[r*32+11]);
                          spi(DMem[r*32+10]);
                          spi(DMem[r*32+9]);
                          spi(DMem[r*32+8]);
                          spi(DMem[r*32+7]);
                          spi(DMem[r*32+6]);
                          spi(DMem[r*32+5]);
                          spi(DMem[r*32+4]);
                          spi(DMem[r*32+3]);
                          spi(DMem[r*32+2]);
                          spi(DMem[r*32+1]);
                          spi(DMem[r*32]); //Byte 0
                          LatchData();
                          PORTC=r+8;
                          r++;
                          if (r==4) r=0;

                          }
                          #define RXB8 1
                          #define TXB8 0
                          #define UPE 2
                          #define OVR 3
                          #define FE 4
                          #define UDRE 5
                          #define RXC 7

                          #define FRAMING_ERROR (1<<FE)
                          #define PARITY_ERROR (1<<UPE)
                          #define DATA_OVERRUN (1<<OVR)
                          #define DATA_REGISTER_EMPTY (1<<UDRE)
                          #define RX_COMPLETE (1<<RXC)

                          // USART Receiver buffer
                          #define RX_BUFFER_SIZE 128
                          char rx_buffer[RX_BUFFER_SIZE];

                          #if RX_BUFFER_SIZE<256
                          unsigned char rx_wr_index,rx_rd_index,rx_counter;
                          #else
                          unsigned int rx_wr_index,rx_rd_index,rx_counter;
                          #endif

                          // This flag is set on USART Receiver buffer overflow
                          bit rx_buffer_overflow;

                          // USART Receiver interrupt service routine
                          interrupt [USART_RXC] void usart_rx_isr(void)
                          {
                          char status,data;
                          status=UCSRA;
                          data=UDR;
                          if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
                          {
                          rx_buffer[rx_wr_index]=data;
                          if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
                          if (++rx_counter == RX_BUFFER_SIZE)
                          {
                          rx_counter=0;
                          rx_buffer_overflow=1;
                          };
                          };
                          }

                          #ifndef _DEBUG_TERMINAL_IO_
                          // Get a character from the USART Receiver buffer
                          #define _ALTERNATE_GETCHAR_
                          #pragma used+
                          char getchar(void)
                          {
                          char data;
                          while (rx_counter==0);

                          data=rx_buffer[rx_rd_index];
                          if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
                          #asm("cli")
                          --rx_counter;
                          #asm("sei")
                          return data;
                          }
                          #pragma used-
                          #endif

                          void main(void)
                          {
                          SCK=1;
                          SCL=1;

                          // Input/Output Ports initialization
                          // Port A initialization
                          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                          PORTA=0x00;
                          DDRA=0x00;

                          // Port B initialization
                          // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
                          // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
                          PORTB=0xFF;
                          DDRB=0xFF;

                          // Port C initialization
                          // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
                          // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
                          PORTC=0x00;
                          DDRC=0xFF;

                          // Port D initialization
                          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                          PORTD=0x00;
                          DDRD=0x00;

                          // Timer/Counter 0 initialization
                          // Clock source: System Clock
                          // Clock value: Timer 0 Stopped
                          // Mode: Normal top=FFh
                          // OC0 output: Disconnected
                          TCCR0=0x00;
                          TCNT0=0x00;
                          OCR0=0x00;

                          // Timer/Counter 1 initialization
                          // Clock source: System Clock
                          // Clock value: 15.625 kHz
                          // Mode: CTC top=OCR1A
                          // OC1A output: Discon.
                          // OC1B output: Discon.
                          // Noise Canceler: Off
                          // Input Capture on Falling Edge
                          // Timer 1 Overflow Interrupt: Off
                          // Input Capture Interrupt: Off
                          // Compare A Match Interrupt: On
                          // Compare B Match Interrupt: Off
                          TCCR1A=0x00;
                          TCCR1B=0x0D;
                          TCNT1H=0x00;
                          TCNT1L=0x00;
                          ICR1H=0x00;
                          ICR1L=0x00;
                          OCR1AH=0x00;
                          OCR1AL=0x25;
                          OCR1BH=0x00;
                          OCR1BL=0x00;

                          // Timer/Counter 2 initialization
                          // Clock source: System Clock
                          // Clock value: Timer 2 Stopped
                          // Mode: Normal top=FFh
                          // OC2 output: Disconnected
                          ASSR=0x00;
                          TCCR2=0x00;
                          TCNT2=0x00;
                          OCR2=0x00;

                          // External Interrupt(s) initialization
                          // INT0: Off
                          // INT1: Off
                          // INT2: Off
                          MCUCR=0x00;
                          MCUCSR=0x00;

                          // Timer(s)/Counter(s) Interrupt(s) initialization
                          TIMSK=0x10;

                          // Analog Comparator initialization
                          // Analog Comparator: Off
                          // Analog Comparator Input Capture by Timer/Counter 1: Off
                          ACSR=0x80;
                          SFIOR=0x00;
                          // USART initialization
                          // Communication Parameters: 8 Data, 1 Stop, No Parity
                          // USART Receiver: On
                          // USART Transmitter: On
                          // USART Mode: Asynchronous
                          // USART Baud Rate: 9600
                          UCSRA=0x00;
                          UCSRB=0x18;
                          UCSRC=0x86;
                          UBRRH=0x00;
                          UBRRL=0x67;

                          // SPI initialization
                          // SPI Type: Master
                          // SPI Clock Rate: 4000.000 kHz
                          // SPI Clock Phase: Cycle Half
                          // SPI Clock Polarity: Low
                          // SPI Data Order: MSB First
                          SPCR=0x50;
                          SPSR=0x00;

                          // Global enable interrupts
                          #asm("sei")
                          for (i=0;i<=127;i++)
                          {

                          DMem[i]=~VN[i];
                          }

                          while (1)
                          {
                          k=getchar();
                          }
                          }

                          Comment


                          • Bác cho lun cái sơ đồ nguyên lý lun đi!lập trình phải theo mạch chứ!thanks bác trước!

                            Comment


                            • Nguyên văn bởi COLE Xem bài viết
                              mình cũng không dịch đc bạn ơi, mình sử dụng Pinnacle:


                              báo lỗi như vầy

                              còn khi sử dụng Prog-studio thì như vầy:







                              click ok là chương trình bị out.

                              mong các bạn hướng dẫn khúc này, đề tiếp tục project
                              reply pác nhá
                              em chụp lại quy trình code và dịch pác xem kĩ nhé
                              Click image for larger version

Name:	01.jpg
Views:	1
Size:	112.2 KB
ID:	1346010
                              nhấn nut dịch dc cái này
                              Click image for larger version

Name:	1.jpg
Views:	1
Size:	190.0 KB
ID:	1346004
                              Click image for larger version

Name:	03.JPG
Views:	1
Size:	65.2 KB
ID:	1346007
                              Click image for larger version

Name:	04.JPG
Views:	1
Size:	103.2 KB
ID:	1346005
                              Click image for larger version

Name:	05.jpg
Views:	1
Size:	55.8 KB
ID:	1346006
                              save đâu vào đó lấy file ra mà chạy mạch
                              GOOD LUCK!!!!
                              8051 là con em viết thành thạo. em sẵn sàng giúp đỡ các pác nếu em có thể
                              liên lạc với em qua địa chi email: Mob: 01882.076.989

                              Comment


                              • while(1)
                                {

                                for(k=0;k<8;k++){
                                dmem[k][0]dmem[k][0])<<1)|((dmem[k][1])>>7);
                                dmem[k][1]dmem[k][1])<<1)|((dmem[k][2])>>7);
                                dmem[k][2]dmem[k][2])<<1)|((dmem[k][3])>>7);
                                dmem[k][3]dmem[k][3])<<1)|((dmem[k][4])>>7);
                                dmem[k][4]dmem[k][4])<<1)|((dmem[k][5])>>7);
                                dmem[k][5]dmem[k][5])<<1)|((dmem[k][6])>>7);
                                dmem[k][6]dmem[k][6])<<1);
                                }

                                delay_ms(100);
                                _______________________

                                Có ai giúp mình cái code dịch chữ từ phải sang trái với, mình muốn nó dịch hết màn hình rồi chạy tiếp lần 2,lần 3,...Nhưng mình làm nó chỉ dịch được 1 lần rồi im luôn...Chán quá.

                                Comment

                                Về tác giả

                                Collapse

                                hoangphat đam mê về ngành điện tử Tìm hiểu thêm về hoangphat

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

                                Collapse

                                Đang tải...
                                X