void ST7920LCDDriver::begin(bool gmode)
{
  
  // Set up the SPI interface for talking to the LCD. We have to set MOSI, SCLK and SS to outputs, then enable SPI.
  digitalWrite(clockPin, LOW);
  digitalWrite(dataPin, LOW);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  
  if (useSpi)
  {
    SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0);  // enable SPI, master mode, clock low when idle, data sampled on rising edge, clock = f/16 (= 1MHz), send MSB first
    //SPSR = (1 << SPI2X);  // double the speed to 2MHz (optional)
  }

  gfxMode = false;
  sendLcdCommand(LcdFunctionSetBasicAlpha);
  delay(1);
  sendLcdCommand(LcdFunctionSetBasicAlpha);
  commandDelay();
  sendLcdCommand(LcdEntryModeSet);
  commandDelay();
  extendedMode = false;
  gfxMode = true;
  sendLcdCommand(LcdDisplayOn);
  commandDelay();
}
Esempio n. 2
0
//------------------------------------------------------------------------------
void lcdl_exit(void)
{
    lcdl_clear();
    sendLcdCommand(deviceHandle_l, kLcdCmdDisplayOff, NULL);
    sendLcdCommand(deviceHandle_l, kLcdCmdBlinkingCursorOff, NULL);
    alt_i2c_disable(deviceHandle_l);
    alt_i2c_uninit(deviceHandle_l);
}
Esempio n. 3
0
//------------------------------------------------------------------------------
void lcdl_clear(void)
{
    // Clear screen
    if (sendLcdCommand(deviceHandle_l, kLcdCmdClearScreen, NULL) != ALT_E_SUCCESS)
    {
        DEBUG_LVL_ERROR_TRACE("LCD ERR: Failed to clear screen\n");
    }
}
void ST7920LCDDriver::ensureExtendedMode()
{
  if (!extendedMode)
  {
    sendLcdCommand(gfxMode ? LcdFunctionSetExtendedGraphic : LcdFunctionSetExtendedAlpha);
    commandDelay();
    extendedMode = true;
  }
}
void ST7920LCDDriver::ensureBasicMode()
{
  if (extendedMode)
  {
    sendLcdCommand(gfxMode ? LcdFunctionSetBasicGraphic : LcdFunctionSetBasicAlpha);
    commandDelay();
    extendedMode = false;
  }
}
void ST7920LCDDriver::setGraphicsAddress(unsigned int r, unsigned int c)
{
  if (gfxMode)
  {
    ensureExtendedMode();
    sendLcdCommand(LcdSetGdramAddress | (r & 31));
    //commandDelay();  // don't seem to need this one
    sendLcdCommand(LcdSetGdramAddress | c | ((r & 32) >> 2));
    commandDelay();    // we definitely need this one
  }
}
Esempio n. 7
0
//------------------------------------------------------------------------------
INT lcdl_changeToLine(unsigned INT line_p)
{
    UINT8      param;

    if (line_p < 2)
        param = LCD_POS_1ST_LINE;
    else
        param = LCD_POS_2ND_LINE;

    if (sendLcdCommand(deviceHandle_l, kLcdCmdSetCursor, &param) != ALT_E_SUCCESS)
        return -1;
    else
        return 0;
}
Esempio n. 8
0
//------------------------------------------------------------------------------
void lcdl_init(void)
{
    INT                         ret = 0;
    ALT_I2C_MASTER_CONFIG_t     cfg;
    UINT32                      speed;

    // Init I2C module
    if (alt_i2c_init(ALT_I2C_I2C0, deviceHandle_l) != ALT_E_SUCCESS)
    {
        ret = -1;
        goto Exit;
    }

    if (alt_i2c_enable(deviceHandle_l) != ALT_E_SUCCESS)       // Enable I2C module
    {
        ret = -1;
        goto Exit;
    }

    if (alt_i2c_master_config_get(deviceHandle_l, &cfg) != ALT_E_SUCCESS) // Configure I2C module
    {
        ret = -1;
        goto Exit;
    }

    if (alt_i2c_master_config_speed_get(deviceHandle_l, &cfg, &speed) != ALT_E_SUCCESS)
    {
        ret = -1;
        goto Exit;
    }

    PRINTF("LCD INFO: Current I2C speed = %d Hz.\n", (INT)speed);

    if (alt_i2c_master_config_speed_set(deviceHandle_l, &cfg, LCD_I2C_SPEED) != ALT_E_SUCCESS)
    {
        ret = -1;
        goto Exit;
    }

    if (alt_i2c_master_config_speed_get(deviceHandle_l, &cfg, &speed) != ALT_E_SUCCESS)
    {
        ret = -1;
        goto Exit;
    }
    else
    {
        PRINTF("LCD INFO: New I2C speed = %d Hz.\n", (INT)speed);
        cfg.addr_mode = ALT_I2C_ADDR_MODE_7_BIT;
        cfg.restart_enable = ALT_E_TRUE;

        if (alt_i2c_master_config_set(deviceHandle_l, &cfg) != ALT_E_SUCCESS)
        {
            ret = -1;
            goto Exit;
        }

        if (alt_i2c_sda_hold_time_set(deviceHandle_l, 8) != ALT_E_SUCCESS)
        {
            ret = -1;
            goto Exit;
        }

        if (alt_i2c_master_target_set(deviceHandle_l, LCD_I2C_ADDRESS) != ALT_E_SUCCESS)    // Set target display I2C address
        {
            ret = -1;
            goto Exit;
        }

        if (sendLcdCommand(deviceHandle_l, kLcdCmdDisplayOn, NULL) != ALT_E_SUCCESS)        // Turn display on
        {
            ret = -1;
            goto Exit;
        }

        if (sendLcdCommand(deviceHandle_l, kLcdCmdBlinkingCursorOn, NULL) != ALT_E_SUCCESS) // Turn cursor on
        {
            ret = -1;
            goto Exit;
        }
        else
            ret = 0;
    }

 Exit:
     if (ret != 0)
         DEBUG_LVL_ERROR_TRACE("LCD ERR: Initialization Failed!!\n");

     return;
}