Tài liệu Hướng Dẫn Viết Code Cube 5x5x5

 Đầu tiên khai báo thư viện cho nó đã:

#include

Bây giờ ta sẽ viết hàm tạo trễ 1 ms:

Hàm của chúng ta như sau:

void delay(unsigned char tre)

{

while(tre--)

{

unsigned char i=123;

while(i--)

};

}

 Bước tiếp theo ta sẽ viết hàm tắt tất cả LED, hàm này sẽ được gọi trong quét LED để

khắc phục hiệu ứng bóng ma(LED không tắt hẳn mà sáng mờ)

Hàm của chúng ta như sau:

void xoa()

{

P0=P1=P2=P3=0xFF;

}

 Vậy là xong bước chuẩn bị :D

 Bây giờ ta xét về phần cứng của Cube 5x5x5 một chút nhé:

Đại đa số phần cứng phổ biến hiện nay như sau:

Tài liệu Hướng Dẫn Viết Code Cube 5x5x5 trang 1

Trang 1

Tài liệu Hướng Dẫn Viết Code Cube 5x5x5 trang 2

Trang 2

Tài liệu Hướng Dẫn Viết Code Cube 5x5x5 trang 3

Trang 3

Tài liệu Hướng Dẫn Viết Code Cube 5x5x5 trang 4

Trang 4

Tài liệu Hướng Dẫn Viết Code Cube 5x5x5 trang 5

Trang 5

Tài liệu Hướng Dẫn Viết Code Cube 5x5x5 trang 6

Trang 6

Tài liệu Hướng Dẫn Viết Code Cube 5x5x5 trang 7

Trang 7

Tài liệu Hướng Dẫn Viết Code Cube 5x5x5 trang 8

Trang 8

Tài liệu Hướng Dẫn Viết Code Cube 5x5x5 trang 9

Trang 9

Tài liệu Hướng Dẫn Viết Code Cube 5x5x5 trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 20 trang duykhanh 4880
Bạn đang xem 10 trang mẫu của tài liệu "Tài liệu Hướng Dẫn Viết Code Cube 5x5x5", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Tài liệu Hướng Dẫn Viết Code Cube 5x5x5

Tài liệu Hướng Dẫn Viết Code Cube 5x5x5
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
  Đầu tiên bạn phải có Keil uVision: 
  Mở Keil tạo 1 project mới: 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 Vậy là xong bước tạo project :D 
  Đầu tiên khai báo thư viện cho nó đã: 
 #include 
 Bây giờ ta sẽ viết hàm tạo trễ 1 ms: 
 Hàm của chúng ta như sau: 
 void delay(unsigned char tre) 
 { 
 while(tre--) 
 { 
 unsigned char i=123; 
 while(i--) 
 }; 
 } 
  Bước tiếp theo ta sẽ viết hàm tắt tất cả LED, hàm này sẽ được gọi trong quét LED để 
 khắc phục hiệu ứng bóng ma(LED không tắt hẳn mà sáng mờ) 
 Hàm của chúng ta như sau: 
 void xoa() 
 { 
 P0=P1=P2=P3=0xFF; 
 } 
  Vậy là xong bước chuẩn bị :D 
  Bây giờ ta xét về phần cứng của Cube 5x5x5 một chút nhé: 
 Đại đa số phần cứng phổ biến hiện nay như sau: 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 Ta thấy cột 1-8 tương ứng P1_0 – P1_7; cột 9-16 : P3_0 – P3_7; 17- 24: P2_0 – P2_7; 
 cột 25 : P0_6; hang 1-5: P0_0 – P0_4; 
  Dựa trên phần cứng này để chúng ta lập trình nhé! 
  Như trước đây chúng ta đã biết cách lập trình gán từng cột, từng hàng vào từng chân 
 8051 bằng phép gán sbit P1^0 = cot1; bây giờ chúng ta sẽ không dùng cách này nữa 
 mà sẽ dùng hoàn toàn mã hexa nhé :D 
  Cách lấy mã hexa trong keil C như sau: 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 Ta có thể dễ dàng điều khiển từng port bằng các mức logig 0 (bỏ tích) hoặc 1 (tích 
 chọn) và thu được mã hexa cần thiết ở vùng khoanh đỏ trên :D Chẳng hạn muốn cột 1, 
 cột 3, cột 6, cột 8 của hàng một sang thì ta cần cho P1_0, P1_2, P1_5, P1_7 và P0_0 ở 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 mức thấp: như vậy ta thu 
 được: P0=0xFE; P1=0x5A; Quá đơn giản đúng không nào  
 Ở đây ta sẽ lấy mã hex lần lượt từng hàng một và dùng phương pháp quét LED để tạo ra 
 hiệu ứng hoàn chỉnh! Để dễ hiểu hơn mình có thể minh họa như sau: 
 ví dụ các bạn muốn hiển thị một trái tim ở lớp ngoài cùng của khối LED như thế này: 
 Ta thấy hàng thứ nhất chỉ có LED cột 3 sáng như vậy ta sẽ có: 
 P0=0xFE;P1=0xFB;P2=0xFF;P3=0xFF; 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 Tương tự hàng thứ 2: 
 P0=0xFD;P1=0xF1;P2=0xFF;P3=0xFF; 
 . 
 Cho đến hàng thứ 5. Rồi ta sẽ tập hợp các mã hexa của từng port vào một mảng: 
 P0: {0xFE,0xFD} 
 P1:{0xFB,0xF1...} 
 P2:{0xFF,0xFF} 
 P3:{0xFF,0xFF} 
  Vậy là xong phần lấy mã hex rồi nhé! Bây giờ ta bắt đầu viết hiệu ứng: 
 - Cách viết thứ nhất: 
 Đầu tiên ta khai báo một mảng cho hàng và cột 25, vì thằng này nằm chung port 0  
 unsigned char code 
 hang[2][5]={{0xFE,0xFD,0xFB,0xF7,0xEF,},{0xBE,0xBD,0xBB,0xB7,0xAF}}; 
 //5 mã đầu là đặt mức thấp cho từng hàng, năm mã sau là mức thấp cho từng hàng + cột 
 25; và cái này sẽ dung chung cho tất cả các chương trình con của chúng ta  
 Chương trình chúng ta sẽ viết như sau: 
 void hieuung() 
 { 
 unsigned char i,j,k; 
 unsigned char code 
 cot[3][40]={ 
 { 
 0xFE,0x7D,0xBB,0xD7,0xEF, 
 0x7D,0xBA,0xD7,0xEF,0xFF, 
 0xBB,0x55,0xEE,0xFF, 0xFF, 
 0xD7,0xAB,0x7D,0xFE,0xFF, 
 0xEF,0xD7,0xBB,0x7D,0xFE, 
 0xFF,0xEF,0xD7,0xBA,0x7D, 
 0xFF,0xFF,0xEE,0x55,0xBB, 
 0xFF ,0xFE,0x7D,0xAB,0xD7, 
 }, 
 { 
 0xFE,0x7D,0xBB,0xD7,0xEF, 
 0x7D,0xBA,0xD7,0xEF,0xFF, 
 0xBB,0x55,0xEE,0xFF, 0xFF, 
 0xD7,0xAB,0x7D,0xFE,0xFF, 
 0xEF,0xD7,0xBB,0x7D,0xFE, 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 0xFF,0xEF,0xD7,0xBA,0x7D, 
 0xFF,0xFF,0xEE,0x55,0xBB, 
 0xFF ,0xFE,0x7D,0xBB,0xD7, 
 }, 
 { 
 0xEE,0x55,0xBB,0xFF,0xFF, 
 0x55,0xAA,0xFF,0xFF,0xFF, 
 0xBB,0x55,0xEE,0xFF, 0xFF, 
 0xFF,0xBB,0x55,0xEE,0xFF, 
 0xFF,0xFF,0xBB,0x55,0xEE, 
 0xFF,0xFF,0xFF,0xAA,0x55, 
 0xFF,0xFF,0xEE,0x55,0xBB, 
 0xFF,0xEE,0x55,0xBB,0xFF, 
 } 
 }; 
 for(i=0;i<25;i++) //Vòng lặp tạo trễ 
 { 
 for(j=0;j<8;j++)// 8 là số hàng của 1 mảng “cot” 
 { 
 for(k=0;j<5;k++)// 5 là số phần tử trong một hàng của mảng 
 { 
 P1=mang[0][k+5j]; 
 P2=mang[1][k+5j]; 
 P3=mang[2][k+5j]; 
 if((j=i)||(j==5&&i==3) ||(j==6&&i==2) 
 ||(j==7&&i==1)) 
 //mục đích lệnh if này là để chọn giá trị cho P0 khi cột 25 sáng hay cột 25 tắt. nếu sang 
 thì chọn mảng thứ 2, tắt thì chọn mảng thứ nhất. cột 25 sáng ở hàng nào, cột nào trong 
 mảng thì được i,,j tương ứng 
 P0=mang[1][k]; 
 else 
 P0=hang[0][k]; 
 delay(1); 
 xoa(); // tắt toàn bộ LED tránh bóng ma. 
 } 
 } 
 } 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 } 
 Nghe có vẻ khó hiểu nhỉ :D, tuy nhiên nếu các bạn đã biết và hiểu cách viết sơ cấp đầu 
 tiên mình đưa ra thì sẽ hình dung ra được  
 - Cách viết thứ 2: 
 cũng hiệu ứng trên nhưng ta sẽ không khai báo mảng “hàng” để dung chung cho tất cả 
 chương trình con của chúng ta nữa mà đưa vào từng chương trình con luôn. Cách viết này 
 sẽ lâu công hơn, nhưng bộ nhớ MCU sẽ cải thiệ hơn cách trên  lý do thì mình không rõ 
 vì cũng gà mờ, qua thực tế viết thấy nó thế  
 void hieuung() 
 { 
 unsigned char i,j,k; 
 unsigned char code 
 mang[4][40]={ 
 { 
 0xBE,0xFD,0xFB,0xF7,0xEF, 
 0xFE,0xBD,0xFB,0xF7,0xFF, 
 0xFF,0xFE,0xFD,0xBB,0xFF, 
 0xFE,0xFD,0xFB,0xB7,0xFF, 
 0xFE,0xFD,0xFB,0xF7,0xAF, 
 0xFD,0xFB,0xB7,0xEF,0xFF, 
 0xFF,0xBB,0xF7,0xEF,0xFF, 
 0xBD,0xFB,0xF7,0xEF,0xFF 
 }, 
 { 
 0xFE,0x7D,0xBB,0xD7,0xEF, 
 0x7D,0xBA,0xD7,0xEF,0xFF, 
 0xFF,0xBB,0x55,0xEE,0xFF, 
 0xD7,0xAB,0x7D,0xFE,0xFF, 
 0xEF,0xD7,0xBB,0x7D,0xFE, 
 0xEF,0xD7,0xBA,0x7D,0xFF, 
 0xFF,0xEE,0x55,0xBB,0xFF, 
 0xFE,0x7D,0xAB,0xD7,0xFF 
 }, 
 { 
 0xFE,0x7D,0xBB,0xD7,0xEF, 
 0x7D,0xBA,0xD7,0xEF,0xFF, 
 0xFF,0xBB,0x55,0xEE,0xFF, 
 0xD7,0xAB,0x7D,0xFE,0xFF, 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 0xEF,0xD7,0xBB,0x7D,0xFE, 
 0xEF,0xD7,0xBA,0x7D,0xFF, 
 0xFF,0xEE,0x55,0xBB,0xFF, 
 0xFE,0x7D,0xBB,0xD7,0xFF 
 }, 
 { 
 0xEE,0x55,0xBB,0xFF,0xFF, 
 0x55,0xAA,0xFF,0xFF,0xFF, 
 0xFF,0xBB,0x55,0xEE,0xFF, 
 0xFF,0xBB,0x55,0xEE,0xFF, 
 0xFF,0xFF,0xBB,0x55,0xEE, 
 0xFF,0xFF,0xAA,0x55,0xFF, 
 0xFF,0xEE,0x55,0xBB,0xFF, 
 0xEE,0x55,0xBB,0xFF,0xFF, 
 } 
 }; 
 for(i=5;i<=40;i+=5) //40 là số phần tử của 1 mảng 
 { 
 for(j=0;j<25;j++) //vòng lặp tạo trễ 
 { 
 for(k=(i-5);k<i;k++) // quét dần 5 phần tử của 1 mảng(0-4;5-9) 
 { 
 P0=mang[0][k];P1=mang[1][k];P2=mang[2][k];P3=mang[3][k];delay(1); 
 xoa(); 
 } 
 } 
 } 
 } 
 Từ cách viết này các bạn đã hiểu các giá trị của trong lệnh if cảu cách trên lấy đâu ra 
 chưa  hãy xem mảng của port 0 (mảng đầu tiên ấy). 
 - Cách viết thứ 3: 
 Cách viết này chả khác gì cách viết thứ 2 chỉ khác là ta dung từng mảng 1 chiều cho từng 
 port thôi  
 Chương trình chúng ta như sau: 
 void hieuung() 
 { 
 unsigned char i,j,k; 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 unsigned char code 
 mang0[]= 
 { 
 0xBE,0xFD,0xFB,0xF7,0xEF, 
 0xFE,0xBD,0xFB,0xF7,0xFF, 
 0xFF,0xFE,0xFD,0xBB,0xFF, 
 0xFE,0xFD,0xFB,0xB7,0xFF, 
 0xFE,0xFD,0xFB,0xF7,0xAF, 
 0xFD,0xFB,0xB7,0xEF,0xFF, 
 0xFF,0xBB,0xF7,0xEF,0xFF, 
 0xBD,0xFB,0xF7,0xEF,0xFF 
 }, 
 mang1[]= 
 { 
 0xFE,0x7D,0xBB,0xD7,0xEF, 
 0x7D,0xBA,0xD7,0xEF,0xFF, 
 0xFF,0xBB,0x55,0xEE,0xFF, 
 0xD7,0xAB,0x7D,0xFE,0xFF, 
 0xEF,0xD7,0xBB,0x7D,0xFE, 
 0xEF,0xD7,0xBA,0x7D,0xFF, 
 0xFF,0xEE,0x55,0xBB,0xFF, 
 0xFE,0x7D,0xAB,0xD7,0xFF 
 }, 
 mang2[]= 
 { 
 0xFE,0x7D,0xBB,0xD7,0xEF, 
 0x7D,0xBA,0xD7,0xEF,0xFF, 
 0xFF,0xBB,0x55,0xEE,0xFF, 
 0xD7,0xAB,0x7D,0xFE,0xFF, 
 0xEF,0xD7,0xBB,0x7D,0xFE, 
 0xEF,0xD7,0xBA,0x7D,0xFF, 
 0xFF,0xEE,0x55,0xBB,0xFF, 
 0xFE,0x7D,0xBB,0xD7,0xFF 
 }, 
 mang3[]= 
 { 
 0xEE,0x55,0xBB,0xFF,0xFF, 
 0x55,0xAA,0xFF,0xFF,0xFF, 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 0xFF,0xBB,0x55,0xEE,0xFF, 
 0xFF,0xBB,0x55,0xEE,0xFF, 
 0xFF,0xFF,0xBB,0x55,0xEE, 
 0xFF,0xFF,0xAA,0x55,0xFF, 
 0xFF,0xEE,0x55,0xBB,0xFF, 
 0xEE,0x55,0xBB,0xFF,0xFF, 
 } 
 }; 
 for(i=5;i<=40;i+=5) 
 { 
 for(j=0;j<25;j++) 
 { 
 for(k=(i-5);k<i;k++) 
 { 
 P0=mang0[k];P1=mang1[k];P2=mang2[k];P3=mang3[k];delay(1); 
 xoa(); 
 } 
 } 
 } 
 } 
  Đã xong phần viết hiệu ứng, ở đây mình dung quét LED hết nhé! Đến phần main thì cứ 
 gọi chương trình con ra là chạy thôi  
 unsigned char i; 
 void main() 
 { 
 while(1) // vòng lặp vô tận! 
 { 
 for(i=0;i<15;i++) // lặp lại hiệu ứng này 15 lần! 
 hieuung(); 
 for(i=0;i<20;i++) 
 hieuungn(); 
 } 
 } 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
  Vậy là xong toàn bộ cách viết mà mình muốn nói với các bạn rồi nhé  Một lưu ý là tại 
 sao khi khai báo biến mình không chọn int mà lại chọn char? Không khai báo kiểu int i; 
 hay char i; mà lại là unsigned char i; ? cái này các bạn tự đọc tài liệu về ngôn ngữ C cho 
 8051 nhé! 
  Tiếp theo thì tạo file hex để nạp chip chắc các bạn đều biết rồi nhỉ  
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 masoi.hd@gmail.com 
 Hướng Dẫn Viết Code Cube 5x5x5 Hoàng Anh Đức Group Điện Tử Ứng Dụng 
 Hy vọng những thứ ở trên sẽ có ích cho các bạn, cảm ơn các bạn đã chịu khó ngồi đọc  
 chúc anh em điện tử ứng dụng sớm làm được những sản phẩm như ý muốn! Chúc group 
 ngày càng lớn mạnh ! 
  Và cuối cùng cái này chỉ dành cho người mới làm quen chưa biết gì nhiều (giống mình) 
 thôi nhé! 
 The END 
 masoi.hd@gmail.com 

File đính kèm:

  • pdftai_lieu_huong_dan_viet_code_cube_5x5x5.pdf