📄 mst-g240128-052w.#2
字号:
/****************************************************************************
**
** 文件名: RT240128.c
** 功能: 液晶模块RT240128驱动;
** 创建时间:2005.08.05
** 修改时间:2005.12.01
** 修改说明:
** 作者: 李立学
** 版权申明:可以拷贝,可以修改,但必须保留修改时间和作者信息
**
****************************************************************************/
#include "LZK.H"
/***********************************************************************
*** 常量声明
**********************************************************************/
uint8 code DCB_HEX_TAB[8] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
uint8 xdata CURS_X = 16;
uint8 xdata CURS_Y = 16;
/***********************************************************************
* 名称:LCD_nCS()
* 功能:LCD片选
* 入口参数:bCMD:位变量,“0”= LCD Selected.
* 出口参数:无
* 说明:LCD片选有效前使nMCS = “1”,避免总线冲突.
***********************************************************************/
void LCD_nCS(bit bCMD)
{
if(bCMD) // LCD_nCS Output "1", Invalid
{
LCD_nCS0 = 1;
SFRPAGE = 0x0f; // P4 SFR PAGE.
ucP4DATA = ucP4DATA & 0xf7; // nMCS = '0'.
P4 = ucP4DATA;
}
else // LCD_nCS Output "0", Valid
{
SFRPAGE = 0x0f; // P4 SFR PAGE.
ucP4DATA = ucP4DATA | 0x08; // nMCS = '1'.
P4 = ucP4DATA;
LCD_nCS0 = 0;
}
}
/***********************************************************************
* 名称:LCD_Reset()
* 功能:对LCM复位,对相关I/O口初始化
* 入口参数:无
* 出口参数:无
* 说明:
***********************************************************************/
void LCD_Reset(void)
{
LCD_nCS(1); // LCD nCS0 Output "1", Invalid.
PanelLE = 0;
nReInLE = 1;
ReOutLE = 0;
PulseLE = 0;
LCD_nCS(0); // LCD nCS0 Output "0", Valid.
SFRPAGE = 0x0f; // P5 SFR PAGE.
P5MDOUT = 0xff; // P5口设置为推挽输出方式.
P5MDOUT = 0xff; // P5口设置为推挽输出方式.
ucPanDATA = ucPanDATA & 0xf7; // LCD_nRST(EBD.3) = 0.
P5 = ucPanDATA;
PanelLE = 1;
PanelLE = 1;
PanelLE = 0;
DmS(10);
SFRPAGE = 0x0f; // P5 SFR PAGE.
P5MDOUT = 0xff; // P5口设置为推挽输出方式.
P5MDOUT = 0xff; // P5口设置为推挽输出方式.
ucPanDATA = ucPanDATA | 0x08; // LCD_nRST(EBD.3) = 1.
P5 = ucPanDATA;
PanelLE = 1;
PanelLE = 1;
PanelLE = 0;
LCD_nCS(1); // LCD nCS0 Output "1", Invalid.
}
/***********************************************************************
* 名称:LCD_WriteCommand()
* 功能:写命令子程序。(发送命令前,不检查液晶模块的状态)
* 入口参数:ucCMD (要写入LCM的命令字)
* 出口参数:无
* 说明:函数会设置LCM数据总线为输出方式
***********************************************************************/
void LCD_WriteCommand(uint8 ucCMD)
{
LCD_CnD = 1;
LCD_nCS(0); // LCD nCS0 Output "0", Valid.
LCD_COMMAND = ucCMD;
LCD_nCS(1); // LCD nCS0 Output "1", Invalid.
}
/***********************************************************************
* 名称:LCD_WriteData()
* 功能:写数据子程序。(发送数据前,不检查液晶模块的状态)
* 入口参数:ucDATA (要写入LCM的数据)
* 出口参数:无
* 说明:函数会设置LCM数据总线为输出方式
***********************************************************************/
void LCD_WriteData(uint8 ucDATA)
{
LCD_CnD = 0;
LCD_nCS(0); // LCD nCS0 Output "0", Valid.
LCD_COMMAND = ucDATA;
LCD_nCS(1); // LCD nCS0 Output "1", Invalid.
}
/***********************************************************************
* 名称:LCD_ReadState()
* 功能:读取状态字子程序。
* 入口参数:无
* 出口参数:返回值即为读出的状态字
* 说明:函数会设置LCM数据总线为输入方式
***********************************************************************/
uint8 LCD_ReadState(void)
{
uint8 ucTMP;
LCD_CnD = 1;
LCD_nCS(0); // LCD nCS0 Output "0", Valid.
ucTMP = LCD_STATUS;
LCD_nCS(1); // LCD nCS0 Output "1", Invalid.
return ucTMP;
}
/***********************************************************************
* 名称:LCD_ReadData()
* 功能:读取数据子程序。
* 入口参数:无
* 出口参数:返回值即为读出的数据
* 说明:函数会设置LCM数据总线为输入方式
***********************************************************************/
uint8 LCD_ReadData(void)
{
uint8 ucTMP;
LCD_CnD = 0;
LCD_nCS(0); // LCD nCS0 Output "0", Valid.
ucTMP = LCD_DATA;
LCD_nCS(1); // LCD nCS0 Output "1", Invalid.
return ucTMP;
}
/***********************************************************************
* 名称:LCD_TestStaBit01()
* 功能:判断读写指令和读写数据是否允许。
* 入口参数:无
* 出口参数:返回0表示禁止,否则表示允许
***********************************************************************/
bit LCD_TestStaBit01(void)
{
uint8 i;
for(i=100; i>0; i--)
{
if( (LCD_ReadState() & 0x03) == 0x03 )
break;
}
if(i>0)
return 1;
else
return 0;
}
/***********************************************************************
* 名称:LCD_TestStaBit03()
* 功能:数据自动写状态是否允许。
* 入口参数:无
* 出口参数:返回0表示禁止,否则表示允许
***********************************************************************/
bit LCD_TestStaBit03(void)
{
uint8 i;
for(i=100; i>0; i--)
{
if( (LCD_ReadState() & 0x08) == 0x08 )
break;
}
if(i>0)
return 1;
else
return 0;
}
/***********************************************************************
* 名称:LCD_WriteTCommand1()
* 功能:写无参数命令子程序。会先判断LCM状态字。
* 入口参数:ucCMD (要写入LCM的命令字)
* 出口参数: (操作出错返回0,否则返回)
***********************************************************************/
bit LCD_WriteTCommand1(uint8 ucCMD)
{
if( LCD_TestStaBit01()==0 )
return 0;
LCD_WriteCommand(ucCMD); // 发送命令字
return 1;
}
/***********************************************************************
* 名称:LCD_WriteTCommand2()
* 功能:写单参数命令子程序。会先判断LCM状态字。
* 入口参数:ucCMD (要写入LCM的命令字)
* ucDATA1 (参数1)
* 出口参数:操作出错返回0,否则返回1
* 说明:先发送参数据数据,再发送命令字
***********************************************************************/
bit LCD_WriteTCommand2(uint8 ucCMD, uint8 ucDATA1)
{
if( LCD_TestStaBit01()==0 )
return 0;
LCD_WriteData(ucDATA1); // 发送数据1
if( LCD_TestStaBit01()==0 )
return 0;
LCD_WriteCommand(ucCMD); // 发送命令字
return 1;
}
/***********************************************************************
* 名称:LCD_WriteTCommand3()
* 功能:写双参数命令子程序。会先判断LCM状态字。
* 入口参数:ucCMD (要写入LCM的命令字)
* ucDATA1 (参数1)
* ucDATA2 (参数2)
* 出口参数:操作出错返回0,否则返回1
* 说明:先发送两字节参数据数据,再发送命令字
***********************************************************************/
bit LCD_WriteTCommand3(uint8 ucCMD, uint8 ucDATA1, uint8 ucDATA2)
{
if( LCD_TestStaBit01()==0 )
return 0;
LCD_WriteData(ucDATA1); // 发送数据1
if( LCD_TestStaBit01()==0 )
return 0;
LCD_WriteData(ucDATA2); // 发送数据2
if( LCD_TestStaBit01()==0 )
return 0;
LCD_WriteCommand(ucCMD); // 发送命令字
return 1;
}
/***********************************************************************
* 名称:LCD_WriteTData1()
* 功能:写1字节数据子程序。先判断状态字。
* 入口参数:ucDATA 要写入LCM的数据
* 出口参数:操作出错返回0,否则返回1
***********************************************************************/
bit LCD_WriteTData1(uint8 ucDATA)
{
if( LCD_TestStaBit03()==0 )
return 0;
LCD_WriteData(ucDATA); // 发送命令字
return 1;
}
/***********************************************************************
* 名称:LCD_ClearAll()
* 功能:LCD填充。以图形方式进行填充,起始地址为0x0000。
* 入口参数:ucDATA 要填充的数据
* 出口参数:无
***********************************************************************/
void LCD_ClearAll(void)
{
uint16 i;
LCD_WriteTCommand3(LCD_ADR_POS, 0x00, 0x00); // 置地址指针
LCD_WriteTCommand1(LCD_AUT_WR); // 自动写
for(i=0; i<128 * 30; i++)
LCD_WriteTData1(0x00); // 白底黑字.
LCD_WriteTCommand1(LCD_AUT_OVR); // 自动写结束
LCD_WriteTCommand3(LCD_ADR_POS,0x00,0x00); // 重置地址指针
}
/***********************************************************************
* 名称:LCD_Initialize()
* 功能:LCM初始化,将LCM初始化为纯图形模式,显示起始地址为0x0000,。
* 入口参数:无
* 出口参数:无
* 说明:函数会设置LCM数据总线为输出方式
***********************************************************************/
void LCD_Initialize(void)
{
LCD_WriteTCommand3(LCD_TXT_STP, 0x00, 0x00); // 设置文本方式RAM起始地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -