?? lcd_12864.h
字號:
#include "hazicode.h"
#include"englishcode.h"
#include<absacc.h>
#define STX 0x02
#define ETX 0x03
#define EOT 0x04
#define ENQ 0x05
#define BS 0x08
#define CR 0x0D
#define LF 0x0A
#define DLE 0x10
#define ETB 0x17
#define SPACE 0x20
#define COMMA 0x2C
#define TRUE 1
#define FALSE 0
#define HIGH 1
#define LOW 0
#define LCMDW XBYTE[0x8000] //數據口
#define LCMCW XBYTE[0x8800] //命令口
// T6963C 命令定義
#define LC_CUR_POS 0x21 // 光標位置設置
#define LC_CGR_POS 0x22 // CGRAM 偏置地址設置
#define LC_ADD_POS 0x24 // 地址指針位置
#define LC_TXT_STP 0x40 // 文本區首址
#define LC_TXT_WID 0x41 // 文本區寬度
#define LC_GRH_STP 0x42 // 圖形區首址
#define LC_GRH_WID 0x43 // 圖形區寬度
#define LC_MOD_OR 0x80 // 顯示方式邏輯或
#define LC_MOD_XOR 0x81 // 顯示方式邏輯異或
#define LC_MOD_AND 0x82 // 顯示方式邏輯與
#define LC_MOD_TCH 0x83 // 顯示方式文本特征
#define LC_DIS_SW 0x90 // 顯示開關D0=1/0:光標閃爍啟用/禁用
// D1=1/0:光標顯示啟用/禁用
// D2=1/0:文本顯示啟用/禁用
// D3=1/0:圖形顯示啟用/禁用
#define LC_CUR_SHP 0xA0 // 光標形狀選擇0xA0-0xA7表示光標占的行數
#define LC_AUT_WR 0xB0 // 自動寫設置
#define LC_AUT_RD 0xB1 // 自動讀設置
#define LC_AUT_OVR 0xB2 // 自動讀/寫結束
#define LC_INC_WR 0xC0 // 數據一次寫地址加1
#define LC_INC_RD 0xC1 // 數據一次讀地址加1
#define LC_DEC_WR 0xC2 // 數據一次寫地址減1
#define LC_DEC_RD 0xC3 // 數據一次讀地址減1
#define LC_NOC_WR 0xC4 // 數據一次寫地址不變
#define LC_NOC_RD 0xC5 // 數據一次讀地址不變
#define LC_SCN_RD 0xE0 // 屏讀
#define LC_SCN_CP 0xE8 // 屏拷貝
#define LC_BIT_OP 0xF0 // 位操作
#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char
code uchar const uPowArr[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
// ASCII 字模寬度及高度定義
#define ASC_CHR_WIDTH 8
#define ASC_CHR_HEIGHT 16
// ASCII 字模顯示為8*16
#define CHAR_HEIGHT 16 //根據漢字大小設定CHAR_HIGHT
#define CHAR_LONG 16 //根據漢字大小設定CHAR_LONG
#define LCD_XMAX 128 //橫向最多點數(選取FG12864液晶,橫向最多128個點)
#define LCD_YMAX 64 //縱向最多點數(選取FG12864液晶,縱向最多64個點)
//以上兩個宏定義當液晶不同時則宏定義不同
unsigned char turnf[8] = {7,6,5,4,3,2,1,0};
uchar gCurRow,gCurCol; // 當前行列存儲行高16 點,列寬8點
/************************************************/
/* 取當前行數據*/ // 當前行列存儲行高16 點列寬8點
/************************************************/
uchar fnGetRow(void)
{
return(gCurRow);
}
/************************************************/
/* 取當前列數據*/
/************************************************/
unsigned char fnGetCol(void)
{
return(gCurCol);
}
/************************************************/
/* 狀態位STA1,STA0判斷讀寫指令和讀寫數據*/
/* 在讀寫數據或者寫入命令前必須保證均為1 */
/************************************************/
unsigned char fnSTA01(void)
{
uchar i;
for(i=10;i>0;i--)
{
if((LCMCW & 0x03) == 0x03) // 讀取狀態
{
break;
}
}
return(i); // 若返回零說明錯誤
}
/********************************************/
/* 檢查STA2,如果STA2=1 為自動讀狀態*/
/*****************************************/
uchar fnSTA2(void)
{
unsigned char i;
for(i=10;i>0;i--)
{
if((LCMCW & 0x04) == 0x04)
{
break;
}
}
return(i); // 若返回零說明錯誤
}
/***********************************************/
/* 狀態位STA3 判斷STA3 = 1 數據自動寫狀態*/
/***********************************************/
unsigned char fnSTA3(void)
{
unsigned char i;
for(i=10;i>0;i--)
{
if((LCMCW & 0x08) == 0x08)
{
break;
}
}
return(i); // 若返回零說明錯誤
}
/************************************************/
/* 狀態位STA6 判斷STA6 =1 屏讀/屏拷貝狀態*/
/************************************************/
uchar fnSTA6(void)
{
unsigned char i;
for(i=10;i>0;i--)
{
if((LCMCW & 0x40) == 0x40)
{
break;
}
}
return(i); // 若返回零說明錯誤
}
/************************/
/* 寫雙參數的指令*/
/************************/
unsigned char fnPR1(unsigned char uCmd,unsigned char uPar1,unsigned char uPar2)
{
if(fnSTA01() == 0)
{
return 1;
}
LCMDW=uPar1;
if(fnSTA01() == 0)
{
return 2;
}
LCMDW=uPar2;
if(fnSTA01() == 0)
{
return 3;
}
LCMCW=uCmd;
return(0); // 返回0 成功
}
/************************/
/* 寫單參數的指令*/
/************************/
unsigned char fnPR11(unsigned char uCmd,unsigned char uPar1)
{
if(fnSTA01() == 0)
{
return 1;
}
LCMDW=uPar1;
if(fnSTA01() == 0)
{
return 2;
}
LCMCW=uCmd;
return(0); // 返回0 成功
}
/************************/
/* 寫無參數的指令*/
/************************/
unsigned char fnPR12(unsigned char uCmd)
{
if(fnSTA01() == 0)
{
return 1;
}
LCMCW=uCmd;
return(0); // 返回0 成功
}
/************************/
/* 寫數據*/
/************************/
unsigned char fnPR13(unsigned char uData)
{
if(fnSTA3() == 0)
{
return 1;
}
LCMDW=uData;
return(0); // 返回0 成功
}
/************************/
/* 讀數據*/
/************************/
unsigned char fnPR2(void)
{
// unsigned char temp;
if(fnSTA01() == 0)
{
return 1; // 獲取狀態如果狀態錯
}
return(LCMDW); // 返回數據
}
/************************/
/* 設置當前地址*/ //RAM里
/************************/
void fnSetPos(unsigned char urow, unsigned char ucol)
{
unsigned int iPos;
iPos = (unsigned int)urow * 30 + ucol; //?~~~~~~~~~~~~~~~~~~
fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
gCurRow = urow;
gCurCol = ucol;
}
/**********************/
/* 設置當前顯示行列*/
/**********************/
void cursor(unsigned char uRow, unsigned char uCol)
{
//fnSetPos(uRow * 16, uCol);
fnSetPos(uRow * ASC_CHR_HEIGHT, uCol);
}
/*********************/
/* 清屏*/
/*********************/
void LCDClr(void)
{
unsigned int i;
fnPR1(LC_ADD_POS,0x00,0x00); // 置地址指針為從零開始
fnPR12(LC_AUT_WR); // 自動寫
//for(i=0;i<240*64/8;i++) // 清一屏
for(i=0;i<LCD_XMAX*LCD_YMAX*2/ASC_CHR_WIDTH;i++) // 清一屏
{
fnSTA3();
//fnPR13(0x55);//測試時用
fnPR13(0x0); // 寫數據實際使用時請將0x55 改成0x0
}
fnPR12(LC_AUT_OVR); // 自動寫結束
fnPR1(LC_ADD_POS,0x00,0x00); // 重置地址指針
gCurRow = 0; // 置地址指針存儲變量
gCurCol = 0;
}
/************************/
/* LCM 初始化*/
/************************/
char LCDInit(void)
{
if(fnPR1(LC_TXT_STP,0x00,0x00) != 0) // 文本顯示區首地址
{
return (0xff);
}
fnPR1(LC_TXT_WID,0x1E,0x00); // 文本顯示區寬度
//fnPR1(LC_TXT_WID,0x10,0x00); // 文本顯示區寬度
fnPR1(LC_GRH_STP,0x00,0x00); // 圖形顯示區首地址
fnPR1(LC_GRH_WID,0x1E,0x00); // 圖形顯示區寬度
fnPR12(LC_CUR_SHP | 0x01); // 光標形狀
fnPR12(LC_MOD_OR); // 顯示方式設置
fnPR12(LC_DIS_SW | 0x08); // 顯示開關設置
return(0);
}
/*======================*/
/* 延時*/
/*======================*/
void shortdelay(unsigned int tt)
{
unsigned char i;
while (tt)
{
i=100;
while (i)
{
i--;
}
tt--;
}
}
/*********************************
單個字符的顯示
**********************************/
void Disponechar(unsigned char x,unsigned char y, char character)
{
unsigned char c1,cData;
unsigned char j,uRow,uCol;
c1=character;
uRow = y;
uCol = x;
fnSetPos(uRow*ASC_CHR_HEIGHT,uCol); //起點定位
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -