📄 sc_t6963.c
字号:
/**************************************************************************
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 + -