/************************************************************************* * Function Name: HD44780_Rd_IO * @in: None * @out: uint8 * Description: Read from HD44780 I/O *************************************************************************/ uint8 HD44780_Read_IO(void) { uint8 Data = 0; HD44780_Data_In(); HD44780_Set_RW(1); // Read Data HD44780_Set_E(1); HD44780_BUS_DLY(); Data = (HD44780_D7_READ() << 3); Data |= (HD44780_D6_READ() << 2); Data |= (HD44780_D5_READ() << 1); Data |= (HD44780_D4_READ() << 0); #if HD44780_BUS_WIDTH == 8 Data <<= 4; Data |= (HD44780_D3_READ() << 3); Data |= (HD44780_D2_READ() << 2); Data |= (HD44780_D1_READ() << 1); Data |= (HD44780_D0_READ() << 0); #endif HD44780_Set_E(0); return Data; }
/************************************************************************* * Function Name: HD44780_Wr_IO * @in: uint8 Data * @out: None * Description: Write to HD44780 I/O *************************************************************************/ void HD44780_Write_IO(uint8 Data) { HD44780_Data_Out(); #if HD44780_WR > 0 HD44780_Set_RW(0); #endif // Write Data // Clock E HD44780_Set_E(1); #if HD44780_BUS_WIDTH != 8 Data <<= 4; #endif if(Data & 0x80) HD44780_D7_SET(); else HD44780_D7_CLR(); if(Data & 0x40) HD44780_D6_SET(); else HD44780_D6_CLR(); if(Data & 0x20) HD44780_D5_SET(); else HD44780_D5_CLR(); if(Data & 0x10) HD44780_D4_SET(); else HD44780_D4_CLR(); #if HD44780_BUS_WIDTH == 8 if(Data & 0x08) HD44780_D3_SET(); else HD44780_D3_CLR(); if(Data & 0x04) HD44780_D2_SET(); else HD44780_D2_CLR(); if(Data & 0x02) HD44780_D1_SET(); else HD44780_D1_CLR(); if(Data & 0x01) HD44780_D0_SET(); else HD44780_D0_CLR(); #endif HD44780_BUS_DLY(); HD44780_Set_E(0); }
/************************************************************************* * Function Name: HD44780_BusyCheck * Parameters: Int8U * AddCount, Int32U MaxDly * Return: HD44780_ERROR_CODE_DEF * HD44780_OK 0: Pass * HD44780_ERROR 1: Busy check Time Out * Description: Wait MaxDly *100u or until the busy flag is clear * *************************************************************************/ HD44780_ERROR_CODE_DEF HD44780_BusyCheck (Int8U * AddCount, Int32U MaxDly) { #if HD4780_WR > 0 Int8U AddHold; #endif for (;MaxDly;--MaxDly) { #if HD4780_WR > 0 AddHold = HD44780RdStatus(); if ((AddHold & HD44780_STATUS_BUSY_MASK) == 0) { /* Wait 1.5 * Tlcd */ HD44780_BUS_DLY(); HD44780_BUS_DLY(); /* Get current AC */ AddHold = HD44780RdStatus(); AddHold &= HD44780_STATUS_AC_MASK; if(AddCount != NULL) { *AddCount = AddHold; } return HD44780_OK; } #endif Dly100us((void *)1); } #if HD4780_WR > 0 return HD44780_BUSY_TO_ERROR; #else if(AddCount != NULL) { *AddCount = DataRamAddHold; } return HD44780_OK; #endif }