|
Tài trợ cho PIC Vietnam |
PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip |
|
Ðiều Chỉnh | Xếp Bài |
|
25-05-2009, 09:40 AM | #1 |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 16
: |
Hiển thị ma trận LED
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 } } } |
25-05-2009, 01:47 PM | #2 |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 16
: |
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
|
25-05-2009, 02:33 PM | #3 |
Trưởng lão PIC bang
|
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,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
25-05-2009, 03:18 PM | #4 |
Đệ tử 6 túi
Tham gia ngày: Jul 2007
Bài gửi: 154
: |
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 |
25-05-2009, 05:01 PM | #5 |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 16
: |
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.... |
20-11-2009, 03:51 AM | #6 |
Nhập môn đệ tử
Tham gia ngày: Oct 2008
Bài gửi: 8
: |
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
__________________
THS |
14-07-2010, 11:47 PM | #7 | |
Đệ tử 3 túi
Tham gia ngày: Jun 2010
Bài gửi: 57
: |
[QUOTE=tungtot_vl;26081]
Trích:
|
|
12-06-2009, 10:26 AM | #8 |
Nhập môn đệ tử
Tham gia ngày: Mar 2009
Bài gửi: 5
: |
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 đỡ!
|
31-05-2010, 10:01 PM | #9 |
Nhập môn đệ tử
Tham gia ngày: May 2010
Bài gửi: 1
: |
lam on ban goi cho minh file .hẽ duoc kg minh xuat ra sao chay kg duoc
|
05-06-2010, 03:05 PM | #10 |
Đệ tử 5 túi
Tham gia ngày: Feb 2010
Bài gửi: 94
: |
không biết code điên hay proteus 7.4 điên
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...
thay đổi nội dung bởi: HAI1817, 16-06-2010 lúc 04:42 PM. |
14-06-2010, 07:07 PM | #11 |
Đệ tử 5 túi
Tham gia ngày: Feb 2010
Bài gửi: 94
: |
Sao không ai giúp em vậy?
|
30-07-2010, 03:42 PM | #12 |
Đệ tử 1 túi
Tham gia ngày: Apr 2010
Bài gửi: 11
: |
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
__________________
--^--^--Phan Đình Đáo--^--^-- K43TĐH.01 ĐH Kỹ Thuật Công Nghiệp Phone number:0974432158 |
05-08-2010, 03:53 PM | #13 |
Đệ tử 5 túi
Tham gia ngày: Feb 2010
Bài gửi: 94
: |
không ai giúp em vậy ,cho em ý kiến đi
|
05-08-2010, 03:55 PM | #14 |
Đệ tử 5 túi
Tham gia ngày: Feb 2010
Bài gửi: 94
: |
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 |
05-08-2010, 04:13 PM | #15 |
Đệ tử 3 túi
Tham gia ngày: Jun 2010
Bài gửi: 57
: |
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. |
|
|