📄 drv_hd44780.c
字号:
if (HD4478_Ctrl.Line)
{
Command |= HD44780_FUNCTION_SET_2_LINE;
}
if (HD4478_Ctrl.DotMode)
{
Command |= HD44780_FUNCTION_SET_DOT_5_10;
}
HD44780WrComm(Command);
if (HD44780_BusyCheck(NULL) != HD44780_OK)
{
return HD44780_ERROR;
}
/* Display off */
HD44780WrComm(HD44780_DISPLAY_CTRL);
if (HD44780_BusyCheck(NULL) != HD44780_OK)
{
return HD44780_ERROR;
}
/* Display clear */
if (HD44780_ClearDisplay() != HD44780_OK)
{
return HD44780_ERROR;
}
/* Set entry mode */
Command = HD44780_ENTRY_MODE;
if (HD4478_Ctrl.AC_Direction)
{
Command |= HD44780_ENTRY_MODE_INC;
}
if (HD4478_Ctrl.DisplayShift)
{
Command |= HD44780_ENTRY_MODE_BOTH_S;
}
HD44780WrComm(HD44780_DISPLAY_CTRL);
if (HD44780_BusyCheck(NULL) != HD44780_OK)
{
return HD44780_ERROR;
}
/* Set Display and cursor mode */
if (HD44780_SetMode() != HD44780_OK)
{
return HD44780_ERROR;
}
return HD44780_OK;
}
/*************************************************************************
* Function Name: HD44780_GetSetting
* Parameters: none
* Return: HD44780_CTRL_DEF *
* Description: Return pointer to Driver settings structure
*
*************************************************************************/
HD44780_CTRL_DEF * HD44780_GetSetting(void)
{
return &HD4478_Ctrl;
}
/*************************************************************************
* Function Name: HD44780_SetMode
* Parameters: none
* Return: HD44780_ERROR_CODE_DEF
* HD44780_OK 0: Pass
* HD44780_ERROR 1: Busy check Time Out
* Description: Set diplay mode: Display On/Off; Cursor On/Off
* Cursor blink On/Off
*************************************************************************/
HD44780_ERROR_CODE_DEF HD44780_SetMode (void)
{
LPC_INT8U Command = HD44780_DISPLAY_CTRL;
if (HD4478_Ctrl.DisplayOn)
{
Command |= HD44780_DISPLAY_CTRL_D_ON;
}
if (HD4478_Ctrl.CursorOn)
{
Command |= HD44780_DISPLAY_CTRL_C_ON;
}
if (HD4478_Ctrl.CursorBlink)
{
Command |= HD44780_DISPLAY_CTRL_C_BLINK;
}
HD44780WrComm(Command);
return HD44780_BusyCheck(NULL);
}
/*************************************************************************
* Function Name: HD44780_ClearDisplay
* Parameters: none
* Return: HD44780_ERROR_CODE_DEF
* HD44780_OK 0: Pass
* HD44780_ERROR 1: Busy check Time Out
* Description: Clear dispaly and set position to home
*
*************************************************************************/
HD44780_ERROR_CODE_DEF HD44780_ClearDisplay (void)
{
HD44780WrComm(HD44780_CLEAR);
return HD44780_BusyCheck(NULL);
}
/*************************************************************************
* Function Name: HD44780_ReturnToHome
* Parameters: none
* Return: HD44780_ERROR_CODE_DEF
* HD44780_OK 0: Pass
* HD44780_ERROR 1: Busy check Time Out
* Description: Set display position to home
*
*************************************************************************/
HD44780_ERROR_CODE_DEF HD44780_ReturnToHome (void)
{
HD44780WrComm(HD44780_RETURN);
return HD44780_BusyCheck(NULL);
}
/*************************************************************************
* Function Name: HD44780_DisplayShift
* Parameters: LPC_BOOL DisplayOn, LPC_INT8S DiplayShift
* Return: HD44780_ERROR_CODE_DEF
* HD44780_OK 0: Pass
* HD44780_ERROR 1: Busy check Time Out
* Description: Shift display
*
*************************************************************************/
HD44780_ERROR_CODE_DEF HD44780_DisplayShift (LPC_BOOL DisplayOn, LPC_INT8S DiplayShift)
{
LPC_INT8U ShiftDir;
if (DiplayShift >= 0)
{
if(DiplayShift > HD44780_MAX_LINE1_ADD)
{
return HD44780_ERROR;
}
ShiftDir = HD44780_DISPLAY_MOVE_RIGHT;
}
else
{
if(DiplayShift < -HD44780_MAX_LINE2_ADD)
{
return HD44780_ERROR;
}
ShiftDir = HD44780_DISPLAY_MOVE_LEFT;
DiplayShift = 0 - DiplayShift; /* DiplayShift = -DiplayShift */
}
for (int i = 0; i < DiplayShift; ++i)
{
HD44780WrComm(HD44780_DISPLAY_MOVE + HD44780_DISPLAY_MOVE_D + ShiftDir);
if (HD44780_BusyCheck(NULL) != HD44780_OK)
{
return HD44780_ERROR;
}
if (ShiftDir == HD44780_DISPLAY_MOVE_LEFT)
{
if(++HD4478_Ctrl.DiplayPos > 39)
{
HD4478_Ctrl.DiplayPos = 0;
}
}
else
{
if(--HD4478_Ctrl.DiplayPos > 39) /* --0 = 0xFF > 39 */
{
HD4478_Ctrl.DiplayPos = 39;
}
}
}
return HD44780_OK;
}
/*************************************************************************
* Function Name: HD44780_CursorPosSet
* Parameters: LPC_BOOL CursorOn,
* HD44780_XY_DEF X,
* HD44780_XY_DEF Y
* Return: HD44780_ERROR_CODE_DEF
* HD44780_OK 0: Pass
* HD44780_ERROR 1: Busy check Time Out
* Description: Set position of cursor
*
*************************************************************************/
HD44780_ERROR_CODE_DEF HD44780_CursorPosSet (LPC_BOOL CursorOn,LPC_BOOL CursorBlink, HD44780_XY_DEF X, HD44780_XY_DEF Y)
{
LPC_INT8U CursorPos;
/* Find Addres by coordinate */
if (HD44780_GetDDRamAdd(X,Y,&CursorPos) != HD44780_OK)
{
return HD44780_ERROR;
}
/* Cursor off */
HD4478_Ctrl.CursorOn = HD44780_CURSOR_OFF;
if (HD44780_SetMode() != HD44780_OK)
{
return HD44780_ERROR;
}
/* Set Address to DDRAM */
HD44780WrComm(HD44780_SET_DDRAM_ADD + CursorPos);
if (HD44780_BusyCheck(NULL) != HD44780_OK)
{
return HD44780_ERROR;
}
/* Set Cursor dependence of CursorOn */
HD4478_Ctrl.CursorOn = CursorOn;
HD4478_Ctrl.CursorBlink = CursorBlink;
return HD44780_SetMode();
}
/*************************************************************************
* Function Name: HD44780_RdCGRAM
* Parameters: HD44780_STRING_DEF * CG_Data,
* LPC_INT8U CGRAM_Add
* Return: HD44780_ERROR_CODE_DEF
* HD44780_OK 0: Pass
* HD44780_ERROR 1: Busy check Time Out
* Description: Read Character patern from CGRAM
*
*************************************************************************/
HD44780_ERROR_CODE_DEF HD44780_RdCGRAM (HD44780_STRING_DEF * CG_Data, LPC_INT8U CGRAM_Add)
{
LPC_INT8U Counter = 8;
LPC_INT8U DDRAM_AddHold;
if (CGRAM_Add > HD44780_MAX_CGRAM)
{
return HD44780_ERROR;
}
/* Get current DDRAM address */
if (HD44780_BusyCheck(&DDRAM_AddHold) != HD44780_OK)
{
return HD44780_ERROR;
}
if (HD4478_Ctrl.DotMode)
{
Counter = 10;
/* Address aling to chracter space */
CGRAM_Add &= 0xF;
}
else
{
Counter = 8;
/* Address aling to chracter space */
CGRAM_Add &= 0x7;
}
/* Set CGRAM Address */
HD44780WrComm(HD44780_SET_CGRAM_ADD + Counter);
if (HD44780_BusyCheck(NULL) != HD44780_OK)
{
return HD44780_ERROR;
}
for ( ;Counter; --Counter)
{
*CG_Data = HD44780RdData();
if (HD44780_BusyCheck(NULL) != HD44780_OK)
{
break;
}
++CG_Data;
}
HD44780WrComm(HD44780_SET_DDRAM_ADD + Counter);
return((HD44780_ERROR_CODE_DEF)(HD44780_BusyCheck(NULL) || (Counter?HD44780_ERROR:HD44780_OK)));
}
/*************************************************************************
* Function Name: HD44780_WrCGRAM
* Parameters: const HD44780_STRING_DEF * CG_Data,
* LPC_INT8U CGRAM_Add
* Return: HD44780_ERROR_CODE_DEF
* HD44780_OK 0: Pass
* HD44780_ERROR 1: Busy check Time Out
* Description: Write Charcter patern into CGRAM
*
*************************************************************************/
HD44780_ERROR_CODE_DEF HD44780_WrCGRAM (const HD44780_STRING_DEF * CG_Data, LPC_INT8U CGRAM_Add)
{
LPC_INT8U Counter = 8;
LPC_INT8U DDRAM_AddHold;
if (CGRAM_Add > HD44780_MAX_CGRAM)
{
return HD44780_ERROR;
}
/* Get current DDRAM address */
if (HD44780_BusyCheck(&DDRAM_AddHold) != HD44780_OK)
{
return HD44780_ERROR;
}
if (HD4478_Ctrl.DotMode)
{
Counter = 10;
/* Address aling to chracter space */
CGRAM_Add &= 0xF;
}
else
{
Counter = 8;
/* Address aling to chracter space */
CGRAM_Add &= 0x7;
}
/* Set CGRAM Address */
HD44780WrComm(HD44780_SET_CGRAM_ADD + Counter);
if (HD44780_BusyCheck(NULL) != HD44780_OK)
{
return HD44780_ERROR;
}
for ( ;Counter; --Counter)
{
HD44780WrData(*CG_Data);
if (HD44780_BusyCheck(NULL) != HD44780_OK)
{
break;
}
++CG_Data;
}
HD44780WrComm(HD44780_SET_DDRAM_ADD + Counter);
return((HD44780_ERROR_CODE_DEF)(HD44780_BusyCheck(NULL) || (Counter?HD44780_ERROR:HD44780_OK)));
}
/*************************************************************************
* Function Name: Menu
* Parameters: none
* Return: MENU_ERROR_CODE_DEF
* HD44780_OK 0: Pass
* HD44780_ERROR 1: Busy check TimeOut
* Description: Show zero terminate string into LCD
*
*************************************************************************/
HD44780_ERROR_CODE_DEF HD44780_StrShow(HD44780_XY_DEF X, HD44780_XY_DEF Y, const HD44780_STRING_DEF * DataStr)
{
LPC_INT8U DDRamAdd;
HD44780_ERROR_CODE_DEF ErrorRes = HD44780_OK;
if(HD44780_GetDDRamAdd(X,Y,&DDRamAdd) != HD44780_OK)
{
return HD44780_ERROR;
}
/* Set Address to DDRAM */
HD44780WrComm(HD44780_SET_DDRAM_ADD + DDRamAdd);
if (HD44780_BusyCheck(&DDRamAdd) != HD44780_OK)
{
return HD44780_ERROR;
}
/* Write zero terminate string int LCD */
while (*DataStr)
{
ErrorRes |= HD44780_CheckVisual(DDRamAdd);
HD44780WrData(*DataStr);
if (HD44780_BusyCheck(&DDRamAdd) != HD44780_OK)
{
return HD44780_ERROR;
}
++DataStr;
if((Y == 1) && DDRamAdd > HD44780_MAX_LINE1_ADD)
{
HD44780WrComm(HD44780_SET_DDRAM_ADD+HD44780_MIN_LINE1_ADD);
if (HD44780_BusyCheck(&DDRamAdd) != HD44780_OK)
{
return HD44780_ERROR;
}
}
else if ((Y == 2) && DDRamAdd < HD44780_MIN_LINE2_ADD)
{
HD44780WrComm(HD44780_SET_DDRAM_ADD+HD44780_MIN_LINE2_ADD);
if (HD44780_BusyCheck(&DDRamAdd) != HD44780_OK)
{
return HD44780_ERROR;
}
}
}
return ErrorRes;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -