?? sc_t6963.c
字號:
/**************************************************************************
Copyright (c) HUST ESRI 1999. All Rights Reserved.
當(dāng)前版本: V1.1
作者: SeaCow
完成日期: 2007.6.24
取代版本: T6963driver_1.c
原作者: 魏雪
完成日期: 2007.4
摘要: NS240128A(T6963C控制器,32K顯存)液晶屏的驅(qū)動
[相關(guān)定義]
1.需要在事件在單片機引腳定義文件中添加以下引腳定義:
//LCD控制信號寄存器
#define T6963_COMMAND_REG P4 //DB0-7口
//LCD數(shù)據(jù)端口寄存器
#define T6963_WRITE_CODE_REG P5 //控制口0-4,依次為WR、RD、CE、CD、RST
#define T6963_WRITE_DATA_REG P5
#define T6963_READ_STATE_REG P5
#define T6963_READ_DATA_REG P5
2.需在工程中包含"SC_T6963.c"文件
3.需在主程序文件中加入:
#include "inc\SC_T6963.h" //LCD相關(guān)
**************************************************************************/
#include "inc\ConstDef.h" //硬件相關(guān)常數(shù)定義
#include "inc\SC_T6963.h"
//----------------------------------------------------------------------------------//
//--------------------------------基本輸入輸出函數(shù)----------------------------------//
//----------------------------------------------------------------------------------//
/***************************************************************
Function: // T6963_WriteCode
Description:// 向T6963控制器寫入一個命令字節(jié)
Input: // CODE:需要寫入的命令字節(jié)
***************************************************************/
void T6963_WriteCode(uchar uCode)
{
T6963_COMMAND_REG |= T6963_COMMAND_WRITE;
T6963_COMMAND_REG &= T6963_CE_ENABLE;
T6963_COMMAND_REG &= T6963_WR_ENABLE;
T6963_COMMAND_REG |= T6963_RD_DISABLE;
T6963_WRITE_CODE_REG = uCode;
// T6963_Delay(5); //at least 80ns
T6963_COMMAND_REG |= T6963_WR_DISABLE;
T6963_COMMAND_REG |= T6963_CE_DISABLE;
}
/***************************************************************
Function: // T6963_WriteData
Description:// 向T6963控制器寫入一個數(shù)據(jù)字節(jié)
Input: // DATA:需要寫入的數(shù)據(jù)字節(jié)
***************************************************************/
void T6963_WriteData(uchar uData)
{
T6963_COMMAND_REG &= T6963_DATA_WRITE;
T6963_COMMAND_REG &= T6963_CE_ENABLE;
T6963_COMMAND_REG &= T6963_WR_ENABLE;
T6963_COMMAND_REG |= T6963_RD_DISABLE;
T6963_WRITE_CODE_REG = uData;
// T6963_Delay(5); //at least 80ns
T6963_COMMAND_REG |= T6963_WR_DISABLE;
T6963_COMMAND_REG |= T6963_CE_DISABLE;
}
/***************************************************************
Function: // T6963_ReadState
Description:// 從T6963控制器讀取狀態(tài)字節(jié)
Return: // STATE:狀態(tài)字節(jié)
***************************************************************/
uchar T6963_ReadState(void)
{
uchar uSTATE = 0;
T6963_COMMAND_REG |= T6963_STATE_READ;
T6963_COMMAND_REG &= T6963_CE_ENABLE;
T6963_COMMAND_REG |= T6963_WR_DISABLE;
T6963_COMMAND_REG &= T6963_RD_ENABLE;
// T6963_Delay(5);
T6963_READ_STATE_REG = 0xFF;
uSTATE = T6963_READ_STATE_REG;
T6963_COMMAND_REG |= T6963_RD_DISABLE;
T6963_COMMAND_REG |= T6963_CE_DISABLE;
return uSTATE;
}
/***************************************************************
Function: // T6963_ReadData
Description:// 從T6963控制器讀取一個數(shù)據(jù)字節(jié)
Return: // DATA:數(shù)據(jù)字節(jié)
***************************************************************/
uchar T6963_ReadData(void)
{
uchar uData = 0;
T6963_COMMAND_REG &= T6963_DATA_READ;
T6963_COMMAND_REG &= T6963_CE_ENABLE;
T6963_COMMAND_REG |= T6963_WR_DISABLE;
T6963_COMMAND_REG &= T6963_RD_ENABLE;
// T6963_Delay(5);
T6963_READ_DATA_REG = 0xFF;
uData = T6963_READ_DATA_REG;
T6963_COMMAND_REG |= T6963_RD_DISABLE;
T6963_COMMAND_REG |= T6963_CE_DISABLE;
return uData;
}
//----------------------------------------------------------------------------------//
//----------------------------------檢查狀態(tài)函數(shù)------------------------------------//
//----------------------------------------------------------------------------------//
/***************************************************************
Function: // T6963_CheckRDWR
Description:// 讀寫狀態(tài)檢查
Calls: // T6963_ReadState
***************************************************************/
void T6963_CheckRDWR(void)
{
uchar uSTATE;
do
{
uSTATE = T6963_ReadState();
uSTATE &= 0x03;
}while(uSTATE != 0x03);
}
/***************************************************************
Function: // T6963_CheckAutoRD
Description:// 自動讀狀態(tài)檢查
Calls: // T6963_ReadState
***************************************************************/
void T6963_CheckAutoRD(void)
{
uchar uSTATE;
do
{
uSTATE = T6963_ReadState();
uSTATE &= 0x04;
}while(uSTATE != 0x04);
}
/***************************************************************
Function: // T6963_CheckAutoWR
Description:// 自動寫狀態(tài)檢查
Calls: // T6963_ReadState
***************************************************************/
void T6963_CheckAutoWR(void)
{
uchar uSTATE;
do
{
uSTATE = T6963_ReadState();
uSTATE &= 0x08;
}while(uSTATE != 0x08);
}
//----------------------------------------------------------------------------------//
//--------------------------------讀寫函數(shù)(命令,數(shù)據(jù))----------------------------//
//----------------------------------------------------------------------------------//
/***************************************************************
Function: // T6963_OutData
Description:// 輸出數(shù)據(jù)
Calls: // T6963_CheckRDWR T6963_WriteData
***************************************************************/
void T6963_OutData(uchar uData)
{
T6963_CheckRDWR();
T6963_WriteData(uData);
}
/***************************************************************
Function: // T6963_InData
Description:// 讀入數(shù)據(jù)
Calls: // T6963_CheckRDWR T6963_ReadData
Return: // DATA
***************************************************************/
uchar T6963_InData(void)
{
uchar uData;
T6963_CheckRDWR();
uData = T6963_ReadData();
return uData;
}
/***************************************************************
Function: // T6963_OutCommand0byte
Description:// 寫無參數(shù)命令
Calls: // T6963_CheckRDWR T6963_WriteCode
***************************************************************/
void T6963_OutCommand0byte(uchar uCommand)
{
T6963_CheckRDWR();
T6963_WriteCode(uCommand);
}
/***************************************************************
Function: // T6963_OutCommand1byte
Description:// 寫1個參數(shù)的命令
Calls: // T6963_OutData T6963_OutCommand0byte
***************************************************************/
void T6963_OutCommand1byte(uchar uData,uchar uCommand)
{
T6963_OutData(uData);
T6963_OutCommand0byte(uCommand);
}
/***************************************************************
Function: // T6963_OutCommand2byte
Description:// 寫2個參數(shù)的命令
Calls: // T6963_OutData T6963_OutCommand0byte
***************************************************************/
void T6963_OutCommand2byte(uchar Data1,uchar Data2,uchar uCommand)
{
T6963_OutData(Data1);
T6963_OutData(Data2);
T6963_OutCommand0byte(uCommand);
}
//----------------------------------------------------------------------------------//
//--------------------------------高層函數(shù)------------------------------------------//
//----------------------------------------------------------------------------------//
/***************************************************************
Function: // LcdCls
Description:// 液晶屏初始化
***************************************************************/
void LcdInit(void)
{
T6963_COMMAND_REG &= T6963_RESET_ENABLE;
T6963_Delay(50); //將RESET腳電平拉低保持5個時鐘周期以上(液晶屏使用6MHZ的晶振)
T6963_COMMAND_REG |= T6963_RESET_DISABLE; //LCM復(fù)位
T6963_OutCommand0byte(T6963_DISPLAY_OFF); //關(guān)閉顯示
T6963_OutCommand2byte(0x00,0x00,T6963_SET_TXT_HOME_ADD); //設(shè)置文本顯存頁起始地址至0x0000
T6963_OutCommand2byte(30,0x00,T6963_SET_TXT_AREA); //設(shè)置文本區(qū)域(字符列數(shù))
T6963_OutCommand2byte(0x00,0x10,T6963_SET_GRAPH_HOME_ADD); //設(shè)置圖形顯存頁起始地址至0x1000
T6963_OutCommand2byte(30,0x00,T6963_SET_GRAPH_AREA); //設(shè)置文本區(qū)域(點陣列數(shù)/8)
T6963_OutCommand0byte(T6963_CUR_8LINE); //設(shè)置光標形狀
T6963_OutCommand0byte(T6963_OR_MODE); //設(shè)置文本與圖形的疊加模式
// T6963_OutCommand0byte(T6963_DISPLAY_ON+T6963_GRAPH_ON+T6963_TXT_ON+T6963_BLINK_ON); //打開顯示
T6963_OutCommand0byte(T6963_DISPLAY_ON+T6963_GRAPH_ON+T6963_TXT_ON); //打開顯示
}
/***************************************************************
Function: // LcdCls
Description:// 清屏(清全部緩存)
***************************************************************/
void LcdCls(void)
{
uint i;
// uint j = 0;
T6963_OutCommand0byte(T6963_DATA_AUTO_WRITE);
for(i = 0x00;i < 0x8000;i++)
{
T6963_OutData(0x00);
// if(i % 0x1000 == 0) j++;
}
T6963_OutCommand0byte(T6963_AUTO_RESET);
}
/***************************************************************
Function: // LcdClsTxt
Description:// 清指定的文本頁
Input: TPage: 要顯示的文本頁號 (0-4)
***************************************************************/
void LcdClsTxt(uchar TPage)
{
uint Add = T6963_TXT_HOME_ADD + TPage * T6963_TXT_PAGESIZE;
uint i;
T6963_OutCommand2byte((uchar)Add, (uchar)(Add >> 8), T6963_SET_ADD_POINTER);
T6963_OutCommand0byte(T6963_DATA_AUTO_WRITE);
for(i = 0;i < T6963_TXT_PAGESIZE; i++)
{
T6963_OutData(0x00);
}
T6963_OutCommand0byte(T6963_AUTO_RESET);
}
/***************************************************************
Function: // LcdClsGraph
Description:// 清指定的文本頁
Input: GPage: 要顯示的圖形頁號 (0-6)
***************************************************************/
void LcdClsGraph(uchar GPage)
{
uint Add = T6963_GRAPH_HOME_ADD + GPage * T6963_GRAPH_PAGESIZE;
uint i;
T6963_OutCommand2byte((uchar)Add, (uchar)(Add >> 8), T6963_SET_ADD_POINTER);
T6963_OutCommand0byte(T6963_DATA_AUTO_WRITE);
for(i = 0;i < T6963_GRAPH_PAGESIZE; i++)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -