|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
18-09-2013, 11:10 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Jan 2013
Bài gửi: 3
: |
Xin giúp đỡ code Led 8x8x8
Mong nhận Được sự giúp đỡ của mọi người trong Forum để hoàn thiện nốt phần hiệu ứng.
--Hiệu Ứng Sóng :mô tả một điểm dao động theo hàm sin làm mặt phẳng xung quanh dao động theo gây nên cảm giác sóng. --Thuật toán copy ở http://www.dientuvietnam.net/ như sau : Gọi chu kỳ sóng là T, bước sóng L, biên độ A. Chọn một điểm trong mặt phẳng xy làm gốc, đặt tên là O Quét tất cả mọi điểm trong mặt phẳng xy, gọi từng điểm là A Tính khoảng cách AO theo định lý Pytago, gọi là R Dùng công thức sóng u = A*Cos (2*PI*t/T - 2*PI*R/L) Add từng điểm vào mảng sáng Vs 8x8x8, L là 7, A là 3.5, tọa độ O là (3.5, 3.5), còn T là 1s. Việc lấy t ở đây dùng timer. Code C : HTML Code:
float L = 7; // Bước sóng float T = 1; // Chu kỳ float A = 3.5; // Biên độ float xo = 3.5; // Tọa độ điểm gốc O float yo = 3.5; for (byte y = 0; y < 8; y++) // Quét Y { for (byte x = 0; x < 8; x++) // Quét X { float r = Sqrt(Pow(x - xo, 2) + Pow(y - yo, 2)); // Lấy bán kính, Sqrt là căn bậc 2, Pow(x, y) là x mũ y float t = get_time(); // Lấy thời gian byte z = (byte)(A * Cos(2*PI*t/T - 2*PI*r/L) + 3.5); // Lấy cao độ z, 3.5 là vị trí cân bằng Add(x, y, z); // Lưu vị trí LED sáng } } HTML Code:
#include <main.h> #include <math.h> #define rowClk PIN_D0 //Clock #define rowDat PIN_D1 //Data #define rowLat PIN_D2 //latch #define colClk PIN_D3 #define colDat PIN_D4 #define colLat PIN_D5 int1 buffer_xy[64];//Mang 64 bit luu trang thai cua 64 cot int1 buffer_z[8]; //Mang 8 Bit Luu Trang Thai Cua 8 lop int8 x,y,z; int8 Count,time; #USE FAST_IO (d) //****************************************************************************// void interrupt_config() { disable_interrupts(INT_EXT); //Khong cho phep ngat ngoai hoat dong (mac dinh) disable_interrupts(INT_RB); //Khong cho phep ngat RB hoat dong (mac dinh) disable_interrupts(INT_CCP1); //Khong cho phep ngat CCP1 hoat dong (mac dinh) disable_interrupts(INT_TBE); //Khong cho phep ngat TBE hoat dong (mac dinh) disable_interrupts(INT_RDA); //Khong cho phep ngat RDA hoat dong (mac dinh) disable_interrupts(INT_SSP); //Khong cho phep ngat SSP hoat dong (mac dinh) disable_interrupts(INT_PSP); //Khong cho phep ngat PSP hoat dong (mac dinh) disable_interrupts(INT_BUSCOL); //Khong cho phep ngat BUSCOL hoat dong (mac dinh) disable_interrupts(INT_COMP); //Khong cho phep ngat COMPARATOR hoat dong (mac dinh) enable_interrupts(GLOBAL); //Cho phep cac ngat co the hoat dong } void timer0_config() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_BIT); // T_tm0=T_osc*4*256 enable_interrupts(INT_TIMER0); //Cho phep ngat tran timer0 hoat dong } //****************************************************************************// // Ngat Timer 0 De lay Gia Tri Time #INT_RTCC void ngat_timer0(void) { set_timer0(2); Count++; if(Count==46) { // dinh thoi 0.5s disable_interrupts(GLOBAL); Count=0; if(time==99) time=0; else time++; enable_interrupts(GLOBAL); } } //****************************************************************************// void Send_Oxy() //Day 64 Bit vao * IC74HC595 { int i; //send 64 bit vao 74HC595 for(i=0;i<64;i++) { output_bit(colDat,buffer_xy[i]); delay_us(1); output_high(colClk); output_low(colClk); } // Chot xuat 64 bit ra led output_high(colLat); output_low(colLat); } void Send_Oz() //Day 8 Bit Vao IC74HC595 { int8 i; // for(i=0;i<8;i++) { output_bit(rowDat,buffer_z[i]); delay_us(1); output_high(rowClk); output_low(rowClk); } // Chot xuat Du Lieu ra led output_high(rowLat); output_low(rowLat); } //********************************************************************/ //Ham Bat 1 bong led co toa do (x,y,z) trong khoi void Send_Oxyz(int8 x,int8 y,int8 z) { buffer_xy[x+y*8]=1;//cho bit co toa do (x,y) =1 buffer_z[z]=1; //cho bit co toa do Z =1 Send_Oxy(); // Send_Oz(); // } void OFF_ALL() { int8 i; for(i=0;i<8;i++) { buffer_z[i]=0; } for(i=0;i<64;i++) { buffer_xy[i]= 0; } Send_Oxy(); Send_Oz(); } //****************************************************************************// //Ham Song lay t Tu Timer 0 void effect_wave() { int8 L = 7; // Buoc song int8 T = 1; // Chu ki float A,xo,yo; A = 3.5; // Bien do xo = 3.5; // Toa do diem goc O for ( y = 0; y < 8; y++) // Quét Y { for ( x = 0; x < 8; x++) // Quét X { float r = Sqrt(Pow(x - xo, 2) + Pow(y - yo, 2)); // Lay bán kính, Sqrt là can bac 2, Pow(x, y) là x mu y byte z = (byte)(A * Cos(2*PI*time/T - 2*PI*r/L) + 3.5); // Lay cao do z, 3.5 là vi tri can bang Send_Oxyz(x, y, z); // Luu vi tri LED sáng delay_ms(1); OFF_ALL(); } } } void main() { interrupt_config(); timer0_config(); set_tris_d(0x00); while(true) { effect_wave(); } } |
|
|