PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Hỏi về LED MATRIX? (http://www.picvietnam.com/forum/showthread.php?t=1216)

dvnccbmacbt 23-06-2007 10:56 PM

Hỏi về LED MATRIX?
 
Chào mọi người!
Em vừa làm một chương trình nhỏ : hiển thị và dịch một chữ A trêm một led matrix 8x8.
Đây là sơ đồ mạch:
http://img515.imageshack.us/img515/1...500x359st7.jpg
Đây là chương trình em viết:
Chương trình hiển thị chữ A:
Code:

#include <16F877A.h>
#device *=16
#fuses NOWDT,HS,NOPROTECT
#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(a)
#use fast_io(d)
#use fast_io(e)

//============Khai bao bien toan cuc====================//
int8 a,i;
int8 const kytu[]={224,219,187,123,187,219,224,255}; //mã hóa chữ A
//=============khai bao ham====================//
void hienthi();
void xoa();
//============chuong trinh chinh==================//
void main()
{set_tris_b(0);output_b(0);
 set_tris_d(0);output_d(0);
 while(1)
 { for(i=0;i<24;i++)
    {hienthi();
    }
 }
}
//=============chuong trinh con=================//
//======chuong trinh hien thi kytu=======//
void hienthi()
{
 output_b(kytu[0]);output_d(0x1);xoa(); //thực hiện quét cột
 output_b(kytu[1]);output_d(0x2);xoa();//( nối với portD )để hiển thị
 output_b(kytu[2]);output_d(0x4);xoa();
 output_b(kytu[3]);output_d(0x8);xoa();
 output_b(kytu[4]);output_d(0x10);xoa();
 output_b(kytu[5]);output_d(0x20);xoa();
 output_b(kytu[6]);output_d(0x40);xoa();
 output_b(kytu[7]);output_d(0x80);xoa();
}

//======xoa ky tu=====//
void xoa()
{output_d(0);
}

Đây là kết quả chạy:
http://img118.imageshack.us/img118/6630/up002sm7.jpg

Em sửa chương trinh trên như sau để dịch chữ A:
Code:

#include <16F877A.h>
#device *=16
#fuses NOWDT,HS,NOPROTECT
#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(a)
#use fast_io(d)
#use fast_io(e)

//============Khai bao bien toan cuc====================//
int8 a,i;
int8 const kytu[]={224,219,187,123,187,219,224,255,255,255,255,255,255,255};
//=============khai bao ham====================//
void hienthi( int8 );
void xoa();
//============chuong trinh chinh==================//
void main()
{set_tris_b(0);output_b(0);
 set_tris_d(0);output_d(0);
 while(1)
 {for(a=0;a<8;a++)  //sau mỗi lần a tăng lên
  for(i=0;i<24;i++)  //thì bảng sẽ dịch 1 cột so với led matrix
    {hienthi(a);
    }
 }
}
//=============chuong trinh con=================//
//======chuong trinh hien thi kytu=======//
void hienthi(int8 k)
{
 output_b(kytu[k+0]);output_d(0x1);xoa();
 output_b(kytu[k+1]);output_d(0x2);xoa();
 output_b(kytu[k+2]);output_d(0x4);xoa();
 output_b(kytu[k+3]);output_d(0x8);xoa();
 output_b(kytu[k+4]);output_d(0x10);xoa();
 output_b(kytu[k+5]);output_d(0x20);xoa();
 output_b(kytu[k+6]);output_d(0x40);xoa();
 output_b(kytu[k+7]);output_d(0x80);xoa();
}
//======xoa ky tu=====//
void xoa()
{output_d(0);//output_b(0);
}

chương trinh không hiển thị và cũng không dịch chữ nào đi cả. Hàm hienthi(int8 k) bây giờ có tham số là k.
Em không hiểu được tại sao? Có phải do em truyền tham số cho hàm không đúng hay tại vì sao? Em đau đầu 2 ngày rồi mà chưa tìm ra.Mong các bác giúp đỡ. Em cảm ơn nhiều.

namqn 24-06-2007 12:37 AM

Nếu bạn chuyển phần khai báo của kytu[] vào trong hàm hienthi() thì sao?

Nếu bạn bỏ từ khóa const trong khai báo của kytu[] thì sao?

Tôi không dùng CCS C, do đó chỉ có thể gợi ý cho bạn thử các khả năng khác nhau, chứ không dịch thử code được.

Thân,

Chunhatonline 24-06-2007 10:40 AM

Bạn nên nghiên cứu về modun SPI và thanh ghi dich họ 74LS595 để có thể quét Led matrix hàng trăm cột và dùng mảng con trỏ để dịch chữ. Tôi không dùng CCS nên không sửa mã giùm bạn được.

thongdtk3 12-01-2009 12:22 AM

thử xem..tui cũng vừahọc matrix
Code:

#include <16F877A.h>
#include <def_877a.h>
#device *=16
#fuses NOWDT,HS,NOPROTECT
#use delay(clock=20000000)


//============Khai bao bien toan cuc====================//
int8 a,i,j,k;
//int8 const font=10;
//int8 const kytu[8]={224,219,187,123,187,219,224,255}; // A
int kytu[36]={0xff,0xff,0xf,0xff,0xff,0xff,0xf,0xff,
0X7f,0X7f,0x01,0X7f,0X7f,0Xff,0xdb,0xff,  //t
0XC1,0Xaf,0X6f,0Xaf,0XC1,  //chu a
0Xff,0x01,0Xef,0Xd7,0Xbb,0X7d, // chu k
0Xff,0xff,0xf,0xff,0xff,0xff,0xf,0xff};
INT8 MA_QUET[8]={0X1,0X2,0X4,0X8,0X10,0X20,0X40,0X80};

//int8 ma_quet[8]={0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x1};
//INT8 MA_QUET[10]={0b11111110,0b1111 1101,0b11111011,0b11110111,0b11101111,0b11011111,0b10111111,0X01111111};
//=============khai bao ham====================//





void main()
    {set_tris_b(0);output_b(0);
    set_tris_d(0);output_d(0);

while(1)

 {for(k=0;k<10;k++)


 //  for(j=0;j<1;j++)
 {
        for (a=0;a<=7;a++){
              portd=MA_QUET[a];
              Portb=kytu[i+a];
              delay_ms(5);
                }
              }
              i=i+1;
              delay_ms(50);
    }
 }


longtu 12-01-2009 08:50 AM

Nếu bạn them 1 con số cụ thể vào kytu[] xem? Ví dụ kytu[100].


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam