PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 25-05-2009, 09:40 AM   #1
nguyenductu2310
Đệ tử 1 túi
 
Tham gia ngày: Feb 2008
Bài gửi: 16
:
Angry 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
}
}
}
Hình Kèm Theo
File Type: jpg 74HC595.JPG (251.4 KB, 375 lần tải)
File Kèm Theo
File Type: rar 2x74HC595.rar (15.5 KB, 845 lần tải)
nguyenductu2310 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2009, 01:47 PM   #2
nguyenductu2310
Đệ 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
nguyenductu2310 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2009, 02:33 PM   #3
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2009, 03:18 PM   #4
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
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
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2009, 05:01 PM   #5
nguyenductu2310
Đệ tử 1 túi
 
Tham gia ngày: Feb 2008
Bài gửi: 16
:
Thumbs up

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....
nguyenductu2310 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-11-2009, 03:51 AM   #6
Huynh Thanh San
Nhập môn đệ tử
 
Huynh Thanh San's Avatar
 
Tham gia ngày: Oct 2008
Bài gửi: 8
:
Talking 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
Huynh Thanh San vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-07-2010, 11:47 PM   #7
manhdktd
Đệ tử 3 túi
 
manhdktd's Avatar
 
Tham gia ngày: Jun 2010
Bài gửi: 57
:
[QUOTE=tungtot_vl;26081]
Trích:
Nguyên văn bởi nguyenductu2310 View Post
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ái này muốn chạy thì làm thế nào hả bấc.
manhdktd vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-06-2009, 10:26 AM   #8
vanluong2003
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 đỡ!
vanluong2003 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-05-2010, 10:01 PM   #9
tinhanh85
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
tinhanh85 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-06-2010, 03:05 PM   #10
HAI1817
Đệ tử 5 túi
 
HAI1817's Avatar
 
Tham gia ngày: Feb 2010
Bài gửi: 94
:
Question 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...
File Kèm Theo
File Type: rar matrix1.rar (69.9 KB, 221 lần tải)

thay đổi nội dung bởi: HAI1817, 16-06-2010 lúc 04:42 PM.
HAI1817 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-06-2010, 07:07 PM   #11
HAI1817
Đệ tử 5 túi
 
HAI1817's Avatar
 
Tham gia ngày: Feb 2010
Bài gửi: 94
:
Question

Sao không ai giúp em vậy?
HAI1817 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-07-2010, 03:42 PM   #12
phandinhdao3230
Đệ tử 1 túi
 
phandinhdao3230's Avatar
 
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
phandinhdao3230 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-08-2010, 03:53 PM   #13
HAI1817
Đệ tử 5 túi
 
HAI1817's Avatar
 
Tham gia ngày: Feb 2010
Bài gửi: 94
:
không ai giúp em vậy ,cho em ý kiến đi
HAI1817 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-08-2010, 03:55 PM   #14
HAI1817
Đệ tử 5 túi
 
HAI1817's Avatar
 
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
HAI1817 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-08-2010, 04:13 PM   #15
manhdktd
Đệ tử 3 túi
 
manhdktd's Avatar
 
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.
manhdktd vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 01:49 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam