PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Chương trình dịch & các công cụ mô phỏng (http://www.picvietnam.com/forum/forumdisplay.php?f=10)
-   -   Cách mô phỏng led matrix (http://www.picvietnam.com/forum/showthread.php?t=4107)

thanhl0nglee 13-05-2009 12:29 AM

Cách mô phỏng led matrix
 
1 Attachment(s)
Em đang học về led metrix.Muốn thực hành xíu,mà cái mạch nạp JDM nó bị lỗi j j ko biết.Nên phải dùng Proteus để mô phỏng.Mà sao mô phỏng cái chữ A mà ko đc.Hjc hjc
Nhờ các bác chị hộ.Bác nào có tài liệu về mô phỏng Proteus thì cho em với.
Đây là đoạn code em viết
Code:

#include <16F877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#device 16F877*=16 ADC=8
#use delay(clock=4000000)
#use fast_io(a)
#byte porta=0x05
#use fast_io(b)
#byte portb=0x06
#use fast_io(c)
#byte portc=0x07
#use fast_io(d)
#byte portd=0x08
#use fast_io(e)
#byte porte=0x09
int data[] = {0x00,0xf8,0x24,0x22,0x24,0xf8,0x00,0x00};
int quet[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
int i;
void main(void)
{
  set_tris_b(0x00);
  set_tris_d(0x00);
  while(1)
      {
        for(i=0;i<8;i++)
            {
              portb = data[i];
              portd = quet[i];
              delay_ms(100);
              portb = 0x00;
            }
      }
}


phandinh 13-05-2009 12:42 AM

Mình không tìm hiểu led Ma trận dùng PIC nên không giúp bạn dc.
Có file hướng dẫn Proteus này hy vọng giúp ích cho bạn
http://rapidshare.com/files/23216040...s_7.1.rar.html

staythesame 13-05-2009 01:18 AM

Để giả lập Led matrix trong Proteus bạn cần chú ý về chân quy đinh của nó. Led matrix xanh và đỏ là khác nhau. Đối với Led matrix xanh : 8 chân phía trên là hàng , 8 chân phía dưới là cột. Led matrix đỏ thì ngược lại ; 8 chân trên là cột, 8 chân dưới là hàng. Để led sáng : chân hàng 0, chân cột 1.

Bạn xem lại trong code để bố trí chân cho phù hợp: xuất data ở port B, quét theo port D

thanhl0nglee 13-05-2009 11:47 PM

Trích:

Nguyên văn bởi staythesame (Post 25680)
Để giả lập Led matrix trong Proteus bạn cần chú ý về chân quy đinh của nó. Led matrix xanh và đỏ là khác nhau. Đối với Led matrix xanh : 8 chân phía trên là hàng , 8 chân phía dưới là cột. Led matrix đỏ thì ngược lại ; 8 chân trên là cột, 8 chân dưới là hàng. Để led sáng : chân hàng 0, chân cột 1.

Bạn xem lại trong code để bố trí chân cho phù hợp: xuất data ở port B, quét theo port D

Em cũng xuất data ở porb và quet ở port d mà
Bác có thể chỉ cụ thể giùm em cái đc ko.

staythesame 16-05-2009 12:11 AM

Mình đã thử làm lại bài này cho bạn. Về giả lập ko có vấn đề gi`. Vấn đề là do code của ban.
Phần delay bạn để
delay_ms(100);
thì quá nhiều những 0,1s. Bạn chuyển sang delay_us(50) thì sẽ ok.
Chúc bạn thành công !

thanhl0nglee 16-05-2009 01:36 AM

Bạn có thể nói rõ hơn cách xác định chân,cách mắc đc ko.Mình đã sửa lại chỗ delay,nhưng mà khi mô phỏng nó vẫn ko ra hình thù j cả.Thực ra đây là bài tập thực hành hiển thị chữ A bằng led matrix nhưng do mình ko biết cách mô phỏng nên mới ra thế này.Bạn làm ơn chỉ rõ hơn giùm mình cái nhé.
Bạn chỉ cách xác định chân,các mắc rồi cho mình cái hình của bạn nhé

staythesame 17-05-2009 12:04 AM

1 Attachment(s)
OK! Minh mắc mạch theo sơ đồ của bạn. Ở đây bạn quét theo cột(do nối portD vào 8 chân cột phía dưới của Ledmatrix xanh), do chân cột của của Led matrix xanh là chân anot =>đối với mỗi cột được chọn sáng khi xuất dữ liệu cho cột thì bit 0 làm đèn led trên cột đó sáng, bít 1 thì tắt. Trong trường hợp bạn muốn xuất ra chữ A thì trong code phần data () bạn phải đảo ngược 1->0 , 0->1 . Vd: từ 0x00 ->0xff .
Đây là code mình đã sửa lại cho bạn để xuất chữ A
Code:

#include <16F877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#device 16F877*=16 ADC=8
#use delay(clock=4000000)
#use fast_io(a)
#byte porta=0x05
#use fast_io(b)
#byte portb=0x06
#use fast_io(c)
#byte portc=0x07
#use fast_io(d)
#byte portd=0x08
#use fast_io(e)
#byte porte=0x09
int data[] = {224,219,187,123,187,219,224,255}; //đa chinh lai cho nay doi bit 1->0, 0->1
int quet[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
int i;

void main(void)
{
  set_tris_b(0x00);
  set_tris_d(0x00);
  while(1)
      {
        for(i=0;i<8;i++)
            {
              portb = data[i];             
              portd = quet[i];
              delay_us(50);
              output_d(0);output_b(0);
            }
      }
}


thaithien 17-05-2009 12:19 AM

Gửi cả file proteus lên luôn để dễ xử lý đi,và cũng để người khác tham khảo nữa.Đơ mất thời gian vẽ mạch trở lại.

nguyenyeu11 18-05-2009 01:01 AM

co bac nao co so do nguyen ly mach ko cho em voi

nguyenductu2310 25-05-2009 03:04 PM

2 Attachment(s)
Mô phỏng hiển thị chữ lưu ý chân linh kiện thui, nếu ko rõ thì test thử với mạch đơn giản ấy.
Mình viết tạm chương trình hiển thị chữ A. bạn coi thử nhé!
Code:

#include <16f877a.h>
#fuses NOWDT,HS,PUT,NOPROTECT
#device 16f877a*=16 adc=8
#use delay(clock=20000000)
int8 Cot[]= {0b00011000, 0b00111100, 0b01100110, 0b11000011, 0b11111111, 0b11111111, 0b11000011, 0b11000011};
int8 Hang[]={0b11111110, 0b11111101, 0b11111011, 0b11110111, 0b11101111, 0b11011111, 0b10111111, 0b01111111};
int8 i;

void main()
{
set_tris_b(0x00);
set_tris_d(0x00);
while(1)
{
for (i=0; i<8; i++)
{
output_b(Hang[i]);
output_d(Cot[i]);
delay_ms(5);
}
}
}

nguyenductu2310 25-05-2009 03:06 PM

Quên mất! chương trình mình viết dùng CCS thuần, không phải định nghĩa thêm Port, có thế rút gọn hơn đó. Với chương trình nhỏ dùng ntn minh thấy tiện hơn.

loanmapdit 19-06-2009 04:42 PM

đọc không hiểu gì hết. mình còn gà lắm.mong các bạn giúp đỡ

Huynh Thanh San 19-06-2009 11:33 PM

Khong có zỳ là hay het
 
Trích:

Nguyên văn bởi thanhl0nglee (Post 25675)
Em đang học về led metrix.Muốn thực hành xíu,mà cái mạch nạp JDM nó bị lỗi j j ko biết.Nên phải dùng Proteus để mô phỏng.Mà sao mô phỏng cái chữ A mà ko đc.Hjc hjc
Nhờ các bác chị hộ.Bác nào có tài liệu về mô phỏng Proteus thì cho em với.
Đây là đoạn code em viết
Code:

#include <16F877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#device 16F877*=16 ADC=8
#use delay(clock=4000000)
#use fast_io(a)
#byte porta=0x05
#use fast_io(b)
#byte portb=0x06
#use fast_io(c)
#byte portc=0x07
#use fast_io(d)
#byte portd=0x08
#use fast_io(e)
#byte porte=0x09
int data[] = {0x00,0xf8,0x24,0x22,0x24,0xf8,0x00,0x00};
int quet[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
int i;
void main(void)
{
  set_tris_b(0x00);
  set_tris_d(0x00);
  while(1)
      {
        for(i=0;i<8;i++)
            {
              portb = data[i];
              portd = quet[i];
              delay_ms(100);
              portb = 0x00;
            }
      }
}


================================================== =============
NGUOI READ : Bạn chỉ có thể mo phong duoc 1 led matrix thoi hả . Khong the mo phong với 16 led matrix ah cùi thế

Huynh Thanh San 19-06-2009 11:34 PM

Có muon Hoc hoi kg hả.

0903579509 20-06-2009 07:16 AM

Trích:

Nguyên văn bởi Huynh Thanh San (Post 26923)
Có muon Hoc hoi kg hả.

Show hàng cho anh em mở rộng tầm mắt đi! Dấu làm gì cho nặng bụng.


Múi giờ GMT. Hiện tại là 01:16 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