📄 lcmdrv.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 + -