Dạy lập trình AVR cơ bản nhất- Chương 4 - Bài 2

21 312 0
Dạy lập trình AVR cơ bản nhất-  Chương 4 - Bài 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 72 BÀI 2: GIAO TIẾP VỚI LED 7 ĐOẠN VÀ LED MA TRẬN ĐƠN SẮC PHƯƠNG PHÁP MỞ RỘNG PORT XUẤT I. Giao tiếp với led 7 đoạn. 1. Giới thiệu led 7 đoạn. Led 7 đoạn là linh kiện chuyên dùng để hiển thị. Cấu tạo của nó bao gồm 8 led nối chung cathode (cực âm) gọi là cathode chung hoặc anode (cực dương) gọi là anode chung. Hình 3. Led 7 đoạn Các đoạn được đặt tên từ a đến g, riêng led thứ 8 đặt tên là dp (dot point). Led 7 đoạn hiển thị ký tự bằng cách bật sáng các đoạn cần thiết, các tổ hợp của các đoạn bật sáng được quy ước thành mã hiển thị của led 7 đoạn. Bộ mã hiển thị của led 7 đoạn thông thường là 16 ký tự trong hệ thống số hex. Tuy nhiên, nếu cần dùng 1 ký tự đặt biệt nào đó, ta vẫn thể tạo ra mã hiển thị của led 7 đoạn một cách đơn giản. Trong MikroC đã tích hợp sẵn công cụ tạo mã hiển thị cho 2 loại led 7 đoạn cathode chung và anode chung. Công cụ này nằm trong menu Tools. Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 73 Bảng mã hiển thị led 7 đoạn loại anode chung: Bảng mã hiển thị led 7 đoạn loại cathode chung: Số a b c d e f g dp Mã hex 0 0 0 0 0 0 0 1 1 0x03 1 1 0 0 1 1 1 1 1 0x9F 2 0 0 1 0 0 1 0 1 0x25 3 0 0 0 0 1 1 0 1 0x0D 4 1 0 0 1 1 0 0 1 0x99 5 0 1 0 0 1 0 0 1 0x49 6 0 1 0 0 0 0 0 1 0x41 7 0 0 0 1 1 1 1 1 0x1F 8 0 0 0 0 0 0 0 1 0x01 9 0 0 0 0 1 0 0 1 0x09 Số dp g f e d c b a Mã hex 0 1 1 0 0 0 0 0 0 0xC0 1 1 1 1 1 1 0 0 1 0xF9 2 1 0 1 0 0 1 0 0 0xA4 3 1 0 1 1 0 0 0 0 0xB0 4 1 0 0 1 1 0 0 1 0x99 5 1 0 0 1 0 0 1 0 0x92 6 1 0 0 0 0 0 1 0 0x82 7 1 1 1 1 1 0 0 0 0xF8 8 1 0 0 0 0 0 0 0 0x80 9 1 0 0 1 0 0 0 0 0x90 Số a b c d e f g dp Mã hex 0 1 1 1 1 1 1 0 0 0xFC 1 0 1 1 0 0 0 0 0 0x60 2 1 1 0 1 1 0 1 0 0xDA 3 1 1 1 1 0 0 1 0 0xF2 4 0 1 1 0 0 1 1 0 0x66 5 1 0 1 1 0 1 1 0 0xB6 6 1 0 1 1 1 1 1 0 0xBE 7 1 1 1 0 0 0 0 0 0xE0 8 1 1 1 1 1 1 1 0 0xFE 9 1 1 1 1 0 1 1 0 0xF6 Số dp g f e d c b a Mã hex 0 0 0 1 1 1 1 1 1 0x3F 1 0 0 0 0 0 1 1 0 0x06 2 0 1 0 1 1 0 1 1 0x5B 3 0 1 0 0 1 1 1 1 0x4F 4 0 1 1 0 0 1 1 0 0x66 5 0 1 1 0 1 1 0 1 0x6D 6 0 1 1 1 1 1 0 1 0x7D 7 0 0 0 0 0 1 1 1 0x07 8 0 1 1 1 1 1 1 1 0x7F 9 0 1 1 0 1 1 1 1 0x6F a là MSB, dp là LSB a là LSB, dp là MSB a là MSB, dp là LSB a là LSB, dp là MSB Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 74 2. Giao tiếp với led 7 đoạn 2 phương pháp chính: a. Phương pháp chốt Dữ liệu cần hiển thị được đưa độc lập đến từng led . Vì thế ưu điểm của nó là lập trình rất đơn giản, chúng ta chỉ cần ghi mã hiển thị ra PORT giao tiếp. Tuy nhiên, nhược điểm lớn nhất của phương pháp này là tốn rất nhiều PORT điều khiển. U1 COMMON CATHODE e 1 d 2 E1 3 c 4 dp 5 b 6 a 7 E2 8 f 9 g 10 R1 R2 8x330 R3 R4 R5 R6 R7 R8 PORT Hình 4. Minh họa phương pháp chốt b. Phương pháp chốt Các chân dữ liệu tương ứng của các led được nối với nhau để nhận dữ liệu từ 1 PORT. Tất cả các led nhận được dữ liệu giống nhau nhưng chỉ 1 led được chọn để bật sáng. Ta tuần tự cấp dữ liệu của led thứ nhất đồng thời chỉ bật sáng led này, sau đó lại cấp dữ liệu của led tiếp theo đồng thời bật led tiếp theo. Cứ như vậy mà lặp lại với tần số lớn hơn 24 lần/s cho mỗi led, do hiện tượng lưu ảnh ở mắt người nên chúng ta cảm giác các led hiển thị số liệu khác nhau cùng 1 lúc. Phương pháp này ưu điểm là ít tốn chân vi điều khiển và thể điều khiển nhiều led. Hình 5. S ơ đ ồ module led 7 đo ạn a b U1 CA e 1 d 2 E1 3 c 4 dp 5 b 6 a 7 E2 8 f 9 g 10 c d e f g dp J1 DATA PORT 1 2 3 4 5 6 7 8 9 10 a b c d e f g dp R17 8 x 330 R18 R19 R20 R21 R22 R23 R24 U2 CA e 1 d 2 E1 3 c 4 dp 5 b 6 a 7 E2 8 f 9 g 10 U3 CA e 1 d 2 E1 3 c 4 dp 5 b 6 a 7 E2 8 f 9 g 10 U4 CA e 1 d 2 E1 3 c 4 dp 5 b 6 a 7 E2 8 f 9 g 10 c b a f e d dp g VCC J2 CONTROL POR T 1 2 3 4 5 6 7 8 9 10 Q1 c1815 Q2 c1815 Q3 c1815 Q4 c1815 VCC R13 8k2 R14 8k2 a b R15 8k2 c d R16 8k2 e f g dp a b c d e f g dp Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 75 Lưu đồ giải thuật hàm quét led 7 đoạn: Hàm quét led phải được gọi ra liên tục trong thân hàm main, các tác vụ khác không được trì hoãn quá lâu vì như vậy sẽ làm việc quét led gián đoạn gây nhấp nháy led. Thực hành: Yêu cầu 1: Hãy soạn thảo và biên dịch chương trình với yêu cầu hiển thị 1 số 4 chữ số ví dụ 2010. Chương trình gợi ý: Bai2_1_A : Thực hành quét led. Sử dụng file mô phỏng BAI2_1.dsn #define CONTROL PORTB #define DATA PORTC char i ; Delay 5ms Vào Đọc dữ liệu cần xuất (dạng BCD) Đưa dữ liệu led 1 ra PORT DATA Bật led 1 qua PORT CONTROL Đưa dữ liệu led 2 ra PORT DATA Bật led 2 qua PORT CONTROL Tắt led 1 qua PORT CONTROL Tắt led 2 qua PORT CONTROL Bật led n qua PORT CONTROL Đưa dữ liệu led n ra PORT DATA Tắt led n qua PORT CONTROL Delay 5ms Delay 5ms Ra Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 76 char temp[4]; // MA LED 7 DOAN CATHODE CHUNG char seven_seg_code[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; // HAM TACH CAC KY SO TRONG CHU SO CAN HIEN THI void Num2Digit(int number){ temp[3]=number/1000; temp[2]=(number%1000)/100; temp[1]=((number%1000)%100)/10; temp[0]=((number%1000)%100)%10; return; } // HAM QUET LED 7 DOAN void Seven_Seg_Scan(){ for (i=0;i<=3;i++){ // TRA CUU KY SO CHUYEN THANH MA LED DATA=seven_seg_code[temp[i]]; CONTROL=~0x08>>i; delay_ms(5); CONTROL=0xFF; } } //CHUONG TRINH CHINH void main(){ DDRC=0xFF; //CAU HINH PORT DDRB=0xFF; //CHUYEN DOI DU LIEU HIEN THI Num2Digit(1234); while(1){ //GOI HAM QUET LED Seven_Seg_Scan(); } } Trong chương trình trên, hàm Num2Digit chịu trách nhiệm tách các ký số của 1 số 4 chữ số. Sau đó, trong hàm quét led, các ký số này sẽ được dùng để tra cứu mã led 7 đoạn tương ứng được khai báo trong mảng seven_seg_code. Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 77 Thử thay đổi thời gian trì hoãn trong hàm quét led từ 5ms thành 500ms để hiểu rõ nguyên tắc quét led. Yêu cầu 2: Hãy viết chương trình kết hợp dùng phím đơn và quét led 7 đoạn, chương trình khả năng khi ấn phím 1 thì tăng giá trị hiển thị 1 đơn vị, ấn phím 2 thì giảm 1 đơn vị. Chương trình tham khảo: Bai2_1_B : Chương trình kết hợp quét led và chống dội phím. Sử dụng file mô phỏng BAI2_1.dsn #define CONTROL PORTB #define DATA PORTC char key, pr, flag, i, j; unsigned int number; char temp[4]; // MA LED 7 DOAN CATHODE CHUNG char seven_seg_code[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; // HAM TACH CAC KY SO TRONG CHU SO CAN HIEN THI void Num2Digit(unsigned int in_number){ temp[3]=in_number/1000; temp[2]=(in_number%1000)/100; temp[1]=((in_number%1000)%100)/10; temp[0]=((in_number%1000)%100)%10; return; } // HAM QUET LED 7 DOAN void Seven_Seg_Scan(){ for (i=0;i<=3;i++){ // TRA CUU KY SO CHUYEN THANH MA LED DATA=seven_seg_code[temp[i]]; CONTROL=~0x08>>i; delay_ms(1); CONTROL=0xFF; } } //HAM DOC PHIM - TRA VE VI TRI PHIM DUOC AN - MUC TAC DONG PHIM LA THAP char Button_Read(){ if(Button(&PINA,0,1,0)) return 1; if(Button(&PINA,1,1,0)) return 2; return 0; } Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 78 //HAM DOC PHIM VA CHONG DOI char Button_Read_Debounce(){ char temp; temp=Button_Read(); if(temp==0){ if(pr==1){ pr=0; return; } else { flag=1; return; } } else{ delay_ms(5); temp=Button_Read(); if(temp==0) return; else{ pr=1; return temp; } } } //CHUONG TRINH CHINH void main(){ DDRA=0x00; DDRB=0xFF; DDRC=0xFF; while(1){ Num2Digit(number); Seven_Seg_Scan(); key= Button_Read_Debounce(); if((pr==1)&&(flag==1)){ flag=0; switch(key){ case 1:number++; // GIOI HAN GIA TRI TRONG 4 CHU SO if(number==10000) number=0; break; Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 79 case 2:number ; // GIOI HAN GIA TRI TRONG 4 CHU SO if(number>=9999) number=9999; break; } } } } Trong chương trình tham khảo trên, các hàm delay của chương trình chống dội cũng như quét led đều giảm tối thiểu để đảm bảo tần số quét đủ để đánh lừa thị giác của chúng ta. Tuy nhiên, việc giảm delay thể làm cho hàm chống dội không còn tốt nữa. Mặt khác, đây chỉ mới là chương trình đơn giản với 2 chức năng chỉ khai thác được 1 phần nhỏ tài nguyên vi điều khiển. Vì vậy cần cải tiến chương trình để vi điều khiển xử lý nhịp nhàng giữa chống dội phím và quét led. Ta sẽ dùng phương pháp sử dụng ngắt được trình bày ở các chương sau để khắc phục nhược điểm của hàm delay. d. Phương pháp quét led 7 đoạn sử dụng IC chốt. Đây là 1 hướng phát triển của phương pháp quét led 7 đoạn, phương pháp này sử dụng thêm các IC số để mở rộng khả năng điều khiển các led 7 đoạn với số chân vi điều khiển sử dụng là tối thiểu. Mô tả: +IC 74595 là IC ghi dịch 8 bit chốt, dữ liệu được cấp vào chân số 14, mỗi khi xung clock tác động vào chân 11 thì dữ liệu sẽ dịch từ QA đến QH, tuy nhiên dữ liệu này chưa xuất hiện ở ngã ra mà phải chờ 1 xung tác động vào chân 12 để chốt dữ liệu khi đó dữ liệu từ QA đến QH sẽ xuất hiện ở ngõ ra. Chân 9 là ngã ra xuất dữ liệu nối tiếp cho IC phía sau, dữ liệu ở chân 9 là dữ liệu ngã vào đã dịch đi 8 bit. +Để thực hiện phương pháp quét này, ta cần ít nhất 2 IC 74195 và 6 chân vi điều khiển. Mỗi IC được điều khiển bởi 3 chân vi điều khiển để nhận dữ liệu song song và chuyển thành dữ liệu nối tiếp xuất ra led và các transistor đóng mở. +IC 74195 thứ nhất sẽ tạo xuất mã hiển thị do vi điều khiển cung cấp +IC 74195 thứ hai sẽ xuất mã điều khiển cũng do vi điều khiển cung cấp, do IC này 8 bit dữ liệu nên điều khiển được 8 led 7 đoạn, nhưng do khả năng mở rộng IC số là vô hạn nên số lượng led điều khiển được sẽ rất lớn, tùy vào khả năng cấp dòng của tầng đệm và tần số quét của vi điều khiển. Sau đây là sơ đồ thí nghiệm của module led 7 đoạn gồm 8 led 7 đoạn anode chung và mắc chung đường dữ liệu. Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 80 Hình 6. Sơ đồ module led 7 đoạn mở rộng Lưu ý, vì tầng đệm trong sơ đồ dùng IC ULN2803 là IC lái dòng (mỗi đường cấu tạo như 1 transistor NPN – ngã vào 1 thì ngã ra 0, ngã vào 0 thì ngã ra xem như để hở) nên mã led phải dùng loại cathode chung. Để xây dựng hàm xuất dữ liệu 8 bit bằng IC 74595 các bạn thể tham khảo các bước sau: +Bước 1: Lấy bit thứ 8 của dữ liệu xuất ra chân của vi điều khiển nối vào chân SDI (chân 14) của IC 74595. +Bước 2: Tạo xung đồng hồ tại chân của vi điều khiển nối vào chân SRCLK(chân 11) của IC 74595. Thực hiện lại bước 1 và 2 nhưng lấy các bit dữ liệu thứ tự (trọng số) thấp dần. Sau 8 lần thực hiện thì toàn bộ 8 bit dữ liệu đã dịch vào IC 74595. U1 74HC595 SDO 9 CLR 10 G 13 SDI 14 SRCLK 11 RCLK 12 QA 15 QB 1 QC 2 QD 3 QE 4 QF 5 QG 6 QH 7 U2 74HC595 SDO 9 CLR 10 G 13 SDI 14 SRCLK 11 RCLK 12 QA 15 QB 1 QC 2 QD 3 QE 4 QF 5 QG 6 QH 7 U3 7Seg e 1 d 2 E1 3 c 4 pt 5 b 6 a 7 E2 8 f 9 g 10 R7 8.2K U4 7Seg e 1 d 2 E1 3 c 4 pt 5 b 6 a 7 E2 8 f 9 g 10 R8 8.2K U5 7Seg e 1 d 2 E1 3 c 4 pt 5 b 6 a 7 E2 8 f 9 g 10 U6 7Seg e 1 d 2 E1 3 c 4 pt 5 b 6 a 7 E2 8 f 9 g 10 VCC U7 7Seg e 1 d 2 E1 3 c 4 pt 5 b 6 a 7 E2 8 f 9 g 10 U8 7Seg e 1 d 2 E1 3 c 4 pt 5 b 6 a 7 E2 8 f 9 g 10 VCC LED1 U9 ULN2803 COM 10 IN1 1 IN2 2 IN3 3 IN4 4 IN5 5 IN6 6 IN7 7 IN8 8 OUT1 18 OUT2 17 OUT3 16 OUT4 15 OUT5 14 OUT6 13 OUT7 12 OUT8 11 VCC LED4 Q9 PNP BCE LED7 LED5 Q10 PNP BCE LED6 Q11 PNP BCE LED8 Q12 PNP BCE VCC VCC VCC VCC VCC R1 8.2K R9 10K A R2 8.2K B C R3 8.2K D E R4 8.2K F G DP R5 8.2K R6 8.2K SRCLK_2 SDI_2 RCLK_2 SRCLK_1 R10 10K SDI_1 RCLK_1 Q5 PNP BCE U10 7Seg e 1 d 2 E1 3 c 4 pt 5 b 6 a 7 E2 8 f 9 g 10 U11 7Seg e 1 d 2 E1 3 c 4 pt 5 b 6 a 7 E2 8 f 9 g 10 LED7 LED8 A A B C B C D E F D E F G DP G DP A Q6 PNP BCE B C D E F G DP Q7 PNP BCE Q8 PNP BCE SRCLK_1 SDI_1 RCLK_1 VCC A B C D E F G DP J1 PORT 1 2 3 4 5 6 7 8 9 10 A B C D E F G DP A B C D E F G DP A B C D E F G DP LED2 LED1 SRCLK_2 SDI_2 RCLK_2 LED2 LED3 LED3 LED4 VCC LED5 A B C D E F G DP VCC LED6 VCC Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 81 +Bước 3: Tạo xung đồng hồ tại chân của vi điều khiển nối vào chân RCLK (chân 12) của IC 74595. Sau đây là lưu đồ giải thuật xuất dữ liệu ra IC 74595: Ví dụ: Viết chương trình hiển thị dãy số gồm 8 chữ số bất kỳ ra 8 led 7 đoạn với cách bố trí như sơ đồ hình 6. Ta dùng dãy IC 74595 thứ nhất để xuất dữ liệu là mã led. Dùng dãy IC 74595 thứ 2 để xuất dữ liệu chọn led. Do dãy IC 74595 được mắc nối tiếp nên khi xuất dữ liệu phải sắp xếp sao cho dữ liệu của IC cuối dãy được xuất trước Bai2_2_A : Chương trình quét led bằng phương pháp mở rộng PORT xuất. Sử dụng file mô phỏng BAI2_2.dsn #define clk1 PORTC0_bit #define lat1 PORTC2_bit #define sdo1 PORTC1_bit #define clk2 PORTC3_bit #define lat2 PORTC5_bit #define sdo2 PORTC4_bit #define iport PORTC Lấy 1 bit của dữ liệu đưa vào chân SDI Tạo xung clock cấp vào chân SRCLK Vào Đủ 8 lần hay chưa? Tạo xung clock cấp vào chân RCLK Thoát Chưa Đủ [...]... { 0x00,0x00,0x00,0x00, 0x36,0x36,0x36,0x36, 0x49,0x49,0x49,0x49, 0x41,0x41,0x41,0x41, 0x41,0x41,0x41,0x41, 0x 22, 0x 22, 0x 22, 0x 22, 0x 14, 0x 14, 0x 14, 0x 14, 0x08,0x08,0x08,0x08, }; //HAM GHI DU LIEU VAO IC 745 95 void Ic 745 95_Write(char dat, char ic, char bits){ signed char fc; //BIEN DEM if(ic==1){ //CHON GHI VAO IC 741 95 THU NHAT for(fc=bits-1;fc>=0;fc ){ dat1=(dat>>fc)&0x01; // TAO DU LIEU NOI TIEP sclk1=1;... thứ tự: 3-0 , 7 -4 , 118,1 5-1 2, 1 9-1 6, 2 3 -2 0, 2 7- 24 , 3 1 -2 8) Trần Thừa – 20 10 86 Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Sau đây là lưu đồ giải thuật Vào Tăng i Chưa Xuất dữ liệu led 4 – 1 hàng i ra IC 745 95 Xuất dữ liệu bật bật hàng i Xuất dữ liệu tắt tất cả các led Đủ 8 hàng chưa? Đủ Ra Sau đây là ví dụ về việc xuất dữ liệu ra led ma trận: Yêu cầu: xuất dữ liệu bất kỳ ra 4 led ma trận... thước 32x8 Bai2_3_A : Xuất dữ liệu ra led ma trận Sử dụng file mô phỏng BAI2_3.dsn #define sclk1 PORTC0_bit #define dat1 #define lclk1 PORTC2_bit #define sclk2 PORTC3_bit #define dat2 #define lclk2 PORTC1_bit PORTC4_bit PORTC5_bit char i,j,s; char temp [2] ; unsigned char BitmapData[]= { 0x07,0xDC,0x71,0xDC,0xB2,0x89,0x88,0x88,0x4A,0x 52, 0x 04, 0x89,0x0A,0x 52, 0x 04, 0x89, 0x 12, 0x21,0x 04, 0x89,0xA2,0x20,0x 04, 0x89,0x 42, 0x20,0x88,0x88,0x07,0x70,0x70,0x70,... } if(ic= =2) { //CHON GHI VAO IC 741 95 THU NHAT for(fc=bits-1;fc>=0;fc ){ dat2=(dat>>fc)&0x01; // TAO DU LIEU NOI TIEP sclk2=1; Trần Thừa – 20 10 //TAO XUNG DICH 89 Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG sclk2=0; } lclk2=1; //TAO XUNG CHOT lclk2=0; } } void Dmemloop_vertical(){ char temp,i,j,k; for(i=0;i . dữ liệu hàng xuất theo thứ tự: 3-0 , 7 -4 , 1 1- 8,1 5-1 2, 1 9-1 6, 2 3 -2 0, 2 7- 24 , 3 1 -2 8) Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 20 10 87 Sau đây là lưu đồ giải thuật a b U1 CA e 1 d 2 E1 3 c 4 dp 5 b 6 a 7 E2 8 f 9 g 10 c d e f g dp J1 DATA PORT 1 2 3 4 5 6 7 8 9 10 a b c d e f g dp R17 8 x 330 R18 R19 R20 R21 R 22 R23 R 24 U2 CA e 1 d 2 E1 3 c 4 dp 5 b 6 a 7 E2 8 f 9 g 10 U3 CA e 1 d 2 E1 3 c 4 dp 5 b 6 a 7 E2 8 f 9 g 10 U4 CA e 1 d 2 E1 3 c 4 dp 5 b 6 a 7 E2 8 f 9 g 10 c b a f e d dp g VCC J2 CONTROL. lclk2 PORTC5_bit char i,j,s; char Dmem[ 32] ; unsigned char BitmapData[]= { 0x00,0x00,0x00,0x00, 0x36,0x36,0x36,0x36, 0x49,0x49,0x49,0x49, 0x41,0x41,0x41,0x41, 0x41,0x41,0x41,0x41, 0x 22, 0x 22, 0x 22, 0x 22,

Ngày đăng: 27/05/2014, 23:16

Tài liệu cùng người dùng

Tài liệu liên quan