📄 drv_hd44780.c
字号:
}
/* Display off 0x08*/
HD44780WrComm( HD44780_DISPLAY_CTRL );
if ( HD44780_BusyCheck( NULL ) != HD44780_OK )
{
return HD44780_ERROR;
}
/* Display clear 0x01*/
if ( HD44780_ClearDisplay() != HD44780_OK )
{
return HD44780_ERROR;
}
/* Set entry mode 0x08*/
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;
}
HD44780_StrShow( 1 , 1 , ( LPC_INT8S const * ) DataStr1 );
HD44780_StrShow( 1 , 2 , ( LPC_INT8S const * ) DataStr2 );
LightCntr( 1 );
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;
}
/********************************************************************************************************************
【函数名称】void LCD1602_Test( void )
【功能描述】LCD显示测试
【参数输入】无
【参数返回】无
********************************************************************************************************************/
void LCD1602_Test( void )
{
char DataStr1[] =
{
"0123456789abcdef"
} ;
char DataStr2[] =
{
"ABCDEFG#@$%^(*)&"
} ;
UART_PutStringByPolling( UART0 , "\nLCD1602 Test\n" );
HD44780_StrShow( 1 , 1 , ( LPC_INT8S const * ) DataStr1 );
HD44780_StrShow( 1 , 2 , ( LPC_INT8S const * ) DataStr2 );
HD44780_StrShow( 1 , 1 , ( LPC_INT8S const * ) DataStr1 );
HD44780_StrShow( 1 , 2 , ( LPC_INT8S const * ) DataStr2 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -