![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 4 túi
Tham gia ngày: May 2007
Bài gửi: 65
: |
![]() 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: ![]() Đâ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); } ![]() 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); } 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. |
![]() |
![]() |
![]() |
#2 |
Trưởng lão PIC bang
|
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,
__________________
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 |
![]() |
![]() |
![]() |
#3 |
Nhập môn đệ tử
Tham gia ngày: Apr 2006
Bài gửi: 8
: |
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.
|
![]() |
![]() |
![]() |
#4 |
Nhập môn đệ tử
Tham gia ngày: Oct 2008
Bài gửi: 7
: |
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); } } thay đổi nội dung bởi: namqn, 12-01-2009 lúc 12:50 AM. |
![]() |
![]() |
![]() |
#5 |
Đệ tử 6 túi
|
Nếu bạn them 1 con số cụ thể vào kytu[] xem? Ví dụ kytu[100].
__________________
-------------------------------------------------------------------------------------- Phùng Minh Tuân Email: tuan.phmt@gmail.com "Cuộc đời sóng gió nuôi ta lớn Bao lần thất bại dạy ta khôn". |
![]() |
![]() |
![]() |
|
|