⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sc_t6963.c

📁 驱动15X20D液晶屏
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************
Copyright (c) HUST ESRI 1999. All Rights Reserved.

当前版本:	V1.1
作者:	SeaCow
完成日期:	2007.6.24

取代版本:	T6963driver_1.c
原作者:	魏雪
完成日期:	2007.4

摘要:	NS240128A(T6963C控制器,32K显存)液晶屏的驱动

[相关定义]
1.需要在事件在单片机引脚定义文件中添加以下引脚定义:
	//LCD控制信号寄存器
	#define T6963_COMMAND_REG	P4	//DB0-7口
	//LCD数据端口寄存器
	#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相关
**************************************************************************/
#include "inc\ConstDef.h"	//硬件相关常数定义
#include "inc\SC_T6963.h"

//----------------------------------------------------------------------------------//
//--------------------------------基本输入输出函数----------------------------------//
//----------------------------------------------------------------------------------//
/***************************************************************
	Function:	//	T6963_WriteCode
	Description://	向T6963控制器写入一个命令字节
	Input:	//	CODE:需要写入的命令字节
***************************************************************/
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控制器写入一个数据字节
	Input:	//	DATA:需要写入的数据字节
***************************************************************/
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控制器读取状态字节
	Return:	//	STATE:状态字节
***************************************************************/
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控制器读取一个数据字节
	Return:		//	DATA:数据字节
***************************************************************/
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;
}

//----------------------------------------------------------------------------------//
//----------------------------------检查状态函数------------------------------------//
//----------------------------------------------------------------------------------//
/***************************************************************
	Function:	//	T6963_CheckRDWR
	Description://	读写状态检查
	Calls:		//	T6963_ReadState
***************************************************************/
void T6963_CheckRDWR(void)
{
	uchar uSTATE;
	do
	{
		uSTATE = T6963_ReadState();
		uSTATE &= 0x03;
	}while(uSTATE != 0x03);
}

/***************************************************************
	Function:	//	T6963_CheckAutoRD
	Description://	自动读状态检查
	Calls:		//	T6963_ReadState
***************************************************************/
void T6963_CheckAutoRD(void)
{
	uchar uSTATE;
	do
	{
		uSTATE = T6963_ReadState();
		uSTATE &= 0x04;
	}while(uSTATE != 0x04);
}

/***************************************************************
	Function:	//	T6963_CheckAutoWR
	Description://	自动写状态检查
	Calls:		//	T6963_ReadState
***************************************************************/
void T6963_CheckAutoWR(void)
{
	uchar uSTATE;
	do
	{
		uSTATE = T6963_ReadState();
		uSTATE &= 0x08;
	}while(uSTATE != 0x08);
}

//----------------------------------------------------------------------------------//
//--------------------------------读写函数(命令,数据)----------------------------//
//----------------------------------------------------------------------------------//
/***************************************************************
	Function:	//	T6963_OutData
	Description://	输出数据
	Calls:		//	T6963_CheckRDWR	T6963_WriteData	
***************************************************************/
void T6963_OutData(uchar uData)
{
	T6963_CheckRDWR();
	T6963_WriteData(uData);
}

/***************************************************************
	Function:	//	T6963_InData
	Description://	读入数据
	Calls:		//	T6963_CheckRDWR	T6963_ReadData
	Return:		//	DATA
***************************************************************/
uchar T6963_InData(void)
{
	uchar uData;
	T6963_CheckRDWR();
	uData = T6963_ReadData();
	return uData;
}

/***************************************************************
	Function:	//	T6963_OutCommand0byte
	Description://	写无参数命令
	Calls:		//	T6963_CheckRDWR	T6963_WriteCode
***************************************************************/
void T6963_OutCommand0byte(uchar uCommand)
{
	T6963_CheckRDWR();
	T6963_WriteCode(uCommand);
}

/***************************************************************
	Function:	//	T6963_OutCommand1byte
	Description://	写1个参数的命令
	Calls:		//	T6963_OutData	T6963_OutCommand0byte
***************************************************************/
void T6963_OutCommand1byte(uchar uData,uchar uCommand)
{
	T6963_OutData(uData);
	T6963_OutCommand0byte(uCommand);
}

/***************************************************************
	Function:	//	T6963_OutCommand2byte
	Description://	写2个参数的命令
	Calls:		//	T6963_OutData	T6963_OutCommand0byte
***************************************************************/
void T6963_OutCommand2byte(uchar Data1,uchar Data2,uchar uCommand)
{
	T6963_OutData(Data1);
	T6963_OutData(Data2);
	T6963_OutCommand0byte(uCommand);
}

//----------------------------------------------------------------------------------//
//--------------------------------高层函数------------------------------------------//
//----------------------------------------------------------------------------------//

/***************************************************************
	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复位
	T6963_OutCommand0byte(T6963_DISPLAY_OFF);	//关闭显示
	T6963_OutCommand2byte(0x00,0x00,T6963_SET_TXT_HOME_ADD);	//设置文本显存页起始地址至0x0000
	T6963_OutCommand2byte(30,0x00,T6963_SET_TXT_AREA);			//设置文本区域(字符列数)
	T6963_OutCommand2byte(0x00,0x10,T6963_SET_GRAPH_HOME_ADD);	//设置图形显存页起始地址至0x1000
	T6963_OutCommand2byte(30,0x00,T6963_SET_GRAPH_AREA);		//设置文本区域(点阵列数/8)
	T6963_OutCommand0byte(T6963_CUR_8LINE);		//设置光标形状
	T6963_OutCommand0byte(T6963_OR_MODE);		//设置文本与图形的叠加模式
//	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++)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -