?? lcmdrv.h
字號:
/****************************************************************************
* 文件名:LCMDRV.C
* 功能:1602圖形液晶模塊驅動程序。使用LPC2148的GPIO口控制操作。
* 液晶模塊與LPC2148的連接如下所示:
* D0 (7) -- P1.16
* . -- .
* . -- .
* . -- .
* D7 (14) -- P1.23
* RW -- P0.28
* RS -- P0.22
* E -- P0.29
*
* R/W為0進行寫操作,為1時進行讀操作;
* RS為1表示數據傳送, 為0表示命令傳送;
* E讀寫脈沖;
*
*
* 作者:陳柱
* 日期:2007/11/4
****************************************************************************/
#include "config.h"
/* 定義總線起始的GPIO,即D0對應的GPIO值(P1.16) */
#define BUS_NO 8
/* 輸出總線數據宏定義 */
#define OutData(dat) IO0CLR =IO0CLR|0xFF<<BUS_NO; IO0SET =IO0SET|(dat&0xff)<<BUS_NO
/* 定義RS控制 */
#define LCM_RS 21
#define SRS() IO1SET =IO1SET|1<<LCM_RS
#define CRS() IO1CLR =IO1CLR|1<<LCM_RS
/* 定義R/W控制 */
#define LCM_RW 22
#define SRW() IO1SET =IO1SET|1<<LCM_RW
#define CRW() IO1CLR =IO1CLR|1<<LCM_RW
/* 定義E控制 */
#define LCM_E 23
#define SE() IO1SET = IO1SET|1<<LCM_E
#define CE() IO1CLR = IO1CLR|1<<LCM_E
/* 定義LCM操作的命令字 */
#define LCM_DISPON 0x3f /* 打開LCM顯示 */
#define LCM_STARTROW 0x02 /* 顯示起始行0,可以用LCM_STARTROW+x設置起始行。(x<64) */
#define LCM_ADDRSTRX 0xb8 /* 頁起始地址,可以用LCM_ADDRSTRX+x設置當前頁(即X)。(x<8) */
#define LCM_ADDRSTRY 0x40 /* 列起始地址,可以用LCM_ADDRSTRY+x設置當前列(即Y)。(x<64) */
/*********************************************************************************
* 名稱:DELAY5()
* 功能:軟件延時函數。用于LCM顯示輸出時序控制。
* 入口參數:無
* 出口參數:無
**********************************************************************************/
//void DELAY5(void)
//{ int i;
// for(i=0; i<100; i++);
//}
void DELAY5(void)
{
unsigned int TempCyc = 5552;
while(TempCyc--);
}
/***********************************************************************
* 名稱:LCM_WrCommand()
* 功能:寫命令子程序
* 入口參數:command 要寫入LCM的命令字
* 注:數據口為P0口(作IO口)
***********************************************************************/
void LCM_WrCommand(uint8 command)
{ CE();
CRS(); // RS=0,表示發送命令
CRW();
OutData(command);
DELAY5();
SE();
DELAY5();
CE();
DELAY5();
}
/***********************************************************************
* 名稱:LCM_WrData()
* 功能:寫數據子程序
* 入口參數:wrdata 要寫入LCM的數據
***********************************************************************/
void LCM_WrData(uint8 wrdata)
{ CE();
SRS(); // RS=1,表示發送數據
CRW();
OutData(wrdata);
DELAY5();
SE();
DELAY5();
CE();
DELAY5();
}
/***********************************************************************
* 名稱:LCM_WriteByte()
* 功能:向指定點寫數據(一字節)。
* 入口參數:x x坐標值(0-15)
* y y坐標值(0-1)
* wrdata 所要寫的數據
* 說明:
***********************************************************************/
void LCM_WriteByte(uint8 x, uint8 y, uint8 wrdata)
{ x = x&0x0f; // 限制X不能大于15,Y不能大于1
y = y&0x01;
if (y) x |= 0x40; //當要顯示第二行時地址碼+0x40;
x |= 0x80; // 算出指令碼
LCM_WrCommand(x); //這里不檢測忙信號,發送地址碼
LCM_WrData(wrdata);
}
/***********************************************************************
* 名稱:LCM_WriteString()
* 功能:向指定點寫數據(一字節)。
* 入口參數:x x坐標值(0-15)
* y y坐標值(0-1)
* wrstring 所要寫的數據
* 說明:
***********************************************************************/
void LCM_WriteString(uint8 x, uint8 y, char *wrstring)
{
unsigned char ListLength;
ListLength = 0;
y &= 0x01;
x &= 0x0f; //限制X不能大于15,Y不能大于1
while (wrstring[ListLength]>0x20) //若到達字串尾則退出,字符長度小于32
{
if (x <= 0x0f) //X坐標應小于0xf(15)
{
LCM_WriteByte(x, y, wrstring[ListLength]); //顯示單個字符
ListLength++;
x++;
}
}
}
/***********************************************************************
* 名稱:LCM_DispIni()
* 功能:LCM顯示初始化
* 入口參數:無
* 出口參數:無
* 注:
***********************************************************************/
void LCM_DispIni(void)
{
PINSEL0 &= ~(0xffff<<(2*BUS_NO));
PINSEL2 = PINSEL2 & (~0x08);
// 設置I/O為輸出方式
IO0DIR = IO0DIR|(0xff<<BUS_NO);
IO1DIR = IO1DIR|(1<<LCM_RW)|(1<<LCM_RS)|(1<<LCM_E);
OutData(0);
LCM_WrCommand(0x38); //三次顯示模式設置,不檢測忙信號
DELAY5();
LCM_WrCommand(0x38);
DELAY5();
LCM_WrCommand(0x38);
DELAY5();
LCM_WrCommand(0x38); //顯示模式設置,開始要求每次檢測忙信號
LCM_WrCommand(0x08); //關閉顯示
LCM_WrCommand(0x01); //顯示清屏
LCM_WrCommand(0x06); // 顯示光標移動設置
LCM_WrCommand(0x0C); // 顯示開及光標設置
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -