View Single Post
Old 16-10-2011, 12:07 AM   #10
ncthien09
Nhập môn đệ tử
 
Tham gia ngày: Feb 2011
Bài gửi: 5
:
Trích:
Nguyên văn bởi rocket42 View Post
OK!
bạn nhìn chương trình của bạn nhé.
Vòng lặp for (j=0;j<=7;j++) nó sẽ chạy xong mới tới lệnh PortC. Điều đó có nghĩa là nếu bạn để lệnh PORTC=j+8; ở ngoài vòng lặp for thì hiển nhiên luôn luôn PORTC=15 (vì kết thúc vòng lặp for thì j luôn bằng 7). và vì thế cho nên bạn sẽ ko thấy nó quét ở PortC nữa vì quá trình lặp lại là mãi mãi.
Chính vì thế để quét được thì bạn phải để lệnh PORTC=j+8 ở trong vòng lặp for. Nhưng thêm vào đó là đi kèm với lệnh delay. Thời gian delay là tùy ở bạn xem mạch của mình như thế nào để mắt ta có thể nhìn được ma trận led của bạn ko bị nhấp nháy. Với mô phỏng Proteus của bạn vẽ R cho là 1ms thì nhìn được. Nhưng có khi bạn làm mạch thật thì có thể lại ko được vì do linh kiện nữa. nên bạn linh động điều chỉnh sao cho hợp lí
Chương trình của bạn sửa lại như sau:
WHILE(1){
for (j=0;j<=7;j++)
{
if (j&1){
send_595(0x55);
// send_595(0x55);
// send_595(0x55);
}
else{
// send_595(0xAA);
// send_595(0xAA);
send_595(0xAA);}
PORTC=j+8;
delay_ms(1);
}
}

Thêm nữa là cùng 1 chức năng dịch dữ liệu ra led ma trận sao lại phải 3 lệnh send_595(0x55); đi kèm. Điều đó ko cần thiết và chằng logic tí nào
R gửi kèm cả file đã sửa đầy đủ. bạn download về dịch lại rồi nạp vào Proteus là OK
chúc vui!!!
trước hết mình xin cảm ơn bạn đã nhiệt tình giúp mình, thật ra vấn đề tại sao mình gửi 3 byte send_595 là vì module mình 3 led matrix mình đưa data đủ 3 byte rồi mới cho hiện thị hàng đó bằng lệnh PortC, còn bạn thì cho gửi 1 byte rồi out quét hàng luôn nên sẽ chỉ thấy 1 ma trận hiện đúng với hình ảnh của mình. thanks bạn rất nhìu!
ncthien09 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn