Code:
void lcd_init(void)
{
// Pins für die Displaysteuerung als Ausgänge deklarieren
/*DDR_MFA_A0 |= (PIN_MFA_A0);
DDR_MFA_D0 |= (PIN_MFA_D0);
DDR_MFA_XRES |= (PIN_MFA_XRES);
DDR_MFA_XCS |= (PIN_MFA_XCS);
DDR_MFA_XWR |= (PIN_MFA_XWR);
DDR_MFA_C86 |= (PIN_MFA_C86);
DDR_MFA_PS |= (PIN_MFA_PS);*/
LPC_GPIO1 -> FIODIR |= A0; //A0
LPC_GPIO1 -> FIODIR |= D0; //D0
LPC_GPIO1 -> FIODIR |= XWR; //XWR
LPC_GPIO1 -> FIODIR |= XRES; //XRES
LPC_GPIO1 -> FIOCLR |= XRES;
LPC_GPIO1 -> FIODIR |= XCS; //XCS
LPC_GPIO1 -> FIODIR |= C86; //C86
LPC_GPIO1 -> FIODIR |= PS; //PS
// Verzögerung für stabile Spannungsversorgung
delayMs(100);
// Taktleitung
LPC_GPIO1 -> FIOPIN |= XWR; // L H x x clk ser
// Chip Select
LPC_GPIO1 -> FIOPIN |= XCS; // L H L x clk ser
// Auf seriellen Übertragungsmodus schalten
LPC_GPIO1 -> FIOPIN |= C86; // x H x x x x
LPC_GPIO1 -> FIOPIN &= ~PS; // L H x x x x
// Taktleitung
LPC_GPIO1 -> FIOPIN &= ~XCS; // L H L x x x
// Chip Select
LPC_GPIO1 -> FIOPIN &= ~XWR; // L H L x clk ser
// PARA+CMD
LPC_GPIO1 -> FIOPIN &= ~A0; // L H L L clk ser
// Reset aufheben
LPC_GPIO1 -> FIOPIN |= XRES;
// Verzögerung nach Reset-Release
delayMs(250);
// Display aus dem Sleep Mode holen
lcd_send_byte(CMD, 0x11); // L H L L clk ser
delayMs(50);
// Column Adress Region setzen
lcd_send_byte(CMD, 0x2A); // L H L L clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0x06); // L H L H clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0x7D); // L H L H clk ser
// Page Adress Region setzen
lcd_send_byte(CMD, 0x2B); // L H L L clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0xAF); // L H L H clk ser
// Displayart setzen Monochrom
lcd_send_byte(CMD, 0x3A); // L H L L clk ser
lcd_send_byte(PARA, 0x02); // L H L H clk ser
delayMs(10);
// RGB Color set
lcd_send_byte(CMD, 0x2D); // L H L L clk ser
lcd_send_byte(PARA, 0x00); //1 L H L H clk ser
lcd_send_byte(PARA, 0x00); //2 L H L H clk ser
lcd_send_byte(PARA, 0x00); //3 L H L H clk ser
lcd_send_byte(PARA, 0x00); //4 L H L H clk ser
lcd_send_byte(PARA, 0x00); //5 L H L H clk ser
lcd_send_byte(PARA, 0x00); //6 L H L H clk ser
lcd_send_byte(PARA, 0x00); //7 L H L H clk ser
lcd_send_byte(PARA, 0xFF); // L H L H clk ser
lcd_send_byte(PARA, 0x00); //1 L H L H clk ser
lcd_send_byte(PARA, 0x00); //2 L H L H clk ser
lcd_send_byte(PARA, 0x00); //3 L H L H clk ser
lcd_send_byte(PARA, 0x00); //4 L H L H clk ser
lcd_send_byte(PARA, 0x00); //5 L H L H clk ser
lcd_send_byte(PARA, 0x00); //6 L H L H clk ser
lcd_send_byte(PARA, 0x00); //7 L H L H clk ser
lcd_send_byte(PARA, 0x00); //8 L H L H clk ser
lcd_send_byte(PARA, 0x00); //9 L H L H clk ser
lcd_send_byte(PARA, 0x00); //10 L H L H clk ser
lcd_send_byte(PARA, 0x00); //11 L H L H clk ser
lcd_send_byte(PARA, 0x00); //12 L H L H clk ser
lcd_send_byte(PARA, 0x00); //13 L H L H clk ser
lcd_send_byte(PARA, 0x00); //14 L H L H clk ser
lcd_send_byte(PARA, 0x00); //15 L H L H clk ser
lcd_send_byte(PARA, 0xFF); // L H L H clk ser
lcd_send_byte(PARA, 0x00); //1 L H L H clk ser
lcd_send_byte(PARA, 0x00); //2 L H L H clk ser
lcd_send_byte(PARA, 0x00); //3 L H L H clk ser
lcd_send_byte(PARA, 0x00); //4 L H L H clk ser
lcd_send_byte(PARA, 0x00); //5 L H L H clk ser
lcd_send_byte(PARA, 0x00); //6 L H L H clk ser
lcd_send_byte(PARA, 0x00); //7 L H L H clk ser
lcd_send_byte(PARA, 0x00); //8 L H L H clk ser
lcd_send_byte(PARA, 0x00); //9 L H L H clk ser
lcd_send_byte(PARA, 0x00); //10 L H L H clk ser
lcd_send_byte(PARA, 0x00); //11 L H L H clk ser
lcd_send_byte(PARA, 0xFF); // L H L H clk ser
lcd_send_byte(PARA, 0x00); //1 L H L H clk ser
lcd_send_byte(PARA, 0x00); //2 L H L H clk ser
lcd_send_byte(PARA, 0x00); //3 L H L H clk ser
lcd_send_byte(PARA, 0x00); //4 L H L H clk ser
lcd_send_byte(PARA, 0x00); //5 L H L H clk ser
lcd_send_byte(PARA, 0x00); //6 L H L H clk ser
lcd_send_byte(PARA, 0x00); //7 L H L H clk ser
lcd_send_byte(PARA, 0x00); //8 L H L H clk ser
lcd_send_byte(PARA, 0x00); //9 L H L H clk ser
lcd_send_byte(PARA, 0x00); //10 L H L H clk ser
lcd_send_byte(PARA, 0x00); //11 L H L H clk ser
lcd_send_byte(PARA, 0x00); //12 L H L H clk ser
lcd_send_byte(CMD, 0x2C); // L H L L clk ser
delayMs(10);
//Taktleitung
LPC_GPIO1 -> FIOPIN |= XWR;// L H L L H L
// Chip Select
LPC_GPIO1 -> FIOPIN |= XCS;// L H H L H L
//Datenleitung
LPC_GPIO1 -> FIOPIN &= ~D0;
// Auf parallele Übertragungsmodus schalten
LPC_GPIO1 -> FIOPIN &= ~C86;// L L H L H L
LPC_GPIO1 -> FIOPIN |= PS;// H L H L H L
// Chip Select
LPC_GPIO1 -> FIOPIN &= ~XCS; // H L L L H L
//Datenleitung
LPC_GPIO1 -> FIOPIN |= D0;
// Taktleitung
LPC_GPIO1 -> FIOPIN &= ~XWR; // H L L L clk par
// CMD+PARA Leitung
LPC_GPIO1 -> FIOPIN |= A0;// H L L H clk par
//Sende dots one bit
for (uint16_t y = 0; y <= 330 ; y++)
{
lcd_send_pixel(0x00);// H L L H clk par
lcd_send_pixel(0x00);// H L L H clk par
}
//lcd_clear_display();
// Taktleitung
LPC_GPIO1 -> FIOPIN |= XWR; // H L L H H L
// Chip Select
LPC_GPIO1 -> FIOPIN |= XCS;// H L H H H L
//Datenleitung
LPC_GPIO1 -> FIOPIN &= ~D0;
// Auf seriellen Übertragungsmodus schalten
LPC_GPIO1 -> FIOPIN |= C86;// H H H H H L
LPC_GPIO1 -> FIOPIN &= ~PS;// L H H H H L
//Datenleitung
LPC_GPIO1 -> FIOPIN |= D0;
// Chip Select
LPC_GPIO1 -> FIOPIN &= ~XCS;// L H L H H L
//Taktleitung
LPC_GPIO1 -> FIOPIN &= ~XWR;// L H L H clk ser
// Display on
lcd_send_byte(CMD, 0x29);// L H L L clk ser
}
void lcd_send_byte(uint8_t u8_Type, uint8_t u8_Byte)
{
if (u8_Type == CMD)
{
LCD_COMMAND_MODE();
}
else
{
LCD_PARAMETER_MODE();
}
// -> Serielle Übertragung des Bytes
for (uint8_t x = 0; x <= 7 ; x++)
{
LPC_GPIO1 -> FIOPIN &= ~XWR;
if (u8_Byte & (1<<(7 - x)))
{
LPC_GPIO1 -> FIOPIN |= D0;
}
else
{
LPC_GPIO1 -> FIOPIN &= ~D0;
}
LPC_GPIO1 -> FIOPIN |= XWR;
}
}
void lcd_send_pixel(uint32_t u32_Block)
{
LPC_GPIO1 -> FIOPIN &= ~XWR;
for (uint32_t x = 0; x <= 31 ; x++)
{
if (u32_Block & (1<<(31 - x)))
{
LPC_GPIO1 -> FIOPIN |= D0;
}
else
{
LPC_GPIO1 -> FIOPIN &= ~D0;
}
}
LPC_GPIO1 -> FIOPIN |= XWR;
}
Lesezeichen