2011年2月21日 星期一

DIY - PIC:C18 LCD 函數庫模塊模組程式 (廿十一)

DIY - PICC18 LCD 函數庫模塊模組程式 (廿十一)

Microchip C18 有內置支持 LCD 液晶顯示器函數庫模塊 (xlcd.h),如不是使用標準 xlcd 函數庫內 PORTA 作為控制信號或數據傳輸,你需要修改 xlcd 文件並配置到你的項目上。在 \ mcc18\ħ 文件夾,有一個文件是xlcd.h,需要進行配置時,將該文件複製到你的工作文件夾和修改端口的設置,將需要修改項目設置為可編譯,以確保編譯器讀取你的修改文件。

LCD 函數功能:

Function
Description
BusyXLCD
Is the LCD controller busy?
OpenXLCD
Configure the I/O lines used for controlling the LCD and initialize the LCD
putcXLCD
Write a byte to the LCD controller
putsXLCD
Write a string from data memory to the LCD
putrsXLCD
Write a string from program memory to the LCD
ReadAddrXLCD
Read the address byte from the LCD controller
ReadDataXLCD
Read a byte from the LCD controller
SetCGRamAddr
Set the character generator address
SetDDRamAddr
Set the display data address
WriteCmdXLCD
Write a command to the LCD controller
WriteDataXLCD
Write a byte to the LCD controller
  
單修改 xlcd.h 是沒有用的,因為 xlcd.lib 並不會因此而改變。正確的作法應該將所用到的 xlcd.c 的檔案加入你的 Project 中並修改 xlcd.h 的腳位定義後重新編譯。將 xlcd 的原始程式 (C:\mcc18\src\traditional\pmc\xlcd ) 要使用的檔案考到目前的 Project 目錄後再加入到 Project 中,修改 xlcd.h 的定義後重新編譯即可。
用戶可以使用不同的頻率來作系統時鐘,不同的 LCD 塊模,延誤時間也有分別,所以 xlcd 函數庫的 LCD 延誤時間是要用戶設定。副程式包括 DelayFor18TCY (延誤18週期)DelayPORXLCD (延誤至少15毫秒 = 15ms) DelayXLCD  (延誤至少5毫秒 = 5ms)

程式

#include
void DelayFor18TCY( void )
{
Nop(); Nop(); Nop(); Nop();
Nop(); Nop(); Nop(); Nop();
Nop(); Nop(); Nop(); Nop();
Nop(); Nop();
}
void DelayPORXLCD (void)
{
Delay1KTCYx(60); // Delay of 15ms
// Cycles = (TimeDelay * Fosc) / 4
// Cycles = (15ms * 16MHz) / 4
// Cycles = 60,000
return;
}
void DelayXLCD (void)
{
Delay1KTCYx(20); // Delay of 5ms
// Cycles = (TimeDelay * Fosc) / 4
// Cycles = (5ms * 16MHz) / 4
// Cycles = 20,000
return;
}
注意:
  • 標準 xlcd 函數庫用 PORTA 作為控制信號或數據傳輸。用戶選擇其它 PORT 時,必須調用函數
  • 如果選擇 non-blocking mode 模式,用戶必須調用函數,並用 XLCDIsBusy 檢查狀態。在 blocking mode 模式,並用delay polling 作檢查標誌狀態。
  • 用戶可以通過 R/ W 引腳接地,以保留多一個微控制器引腳,但是這樣用戶將無法讀取命令,如 XLCDReadDataXLCDIsBusy 等。
  • xlcd 函數庫不提供功能 LCD 延誤。用戶需要設定寫入延遲功能,如DelayFor18TCY (延誤18週期)DelayPORXLCD (延誤至少15毫秒) DelayXLCD  (延誤至少5毫秒)
  • 基本上 C18 所附的 xlcd 函數是可以動作的,只不過它都是用 Large Mode compile 的,所以每次傳指標給 xlcd 時都必須指定為 FAR 的型態才行。因為xlcd 有檢查 R/W 腳位的做為 LCD Busy 的檢查,所以你必須在修改 I/O 接腳的宣告,可以修改 xlcd.h 來完成。

2011 02 21 天氣報告 
氣溫:14.0 @ 09:00 
相對濕度:百分之88% 
天氣:天氣寒冷及有微雨

沒有留言:

張貼留言