PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp USB, CAN, I2C, SPI, USART...

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 21-06-2008, 04:08 AM   #1
cuong86vt
Đệ tử 1 túi
 
Tham gia ngày: Jul 2007
Bài gửi: 22
:
Làm một cái đồng hồ điện tử mini thời gian thực với LCD

Sau đây mình xin post một loại bài nói về một ứng dụng của chức năng giao tiếp I2C kết hợp với IC đếm thời gian thực DS1307 để làm một cái đồng hồ mini (nói là cái đồng hồ mini cho hay thôi chứ làm 1 cái ứng dụng modun nhỏ cũng được) hiển thị thứ, ngày, tháng, năm, giờ, phút và giây. Cái hay khi ta làm đồng hồ đếm thời gian thực (chắc các bạn cũng đã biết) đó chính là bạn có thể biết thời gian hiện tại chính xác là bao nhiêu cho dù bạn ko bật nguồn cho cái đồng hồ này chạy (vì IC đếm thời gian thực luôn luôn chạy bằng cục PIN như đồng hồ điện tử casio vậy).
Mong các bạn ủng hộ theo dõi và góp ý để cùng nhau chúng ta làm cho cái đồng hồ này PRO hơn nhé !

thay đổi nội dung bởi: cuong86vt, 21-06-2008 lúc 06:23 AM.
cuong86vt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-06-2008, 04:13 AM   #2
cuong86vt
Đệ tử 1 túi
 
Tham gia ngày: Jul 2007
Bài gửi: 22
:
Linh kiện mình cần làm cho một cái đồng hồ cũng ko nhiều: (mình đã làm thật 1 cái chạy được nhưng các bạn có thể dùng ít lk hơn mình tùy bạn).

Trước hết mình xin post sơ đồ mạch nguyên lý cái đồng hồ này để các bạn hình dung ra trước cái đồng hồ này cần tối thiểu những gì, sau đó mình sẽ post code và cố gẳng dẫn giải thật chi tiết để các bạn hiểu và làm có thể làm 1 cái đồng hồ khác tốt hơn của mình nhiều...
Hình Kèm Theo
File Type: jpg GIAOTIEP DS1307.JPG (90.3 KB, 572 lần tải)

thay đổi nội dung bởi: cuong86vt, 21-06-2008 lúc 06:43 AM.
cuong86vt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-06-2008, 04:24 AM   #3
cuong86vt
Đệ tử 1 túi
 
Tham gia ngày: Jul 2007
Bài gửi: 22
:
Còn đây là hình mô phỏng bằng Proteus khi đồng hồ chạy...
Mô phỏng Proteus chỉ có một chỗ thiếu sót là cái LCD LM016L này chỉ hiển thị được dòng 1 thôi vì mình chưa sữa lại địa chỉ cho nó, nhưng ko sao vì cái mạch thật mình đã làm hoàn toàn đúng và hình proteus chỉ có 1 nút nhấn ngắt ngoài, mình sẽ giải thích sau...
Hình Kèm Theo
File Type: jpg GIAO TIEP DS1307 - PROTEUS.JPG (109.5 KB, 383 lần tải)
cuong86vt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-06-2008, 04:57 AM   #4
cuong86vt
Đệ tử 1 túi
 
Tham gia ngày: Jul 2007
Bài gửi: 22
:
Để viết ct cho mạch, ta cần hiểu một chút về lý thuyết:

Mạch trên là sử dụng chức năng giao tiếp I2C của vdk, trong đó con PIC là MASTER, còn DS1307 là SLAVE, là loại IC đếm thời gian thực đời mới hỗ trợ phần cứng chỉ với 8 chân so với các loại DS khác trước đây thường dùng (vd như DS12887 có tới và khó điều khiển...), nhưng bù lại viết ct cho con này khá phức tạp một chút, thế nên giá của nó bán ở Thật Tảo mình mua là 35k!

Về phần cứng, khi ta gắn pin lithium 3V vào cho nó và 1 thạch anh 32.768KHz thôi là tự bản thân nó đã "đếm thời gian" thực vĩnh viễn rồi.

Bên trong ds1307 có 8 thanh ghi, trong đó có 7 thanh ghi tương ứng mỗi thanh ghi mang 1 giá trị lần lượt là: phút, giây, giờ, thứ, ngày, tháng, năm, ta có truy xuất, tức là ghi vào và đọc ra các giá trị này.
Cụ thể: ta cần GHI một giá trị ban đầu hiển thị lên màn hình LCD là: thứ 7. ngày 21-tháng 6-2008; và 03:25:00 AM chẳng hạn. Sau đó ta cần ĐỌC giá trị nhận được từ ds1307 cũng để hiển thị lên LCD để biết thời gian hiện tại là bao nhiêu tai bất cứ thời điểm nào ta cần (vì bản thân ds1307 sau mỗi giây nó sẽ tăng lên 1 giá trị từ 7 thanh ghi này và truyền giá trị đó về).
Và một thanh ghi thứ 8 để điều khiển bộ nhớ dữ liệu chứa các giá trị ngày, giờ...
Các bạn có thể tham khảo Datasheet của DS1307 tại đây, viết rất dễ hiểu...
Hình Kèm Theo
File Type: jpg thanh ghi ds1307.JPG (73.2 KB, 184 lần tải)
File Kèm Theo
File Type: pdf DS1307.pdf (856.4 KB, 1646 lần tải)
cuong86vt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-06-2008, 05:23 AM   #5
cuong86vt
Đệ tử 1 túi
 
Tham gia ngày: Jul 2007
Bài gửi: 22
:
ds1307 này có 3 chế độ tạo xung ở ngõ ra ở chân số 7 FT/OUT với 3 mức xung:
1Hz
4.096kHz
8.192kHz
32.768kHz
cho nên ta cần một con thạch anh 32.768kHz (bé gần bằng 1 con điện trở), trong sơ đồ mạch của mình nối 1 con led ở chân FT/OUT này để nó tạo xung nhấp nháy đúng 1s.

Việc đọc ghi giá trị từ ds1307 chỉ có một cái khó đó là việc chuyển đổi dữ liệu ở 2 mã BIN và BCD qua lại với nhau giữa con PIC6F877A (MASTER) và DS1307 (SLAVE) trên 2 đường BUS I2C là SDA và SCL.

Cụ thể: Khi ta GHI giá trị ngày 15 vào ds1307 thì số 15 này sẽ bị đổi thành 0x15 ngay khi vào thanh khi ds1307 !. Còn khi ta muốn ĐỌC giá trị từ DS1307 gửi về thì ds gửi về giá trị ngày 15 là: 0x15 !, tức là PIC nhận được giá trị 0x15 = 21 !.

Vậy ta phải làm sao để có được công thức chuyển đổi dữ liệu giữa 2 mã BIN và BCD:
0xAB -> AB và AB -> 0xAB. Sau đây mình xin viết ra công thức chuyền đổi của mình: (các bạn có thể viết a bằng cách khác mình cũng được):

Đổi dữ liệu mã BCD -> BIN:

Code:
int write(int data)                  // MASTER -> DS1307.
   {                                 //      x -> y.
      int x,y;                       //vd:   7 -> 7  = 0x07.
      x = data;                      //vd:  12 -> 18 = 0x12.
      if(x<10)
         {
            y = x;
         }
      else if(x>=10)
         {
            y = (x/10 * 6) + x;            //vd:  29 -> 41 = 0x29.
         }
      return(y);                     //vd:  35 -> 53 = 0x35.
   }
Đổi dữ liệu mã BCD -> BIN:

Code:
int read(int data)
   {                                 // MASTER <- DS1307.
      int x,y,z;                     //      x <- y.
      y = data;                      //vd:   5 <-  5 = 0x05.
      i=0;                           //vd:  10 <- 16 = 0x10.
      if(y<10)                       //vd:  20 <- 32 = 0x20.
         {                           //vd:  30 <- 48 = 0x30.
            x = y;                   //vd:  40 <- 64 = 0x40.
            z = x;                   //vd:  50 <- 80 = 0x50.
         }                           //..... 
      else if(y>=10)
         {
            do {
                  x = y - (6 * i);        
                  z = (x/10 * 6) + x;
                  i++;
               }
           while(z!=y);
         }
      return(x);    
   }
Code đổi dữ liệu ở trên mình viết kiểu nội suy tam suất (hơi cùi bắp nhỉ !), nhưng mình đã thử lại kiểm chứng thấy đúng và dữ liệu hiển thị lên màn hình LCD là chính xác.
cuong86vt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-06-2008, 05:42 AM   #6
cuong86vt
Đệ tử 1 túi
 
Tham gia ngày: Jul 2007
Bài gửi: 22
:
Bây giờ mình xin được post toàn bộ code lập trình của mình lên đây, xin được các bạn tham khảo và góp ý...

Nội dung cần khởi tạo hiển thị lên LCD ban đầu:
Hàng 1 LCD: SATURDAY, 21-06-2008
Hàng 1 LCD: 02:25:00 AM
(Tức có nghĩa là thời điểm hiện tại ban đầu sẽ được cài đặt là như vậy (bằng nút nhấn ngắt ngoài RB0 trên mạch), sau khi set xong thời gian bắt đầu đếm, sau đó nếu bạn muốn xem giờ trên đồng hồ lúc này là bao nhiêu thì bật nguồn cho vdk chạy (gọi là bật đồng hồ), không muốn xem nữa thì tắt nguồn vdk (gọi là tắt đồng hồ), bạn sẽ thấy là thời gian tại bất cứ lúc nào chúng ta bất đồng hồ lên đều chính xác ý như đồng hồ thật vậy !

Code:
#include <16f877a.h>
#include <def_877a.h>
#use delay(clock = 20000000)
#fuses HS, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOPROTECT
#use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3, force_hw)
#include <lcd.c>

int8 second, minute, hour, date, day, month, year;
int16 year1;
int i;

/*------------ Chuyển dữ liệu mã BIN của MASTER -> dữ liệu mã BCD cho DS1307---------*/
int write(int data)                  // MASTER -> DS1307.
   {                                 //      x -> y.
      int x,y;                       //vd:   7 -> 7  = 0x07.
      x = data;                      //vd:  12 -> 18 = 0x12.
      if(x<10)
         {
            y = x;
         }
      else if(x>=10)
         {
            y = (x/10 * 6) + x;            //vd:  29 -> 41 = 0x29.
         }
      return(y);                     //vd:  35 -> 53 = 0x35.
   }
   
   
/*------------- Chuyển dữ liệu mã BCD của DS1307 -> dữ liệu mã BIN cho MASTER--------*/
int read(int data)
   {                                 // MASTER <- DS1307.
      int x,y,z;                     //      x <- y.
      y = data;                      //vd:   5 <-  5 = 0x05.
      i=0;                           //vd:  10 <- 16 = 0x10.
      if(y<10)                       //vd:  20 <- 32 = 0x20.
         {                           //vd:  30 <- 48 = 0x30.
            x = y;                   //vd:  40 <- 64 = 0x40.
            z = x;                   //vd:  50 <- 80 = 0x50.
         }                           //..... 
      else if(y>=10)
         {
            do {
                  x = y - (6 * i);        
                  z = (x/10 * 6) + x;
                  i++;
               }
           while(z!=y);
         }
      return(x);    
   }

#INT_EXT
void khoitao()              
   {           
      /*--------- khoi tao hien thi ban dau : SAT, 21-06-2008, 02:25:00 AM --------*/ 
      second = 0;                   //giay:  00.
      minute = 25;                   //phut:  25.
      hour   = 2;                   //gio:   02 (che do 24h).
      day    =  6;                   //thu 7:  SAT (SATUDAY).
      date   = 21;                   //ngay:  21. 
      month  =  6;                   //thang: 06. 
      year   =  8;                   //nam:   08.
      
      i2c_start();
      i2c_write(0xD0);               //den dia chi ds1307.
      i2c_write(0x00);               //den dia chi thanh ghi 00H.
      i2c_write(write(second));      
      i2c_write(write(minute));      
      i2c_write(write(hour));        
      i2c_write(write(day));         
      i2c_write(write(date));        
      i2c_write(write(month));       
      i2c_write(write(year));        
      i2c_start();
      i2c_write(0xD0);
      i2c_write(0x07);               //den thanh ghi dieu khien.
      i2c_write(0x10);               //tao xung vuong 1Hz.
      i2c_stop();
   }
   
void update_time()
   {
      i2c_start();
      i2c_write(0xD0);
      i2c_write(0x00);
      i2c_start();
      i2c_write(0xD1);
      second = read(i2c_read());
      minute = read(i2c_read());
      hour   = read(i2c_read());
      day    = read(i2c_read());
      date   = read(i2c_read());
      month  = read(i2c_read());
      year   = read(i2c_read(0));    
      i2c_stop();
   }
   
void hienthi_LCD()
   {
   
      /*--------------- Hàng 1 cua LCD : hien thi thu, ngay - thang - nam ------------*/ 
      
      lcd_gotoxy(1,1);
      //printf(lcd_putc,"%s",day);           //thu trong tuan.
      if(day==1)       lcd_putc("Mon");
      else if(day==2)  lcd_putc("Tue");
      else if(day==3)  lcd_putc("Wed");
      else if(day==4)  lcd_putc("Thu");
      else if(day==5)  lcd_putc("Fri");
      else if(day==6)  lcd_putc("Sat");
      else if(day==7)  lcd_putc("Sun");
                    
      lcd_gotoxy(4,1);
      lcd_putc(".");    
           
      lcd_gotoxy(6,1);
      if(date<10)
         {
            lcd_putc("0");
            lcd_gotoxy(7,1);
            printf(lcd_putc,"%d",date);            //ngay trong thang.
         }
      else if(date>=10)
         {
            printf(lcd_putc,"%d",date);            
         }
         
      lcd_gotoxy(8,1);                     
      lcd_putc("-");      
      
      lcd_gotoxy(9,1);
      //printf(lcd_putc,"%s",month);               //thang trong nam.
      if(month==1)       lcd_putc("Jan");
      else if(month==2)  lcd_putc("Feb");
      else if(month==3)  lcd_putc("Mar"); 
      else if(month==4)  lcd_putc("Apr");
      else if(month==5)  lcd_putc("May");
      else if(month==6)  lcd_putc("Jun");
      else if(month==7)  lcd_putc("Jul");
      else if(month==8)  lcd_putc("Aug");
      else if(month==9)  lcd_putc("Sep"); 
      else if(month==10) lcd_putc("Oct");
      else if(month==11) lcd_putc("Nov");
      else if(month==12) lcd_putc("Dec");
             
      lcd_gotoxy(12,1);
      lcd_putc("-");
      
      lcd_gotoxy(13,1);                        //nam.
      year1 = 2000 + year;
      printf(lcd_putc,"%ld",year1);            
      
      
      /*--------------- Hàng 2 cua LCD : hien thi gio : phut : giay ,AM/PM ------------*/
      
      lcd_gotoxy(6,2);                        //gio.  
      if(hour<10)
         {
            lcd_putc("0");
            lcd_gotoxy(7,2);
            printf(lcd_putc,"%d",hour);       
         }
      else if(hour>=10)
         {
            printf(lcd_putc,"%d",hour);            
         }
                  
      lcd_gotoxy(8,2);
      lcd_putc(":");
      
      lcd_gotoxy(9,2);                        //phut.  
      if(minute<10)
         {
            lcd_putc("0"); 
            lcd_gotoxy(10,2);
            printf(lcd_putc,"%d",minute);    
         }
      else if(minute>=10)
         {
            printf(lcd_putc,"%d",minute);   
         }
         
      lcd_gotoxy(11,2);
      lcd_putc(":");
      
      lcd_gotoxy(12,2);                     //giay.
      if(second<10)
         {
            lcd_putc("0"); 
            lcd_gotoxy(13,2);
            printf(lcd_putc,"%d",second);    
         }
      else if(second>=10)
         {
            printf(lcd_putc,"%d",second);   
         }
        
      lcd_gotoxy(15,2);
      lcd_putc("AM");               
   }
   
void main()
   {
      enable_interrupts(GLOBAL);
      enable_interrupts(INT_EXT);
      enable_interrupts(INT_RB);
      ext_int_edge(H_to_L);
      lcd_init();
      delay_ms(10);
      
      while(TRUE)
         {
            update_time(); 
            hienthi_LCD();  
         }
   }
File Kèm Theo
File Type: rar DS1307_1.rar (1.7 KB, 907 lần tải)

thay đổi nội dung bởi: cuong86vt, 21-06-2008 lúc 06:34 AM.
cuong86vt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-06-2008, 06:17 AM   #7
cuong86vt
Đệ tử 1 túi
 
Tham gia ngày: Jul 2007
Bài gửi: 22
:
Các bạn hãy nêu ra thắc mắc nếu có của mình và nhửng phát hiện trong code này để chúng ta cùng sửa đổi và cải thiện tốt hơn.
Với code viết cho cái đồng hồ như trên thì vẫn còn chưa tối ưu, vì mỗi lần chúng ta muốn nạp lại thời gian ban đầu thì lại phải set lại trong code ct ngặt ngoài RB0, cho nên các bạn hãy cùng mình tìm cách viết thêm code để làm cho cái đồng hồ này tốt hơn bằng cách dùng 4 nút nhấn ngắt ngoài RB4 -> RB7 kia để dịch chuyển con trỏ tới các vị trí: thứ, giờ, ngày... và set giá trị ban đầu của nó tùy bạn thích ngay trên cái đồng hồ đó mà không phải mang đi nạp đi nạp lại chi cho khổ nửa ! (pro như cái đồng hồ đeo tay casio vậy !). Nào các bạn, chúng ta hãy cùng nhau viết code tiếp cho cái bài làm đồng hồ còn dang dở này nhé !

Mình sẽ đề nghị anh F treo một giải thưởng nho nhỏ (k bít anh F nghĩ sao nhỉ !), có thể là tặng 1 phần quà là 1 vài con PIC mới chẳng hạn ! (vì ở cty R&B của anh F có nhiều PIC lắm,có cả tỷ đủ loại luôn !) cho bạn nào viết được thành công và post code lên đây trước mà mình thử nạp code đó đúng thì sẽ được nhận giải đó , hấp dẫn quá nhỉ ! ...
Các bạn cứ viết code theo sơ đồ nguyên lý trên cũng được. Đến đây, mình xin được đố các bạn một câu hỏi nhỏ nhé: Trong sơ đồ nguyên lý orcad trên mình đã cố tình để một chỗ sai trong phần cứng , nếu các bạn làm y boong như cái mạch trên và code trên thì sai chắc ! (gợi ý: màn hỉnh LCD trắng póc !), các bạn hãy thử phát hiện và sửa xem nhé (gợi ý 2 cách: 1 là sửa code, 2 là sửa sơ đồ nguyên lý...), chắc cũng không quá khó nhỉ !
Chúc các bạn thành công...

thay đổi nội dung bởi: cuong86vt, 21-06-2008 lúc 06:31 AM. Lý do: Xin anh F "tí" quà cho anh em thi đua nhau "giành giật !"
cuong86vt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-06-2008, 11:19 AM   #8
toanck86
Đệ tử 1 túi
 
Tham gia ngày: Apr 2007
Bài gửi: 20
:
Chú Cường trâu bò phết nhỉ, thức luôn đêm hả . Lúc nào mang mạch cho anh xem nhé
toanck86 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-10-2009, 11:19 PM   #9
hoanghaihic
Nhập môn đệ tử
 
Tham gia ngày: Jul 2009
Bài gửi: 1
:
chào anh em đang làm đồ án thiết kế đề tài giống như trên : hiển thì thời gian thưc , ngày tháng năm nhưng phải thiết kế bằng 89c51 hoặc 98c52 anh có sơ đồ thì post lên cho em với
em đang gặp khó khăn mong anh giúp đỡ!
hoanghaihic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-11-2009, 04:38 PM   #10
thanhtric5
Nhập môn đệ tử
 
Tham gia ngày: Jul 2009
Bài gửi: 1
:
Bác Cường cho hỏi thư viện orcad mà có LCD bác có không cho e với ,sao cái orcad 9.2 của em không có cái LCD đó hả bác ?bác sửa luôn dùm cái sơ đồ nguyên lí cho a em tham khảo đi ,cũng lâu rùi mình thấy có bạn nào sửa dùm đâu!thanks.
thanhtric5 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-01-2010, 12:08 AM   #11
thuong008
Nhập môn đệ tử
 
thuong008's Avatar
 
Tham gia ngày: Apr 2009
Bài gửi: 6
:
lỗi ở phần code, em làm trên phần cứng của em nên không test phần cứng của pác. Nhưng em làm dựa theo code của pác phát hiện ra lỗi chỗ này:
i2c_write(write(second)); --->i2c_write(second);
Thanks pác cường nha nhờ chương trình của pác 1 ngày em đã làm ok cái RTC DS1307, với DS 12c877 em phải mất 1 tuần mò mẫm hix hix
thuong008 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-01-2010, 07:02 AM   #12
Tuấn Anh CVN
Đệ tử 1 túi
 
Tham gia ngày: Jul 2007
Bài gửi: 15
:
Mạch nguyên lý đồng hồ số trên mình thấy phần LCD kết nối còn thiếu. Các cổng RD của LCD chưa thấy kết nối tới PIC. Trong code cũng chưa thấy đề cập đến việc khởi tạo LCD hoạt động ở chế độ nào. (chế độ Byte hay nibble). Thường thì sẽ chọn cách đơn giản phần cứng bằng việc sử dụng chế độ nibble. Như vậy chỉ sử dụng 4 bus cao của LCD. Bài đồng hồ này sơ đồ nguyên lý sửa bằng việc kết nối 4 bus cao của LCD với các bus liên tiếp của một port trên PIC. Tiếp đó trong code thì khởi tạo LCD hoạt động ở chế độ nibble. Ta có thể lấy phần sample code trong HTPIC ra sửa lại chút là chạy OK.
Tuấn Anh CVN vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-01-2010, 01:25 PM   #13
thuan87
Nhập môn đệ tử
 
Tham gia ngày: Jan 2010
Bài gửi: 1
:
thank. very good
thuan87 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-02-2010, 08:01 AM   #14
nhockhochoai
Nhập môn đệ tử
 
Tham gia ngày: Apr 2007
Bài gửi: 10
:
bác cho em hỏi nếu muốn hiển thị thêm lịch âm thì mình dùng phần cứng của bác luôn được không..thank bác nhiều
nhockhochoai vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-04-2010, 11:02 PM   #15
dtvtb
Đệ tử 2 túi
 
Tham gia ngày: Sep 2008
Bài gửi: 27
:
Đây là 1 cái đồng hồ lcd hoàn chỉnh,gồm mô phỏng proteus và CCS
Tiếc là có 1 lỗi excessive cpu load làm sản phẩm mô phỏng chỉ chạy đc trong khoảng 5s,sau đó thì...hỏi Chúa để biết thêm chi tiết
File Kèm Theo
File Type: rar do ho lcd 2.rar (65.1 KB, 898 lần tải)
dtvtb vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 03:42 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam