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:
- 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.