?? rd_lcd12864.h
字號:
/********************************************************
* 函數庫說明:12864LCD顯示基本驅動函數庫 *
* 版本: v1.0 *
* 作者: 王卓然 *
* 日期: 2005年10月7日 *
* 修改: 王卓然 *
* 修改日期: 2006年2月16日 *
* *
* 說明: *
* 1、提供基本的現實函數。 *
* 2、支持小組編程規范0.9版的要求。 *
* 3、對外提供接口,支持位操作。 *
* 4、注意,這里的X/Y是屏幕豎方時候的坐標軸, *
* 如果使用字庫,要使用轉制過后豎向掃描的 *
* 字庫。 *
* 5、為了兼容串行掃描方式,所以使用宏定義接口 *
* 的方法。同時也支持非位操作的方式。 *
********************************************************/
#ifndef _Use_LCD12864
# define _Use_LCD12864
/***********************
* 系 統 宏 定 義 *
***********************/
/*---------------------*
* 常 量 宏 定 義 *
*---------------------*/
#ifndef True
# define True 0x01
#endif
#ifndef False
# define False 0x00
#endif
#ifndef High
# define High 0x01
#endif
#ifndef Low
# define Low 0x00
#endif
#ifndef NULL
# define NULL 0x00
#endif
# define LCD12864_BUSY 7
# define LCD12864_ON_OFF 5
# define LCD12864_RESET 4
# define LCD12864_ON 0x3f
# define LCD12864_OFF 0x3e
#ifdef _LCD12864_WriteOnly
#ifndef LCD12864_WaitTime
# define LCD12864_WaitTime 5
#endif
#endif
/*---------------------*
* 動 作 宏 定 義 *
*---------------------*/
# define LCD12864_SetModel_Data SETBIT_RS;
# define LCD12864_SetModel_Command CLRBIT_RS;
# define LCD12864_SetModel_Read SETBIT_RW;SetDataPORTDirection_READ;
# define LCD12864_SetModel_Write CLRBIT_RW;SetDataPORTDirection_WRITE;
# define LCD12864_SetEnable SETBIT_E;
# define LCD12864_SetDisable CLRBIT_E;
# define LCD12864_ChooseCS1 SETBIT_CS1;CLRBIT_CS2;
# define LCD12864_ChooseCS2 SETBIT_CS2;CLRBIT_CS1;
# define LCD12864_ChooseBoth SETBIT_CS1;SETBIT_CS2;
# define LCD12864_Start CLRBIT_RST;
# define LCD12864_Reset SETBIT_RST;
# define LCD12864_SetLCD_ON setLCDOnOFF(LCD12864_ON);
# define LCD12864_SetLCD_OFF setLCDOnOFF(LCD12864_OFF);
/***********************
* 全局變量聲明區 *
***********************/
/***********************
* 系統函數聲明區 *
***********************/
void sendDataToLCD(char Data);
void sendCommandToLCD(char Command);
void waitForLCDReady(void);
void setLCDOnOFF(char State);
void setX(char X);
void setStartLine(char Y);
void setY(char Y);
void ClearLCD(void);
void LCDDraw(char X,char Y,char Data);
void LCD12864DispPicture(flash char *PIC,char Width,char Height,char Top,char Left);
/********************************************************
* 函數說明:檢測LCD狀態函數 *
********************************************************/
void waitForLCDReady(void)
{
#ifndef _LCD12864_WriteOnly
LCD12864_SetModel_Command;
LCD12864_SetModel_Read;
do
{
LCD12864_SetEnable;
}
while ((ReadDataPORT & (1<<LCD12864_BUSY)));
#else
char a = 0;
for (a=0;a<LCD12864_WaitTime;a++)
{
asm("nop");
}
#endif
}
/********************************************************
* 函數說明:發送數據函數 *
* 輸入: 需要發送的數據 *
********************************************************/
void sendDataToLCD(char Data)
{
waitForLCDReady();
LCD12864_SetModel_Data;
LCD12864_SetModel_Write;
//DataPORT = Data;
LCD12864_DataTransfer(Data);
LCD12864_SetEnable;
LCD12864_SetDisable;
}
/********************************************************
* 函數說明:發送指令函數 *
* 輸入: 需要發送的指令 *
********************************************************/
void sendCommandToLCD(char Command)
{
waitForLCDReady();
LCD12864_SetModel_Command;
LCD12864_SetModel_Write;
//DataPORT = Command;
LCD12864_DataTransfer(Command);
LCD12864_SetEnable;
LCD12864_SetDisable;
}
/********************************************************
* 函數說明:設置顯示列(豎向) *
* 輸入: 列號(0~7) *
********************************************************/
void setX(char X)
{
X &= 0x07;
X |= 0xb8;
sendCommandToLCD(X);
}
/********************************************************
* 函數說明:設置顯示行(豎向) *
* 輸入: 行號(0~127) *
********************************************************/
void setY(char Y)
{
Y &= 0x3f;
Y |= 0x40;
sendCommandToLCD(Y);
}
/********************************************************
* 函數說明:設置起始掃描行(豎向) *
* 輸入: 行號(0~63) *
********************************************************/
void setStartLine(char Y)
{
Y &= 0x07;
Y |= 0xc0;
sendCommandToLCD(Y);
}
/********************************************************
* 函數說明:設置LCD開關狀態 *
* 輸入: 開關狀態控制字 *
********************************************************/
void setLCDOnOFF(char State)
{
State |= 0x3e;
sendCommandToLCD(State);
}
/********************************************************
* 函數說明:LCD寫屏函數 *
* 輸入: 坐標(豎向),數據 *
********************************************************/
void LCDDraw(char X,char Y,char Data)
{
setX(X);
if (Y > 63)
{
LCD12864_ChooseCS2;
setY(Y-64);
}
else
{
LCD12864_ChooseCS1;
setY(Y);
}
sendDataToLCD(Data);
}
/********************************************************
* 函數說明:清屏函數 *
********************************************************/
void ClearLCD(void)
{
char a = 0,b = 0;
LCD12864_ChooseBoth;
setX(0);
setY(0);
for (a=0;a<8;a++)
{
setX(a);
for (b=0;b<64;b++)
{
sendDataToLCD(NULL);
}
}
}
/********************************************************
* 函數說明:12864初始化函數 *
********************************************************/
void LCD12864Init(void)
{
LCD12864_Start;
LCD12864_Reset;
LCD12864_ChooseBoth;
LCD12864_SetLCD_OFF;
setX(0);
setStartLine(0);
setY(0);
LCD12864_SetLCD_ON;
ClearLCD();
}
/********************************************************
* 函數說明:圖片顯示函數 *
* 輸入: 圖片數組,尺寸,顯示位置 *
********************************************************/
void LCD12864DispPicture(flash char *PIC,char Width,char Height,char Top,char Left)
{
char X = 0,Y = 0;
for (Y = 0;Y < (Height >>3);Y ++)
{
LCD12864_ChooseBoth;
setX(Y);
for (X = 0;X < Width;X ++)
{
if (X <64)
{
LCD12864_ChooseCS1;
setY(X);
}
else
{
LCD12864_ChooseCS2;
setY(X - 64);
}
sendDataToLCD(PIC[Y*Width+X]);
}
}
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -