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

📄 lcmdrv.c

📁 这是一个128*64的点阵型液晶显示程序。是用Keil C51编写的
💻 C
字号:
/****************************************************************************
* 文件名:LCMDRV.C
* 功能:TC1602A驱动程序。提供初始化、发送命令、发送数据、发送字符串等函数。
****************************************************************************/
#include  "LCMDRV.H"
#include  <intrins.h>


/****************************************************************************
** 函数名称: DelayShort()
** 功能描述: 短延时操作,延时时间约为dly个机器周期。
** 输 入: dly    延时控制,即延时周期数。(参数为0时不进行延时)
** 输 出: 无
****************************************************************************/
void  DelayShort(uint8 dly)
{  for( ; dly>0; dly--) _nop_();
}


/****************************************************************************
** 函数名称: LCMSendDate()
** 功能描述: 向LCM模块发送数据date。
** 输 入: odata    要输出的数据
** 输 出: 无
** 注意: 使用此函数前要初化好LCM,再用此函数据发送显示数据。
****************************************************************************/
void  LCMSendDate(uint8 odate)
{  LCMWR_DAT = odate; 
   DelayShort(100);
}


/****************************************************************************
** 函数名称: LCMSendComm()
** 功能描述: 向LCM模块发送命令comm。
** 输 入: comm      要输出的命令
** 输 出: 无
** 注意: 调用此函数来初化、设置LCM
****************************************************************************/
void  LCMSendComm(uint8 comm)
{  LCMWR_COM = comm;
   DelayShort(100);
}


/****************************************************************************
** 函数名称: LCMDispStr()
** 功能描述: 向LCM模块发送字串数据,从DDRAM的指定地起adr开始一直写,直到字符串结束或超出
**          屏幕显示范围。此函数可以自动换行。
** 输 入:  dstr	   要写的字串指针
**         adr	   写入的DDRAM起始地址(如LCM_LINE1)	
** 输 出: 无
** 注意: 使用此函数前要初化好LCM。(适用于双行LCM设置,且显示为光标移动,DDRAM地址向上增长)
****************************************************************************/
void  LCMDispStr(uint8 adr, char *dstr)
{  if( adr<LCM_LINE1 ) return; 
   if( adr>(LCM_LINE2+15) ) return;
   if( (adr>(LCM_LINE1+15)) && (adr<LCM_LINE2) ) return;
 
   /* 检查字串是否为空 */
   if( (*dstr)=='\0' )return;
 
   LCMSendComm(adr);   			  	// 设置DDRAM地址
   while(1)
   {  if( (*dstr)=='\0' )break;      		// 若字串己经结束,则退出发送
      LCMSendDate(*dstr);
      dstr++;
      /* 若第一行显示完毕,则指向第二行,进行显示输出 */
      if( adr==(LCM_LINE1+15) )
      {  adr = LCM_LINE2;
         LCMSendComm(adr);             		// 从第2行开始显示
      }
      else 
      {  adr++;
      }
      if( adr>LCM_LINE2+15 )return; 		// 地址超出
  }
}



/****************************************************************************
** 函数名称: LCMIni()
** 功能描述: 初始化LCM模块,设置为LCM_MODE、LCM_NOFLASH、LCM_NOSHIFT、LCM_SH,然后清屏。
** 输 入: 无
** 输 出: 无
****************************************************************************/
void  LCMIni(void)
{  LCMSendComm(LCM_RST);		// 软复位   LCMSendComm(LCM_MODE);       	// 设置LCM模式(系统方式设置),6
   LCMSendComm(LCM_NOFLASH);    	// 打开LCM显示,无光标,4
   LCMSendComm(LCM_NOSHIFT);    	// 字符向地址递增,光标移动,3
   LCMSendComm(LCM_SH);         	// 重新设为光标移动,向右移,5(单指令)
   LCMDispStr(LCM_LINE1, CLRSTR);	// 清屏
   LCMDispStr(LCM_LINE2, CLRSTR);
}

⌨️ 快捷键说明

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