![]() |
Hiển thị ma trận LED
2 Attachment(s)
Em đang làm thử mạch hiển thị LED matrix, không hiểu tại sao khi cho nháy LED với thời gian chậm để kiểm tra thì LED báo đúng. Còn khi rút ngắn delay time, LED hiển thị không đúng như lúc chạy chậm. Các đại ca giúp em với!!! Please, em tìm lỗi mấy ngày rùi mà không được.
Đây là code của chương trình và mạch mô phỏng: #include <16f877a.h> #fuses NOWDT,HS,PUT,NOPROTECT #device 16f877a*=16 adc=8 #use delay(clock=20000000) int8 y,i; int8 Cot1[]={0b00001110, 0b00010001, 0b00000001, 0b00000001, 0b00000001, 0b00010001, 0b00001110}; int8 Cot2[]={0b00001110, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00001110}; int8 Cot3[]={0b00001111, 0b00010001, 0b00010001, 0b00001111, 0b00000001, 0b00000001, 0b00000001}; int8 Dong[]={0b11111110, 0b11111101, 0b11111011, 0b11110111, 0b11101111, 0b11011111, 0b10111111}; void sen595(int8 x) { #bit fla=x.7; output_high(PIN_B0); for (i=0;i<8;i++) { if (fla==1) output_high(PIN_B1); //Dich 1 bit vao 74HC595 else output_low(PIN_B1); output_low(PIN_B0); //Tao xung Clock output_high(PIN_B0); //tao xung Clock x = x<<1; //Dich trai 1 bit cua Data } output_low(PIN_B2); //Chot 8 bit cho dau ra output_high(PIN_B2); //Chot 8 bit cho dau ra } void main() { set_tris_b(0x00); while(1) { for (y=0;y<7;y++) { sen595(Cot1[y]); //Gui ky tu C sen595(Cot2[y]); //Gui ky tu I sen595(Cot3[y]); //Gui ky tu P output_d(Dong[y]); delay_ms(50); //Tao thoi gian tre } } } |
Các cao thủ đâu hít rùi ấy nhỉ? em tìm hoài mà ko thấy ai hết trơn. hichic
|
Nếu code của bạn chạy đúng khi chạy chậm thì khi chạy nhanh nó vẫn đúng thôi, nhưng Proteus có thể sẽ không thể hiện đúng nếu bạn quét quá nhanh (không phải vì thuật toán sai, mà chỉ là hiệu ứng hoạt nghiệm).
Để thử nghiệm code với thời gian quét thực, hãy dùng mạch thực. Thân, |
Lmd
[QUOTE=nguyenductu2310;26064]Em đang làm thử mạch hiển thị LED matrix, không hiểu tại sao khi cho nháy LED với thời gian chậm để kiểm tra thì LED báo đúng. Còn khi rút ngắn delay time, LED hiển thị không đúng như lúc chạy chậm. Các đại ca giúp em với!!! Please, em tìm lỗi mấy ngày rùi mà không được.
Đây là code của chương trình và mạch mô phỏng: #include <16f877a.h> #fuses NOWDT,HS,PUT,NOPROTECT #device 16f877a*=16 adc=8 #use delay(clock=20000000) int8 y,i; int8 Cot1[]={0b00001110, 0b00010001, 0b00000001, 0b00000001, 0b00000001, 0b00010001, 0b00001110}; int8 Cot2[]={0b00001110, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00001110}; int8 Cot3[]={0b00001111, 0b00010001, 0b00010001, 0b00001111, 0b00000001, 0b00000001, 0b00000001}; int8 Dong[]={0b11111110, 0b11111101, 0b11111011, 0b11110111, 0b11101111, 0b11011111, 0b10111111}; void sen595(int8 x) { #bit fla=x.7; output_high(PIN_B0); for (i=0;i<8;i++) { if (fla==1) output_high(PIN_B1); //Dich 1 bit vao 74HC595 else output_low(PIN_B1); output_low(PIN_B0); //Tao xung Clock output_high(PIN_B0); //tao xung Clock x = x<<1; //Dich trai 1 bit cua Data } output_low(PIN_B2); //Chot 8 bit cho dau ra output_high(PIN_B2); //Chot 8 bit cho dau ra } void main() { set_tris_b(0x00); while(1) { for (y=0;y<7;y++) { sen595(Cot1[y]); //Gui ky tu C sen595(Cot2[y]); //Gui ky tu I sen595(Cot3[y]); //Gui ky tu P output_d(Dong[y]); delay_ms(50); //Tao thoi gian tre } } }[/QUOTE cái này bạn viết xem cũng được đấy. đã chạy đúng rồi nhưng delay lớn quá làm chữ hơi giật thêm vào đoạn này nhé delay_ms(8); //Tao thoi gian tre output_d(0xff); chúc vui |
Cảm ơn đại ca nha! Thêm đoạn code vào chạy ổn lắm. Đúng yêu cầu lun!
Phù...! hết đau đầu mấy ngày rùi.... |
Xin chào các bạn. Tôi có 1 bảng led matran đa sắc trong nhà. Muốn thay đổi nội dung trực tiếp vào con 8515L ( bảng điện tử không có cổng com kết nối) thì dùng phần mềm gì để nạp dữ liệu mới vào? . Rất mong mọi người giúp đỡ!
|
Them chut xiu nua
[QUOTE=tungtot_vl;26081][QUOTE=nguyenductu2310;26064]Em đang làm thử mạch hiển thị LED matrix, không hiểu tại sao khi cho nháy LED với thời gian chậm để kiểm tra thì LED báo đúng. Còn khi rút ngắn delay time, LED hiển thị không đúng như lúc chạy chậm. Các đại ca giúp em với!!! Please, em tìm lỗi mấy ngày rùi mà không được.
Đây là code của chương trình và mạch mô phỏng: #include <16f877a.h> #fuses NOWDT,HS,PUT,NOPROTECT #device 16f877a*=16 adc=8 #use delay(clock=20000000) int8 y,i; int8 Cot1[]={0b00001110, 0b00010001, 0b00000001, 0b00000001, 0b00000001, 0b00010001, 0b00001110}; int8 Cot2[]={0b00001110, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00001110}; int8 Cot3[]={0b00001111, 0b00010001, 0b00010001, 0b00001111, 0b00000001, 0b00000001, 0b00000001}; int8 Dong[]={0b11111110, 0b11111101, 0b11111011, 0b11110111, 0b11101111, 0b11011111, 0b10111111}; void sen595(int8 x) { #bit fla=x.7; output_high(PIN_B0); for (i=0;i<8;i++) { if (fla==1) output_high(PIN_B1); //Dich 1 bit vao 74HC595 else output_low(PIN_B1); output_low(PIN_B0); //Tao xung Clock output_high(PIN_B0); //tao xung Clock x = x<<1; //Dich trai 1 bit cua Data } output_low(PIN_B2); //Chot 8 bit cho dau ra output_high(PIN_B2); //Chot 8 bit cho dau ra } void main() { set_tris_b(0x00); while(1) { for (y=0;y<7;y++) { sen595(Cot1[y]); //Gui ky tu C delay_ms(8); output_d(255); sen595(Cot2[y]); //Gui ky tu I delay_ms(8); output_d(255); sen595(Cot3[y]); //Gui ky tu P output_d(Dong[y]); delay_ms(8); output_d(255); } } }[/QUOTE ========================================== Voi code zay bay gio muon cho 3 cai chu cip chay thi sao ha ban , nen them zy zo them |
lam on ban goi cho minh file .hẽ duoc kg minh xuat ra sao chay kg duoc
|
không biết code điên hay proteus 7.4 điên
1 Attachment(s)
các anh chị giúp em code này với,khi em nối hai chân bên proteus thì led thứ 2,4 bên phải qua nó không chạy.ngắt ra thì nó chạy nếu như code em sai sửa như thế nào...
|
Sao không ai giúp em vậy?
|
[QUOTE=tungtot_vl;26081]
Trích:
|
Các cao thủ vừa rồi kiếm được nhiều nên rủ nhau đi nghỉ mát hết rồi
|
không ai giúp em vậy ,cho em ý kiến đi
|
cái này muốn dịch chữ phải làm sao
#include <16f877a.h> #fuses NOWDT,HS,PUT,NOPROTECT #device 16f877a*=16 adc=8 #use delay(clock=20000000) int8 y,i; int8 Cot1[]={0b00001110, 0b00010001, 0b00000001, 0b00000001, 0b00000001, 0b00010001, 0b00001110}; int8 Cot2[]={0b00001110, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00001110}; int8 Cot3[]={0b00001111, 0b00010001, 0b00010001, 0b00001111, 0b00000001, 0b00000001, 0b00000001}; int8 Dong[]={0b11111110, 0b11111101, 0b11111011, 0b11110111, 0b11101111, 0b11011111, 0b10111111}; void sen595(int8 x) { #bit fla=x.7; output_high(PIN_B0); for (i=0;i<8;i++) { if (fla==1) output_high(PIN_B1); //Dich 1 bit vao 74HC595 else output_low(PIN_B1); output_low(PIN_B0); //Tao xung Clock output_high(PIN_B0); //tao xung Clock x = x<<1; //Dich trai 1 bit cua Data } output_low(PIN_B2); //Chot 8 bit cho dau ra output_high(PIN_B2); //Chot 8 bit cho dau ra } void main() { set_tris_b(0x00); while(1) { for (y=0;y<7;y++) { sen595(Cot1[y]); //Gui ky tu C sen595(Cot2[y]); //Gui ky tu I sen595(Cot3[y]); //Gui ky tu P output_d(Dong[y]); delay_ms(50); //Tao thoi gian tre } } }[/QUOTE cái này bạn viết xem cũng được đấy. đã chạy đúng rồi nhưng delay lớn quá làm chữ hơi giật thêm vào đoạn này nhé delay_ms(8); //Tao thoi gian tre output_d(0xff); chúc vui |
CHẠY tử trên xuống dưới và ngược lại thì dịch hàng.
còn chạy từ trái sang phải thì vẫn đang nghĩ cách. mình có 1 điều là nếu dùng 595 thì độ dài chữ sẽ chỉ dài bằng độ dài của matran led .nhưng khi nhìn thấy biển quảng cáo ở ngoài đường thì độ dài chữ là lớn hơn.vẫn hắc mắc chỗ đó,mong mọi người giải đáp. bác nào làm được chữ chạy trái phải rồi thì mong chỉ bảo. |
Múi giờ GMT. Hiện tại là 03:39 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam