예제 #1
0
/*************************************************************************
* 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;
}
예제 #2
0
/*************************************************************************
* 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);
}
예제 #3
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
}