View Single Post
Old 29-03-2008, 11:22 PM   #14
footballer
Đệ tử 1 túi
 
Tham gia ngày: Dec 2007
Bài gửi: 16
:
Em đã sử dụng được thư viện xlcd để giao tiếp với lcd SD-DM1602A. Thư viện xlcd được viết ra chỉ hỗ trợ cho một số loại chip sau đây( theo tài liệu dsPIC language tools library):
Code:
• dsPIC30F5011
• dsPIC30F5013
• dsPIC30F6010
• dsPIC30F6011
• dsPIC30F6012
• dsPIC30F6013
• dsPIC30F6014
Tuy thế em thấy có thể thay đổi một chút trong code của các hàm của thư viện xlcd để các hàm này có thể dùng được với chip 30f4011.
- Copy file xlcd.h( trong thư mục "Microchip\MPLAB C30\src\peripheral_30F_24H_33F\include") vào thư mục của project. Chỉnh sửa lại file xlcd.h như sau:
+Bỏ cặp chỉ lệnh: #if defined(_RD10) ..#endif. (Vì 30f4011 không có chân RD10)
+Bỏ cặp chỉ lệnh: #if defined(_RD8) && defined(_RD9) && defined(_RD10)... #endif
+Sửa lại phần mã định nghĩa các chân RS,RW,EN, DB0,..DB7 cho phù hợp với mạch của ta. Trong thử nghiệm của em, em chọn RS-RD0, RW-RD1, EN-RD2, DB0..DB7-RB0..RB7.
- Include file xlcd.h vào trong file nguồn:
Code:
#include "xlcd.h"
- Copy tất cả các file .c trong thư mục "MPLAB C30\src\peripheral_30F_24H_33F\src\pmc\xlcd" vào thư mục của project. Add tất cả các file này vào trong project.
- Mở các file .c đã nói ở trên và bỏ đi các chỉ lệnh biên dịch có điều kiện như sau:
Code:
#ifdef _RD10                                -> bỏ
...
...
...
#else                                                  ->bỏ
#warning "Does not build on this target"    ->bỏ
#endif                                                 ->bỏ
Từ bây giờ ta có thể sử dụng các hàm của thư viện xlcd để giao tiếp với lcd. Em đã thử với đoạn code sau đây, kết quả hiển thị trên lcd SD-DM1602A đúng như mong muốn.
Code:
#include <p30f4011.h>
#include "xlcd.h"

_FOSC(CSW_FSCM_OFF & FRC_PLL4);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_ON & BORV_27 & PWRT_16 & MCLR_DIS);
_FGS(CODE_PROT_OFF);

int main()
{
    OpenXLCD(EIGHT_BIT & TWO_LINE & SEG1_50_SEG51_100
             & COM1_COM16);    //Khoi tao lcd
    PutsXLCD("Hello world");   //Hien thi mot xau tren dong thu nhat
	
    SetDDRamAddr(0x40);        //Dua con tro ve dau dong thu hai
    PutsXLCD("30f4011-LCD");	//Hien thi mot xau tren dong thu hai
    
    while(1);
    return 0; 
}
Em cảm ơn anh Nam đã gợi ý cho cách giải quyết.

thay đổi nội dung bởi: footballer, 29-03-2008 lúc 11:45 PM.
footballer vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn