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

📄 mst-g240128-052w.#2

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 #2
📖 第 1 页 / 共 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 + -