TFT-Display
Farbwechsel
von Lucy Gebauer und Eva Schwegle
mit folgendem Programm ändert sich die Farbe auf dem Display:
#define LCD_RD A0
#define LCD_WR A1
#define LCD_RS A2
#define LCD_CS A3
#define LCD_REST A4
#define LCD_WR A1
#define LCD_RS A2
#define LCD_CS A3
#define LCD_REST A4
void Lcd_Writ_Bus(unsigned char d)
{
PORTD = (PORTD & B00000011) | ((d) & B11111100);
PORTB = (PORTB & B11111100) | ((d) & B00000011);
*(portOutputRegister(digitalPinToPort(LCD_WR))) &= ~digitalPinToBitMask(LCD_WR);
*(portOutputRegister(digitalPinToPort(LCD_WR)))|= digitalPinToBitMask(LCD_WR);
}
{
PORTD = (PORTD & B00000011) | ((d) & B11111100);
PORTB = (PORTB & B11111100) | ((d) & B00000011);
*(portOutputRegister(digitalPinToPort(LCD_WR))) &= ~digitalPinToBitMask(LCD_WR);
*(portOutputRegister(digitalPinToPort(LCD_WR)))|= digitalPinToBitMask(LCD_WR);
}
void Lcd_Write_Com(unsigned char VH)
{
*(portOutputRegister(digitalPinToPort(LCD_RS))) &= ~digitalPinToBitMask(LCD_RS);//LCD_RS=0;
Lcd_Writ_Bus(VH);
}
void Lcd_Write_Data(unsigned char VH)
{
*(portOutputRegister(digitalPinToPort(LCD_RS)))|= digitalPinToBitMask(LCD_RS);//LCD_RS=1;
Lcd_Writ_Bus(VH);
}
{
*(portOutputRegister(digitalPinToPort(LCD_RS)))|= digitalPinToBitMask(LCD_RS);//LCD_RS=1;
Lcd_Writ_Bus(VH);
}
void Lcd_Write_Com_Data(unsigned char com,unsigned char dat)
{
Lcd_Write_Com(com);
Lcd_Write_Data(dat);
}
{
Lcd_Write_Com(com);
Lcd_Write_Data(dat);
}
void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
Lcd_Write_Com(0x2a);
Lcd_Write_Data(x1>>8);
Lcd_Write_Data(x1);
Lcd_Write_Data(x2>>8);
Lcd_Write_Data(x2);
Lcd_Write_Com(0x2b);
Lcd_Write_Data(y1>>8);
Lcd_Write_Data(y1);
Lcd_Write_Data(y2>>8);
Lcd_Write_Data(y2);
Lcd_Write_Com(0x2c);
}
{
Lcd_Write_Com(0x2a);
Lcd_Write_Data(x1>>8);
Lcd_Write_Data(x1);
Lcd_Write_Data(x2>>8);
Lcd_Write_Data(x2);
Lcd_Write_Com(0x2b);
Lcd_Write_Data(y1>>8);
Lcd_Write_Data(y1);
Lcd_Write_Data(y2>>8);
Lcd_Write_Data(y2);
Lcd_Write_Com(0x2c);
}
void Lcd_Init(void)
{
digitalWrite(LCD_REST,HIGH);
delay(5);
digitalWrite(LCD_REST,LOW);
delay(15);
digitalWrite(LCD_REST,HIGH);
delay(15);
{
digitalWrite(LCD_REST,HIGH);
delay(5);
digitalWrite(LCD_REST,LOW);
delay(15);
digitalWrite(LCD_REST,HIGH);
delay(15);
digitalWrite(LCD_CS,HIGH);
digitalWrite(LCD_WR,HIGH);
digitalWrite(LCD_CS,LOW); //CS
digitalWrite(LCD_WR,HIGH);
digitalWrite(LCD_CS,LOW); //CS
Lcd_Write_Com(0xCB);
Lcd_Write_Data(0x39);
Lcd_Write_Data(0x2C);
Lcd_Write_Data(0x00);
Lcd_Write_Data(0x34);
Lcd_Write_Data(0x02);
Lcd_Write_Data(0x39);
Lcd_Write_Data(0x2C);
Lcd_Write_Data(0x00);
Lcd_Write_Data(0x34);
Lcd_Write_Data(0x02);
Lcd_Write_Com(0xCF);
Lcd_Write_Data(0x00);
Lcd_Write_Data(0XC1);
Lcd_Write_Data(0X30);
Lcd_Write_Data(0x00);
Lcd_Write_Data(0XC1);
Lcd_Write_Data(0X30);
Lcd_Write_Com(0xE8);
Lcd_Write_Data(0x85);
Lcd_Write_Data(0x00);
Lcd_Write_Data(0x78);
Lcd_Write_Data(0x85);
Lcd_Write_Data(0x00);
Lcd_Write_Data(0x78);
Lcd_Write_Com(0xEA);
Lcd_Write_Data(0x00);
Lcd_Write_Data(0x00);
Lcd_Write_Com(0xED);
Lcd_Write_Data(0x64);
Lcd_Write_Data(0x03);
Lcd_Write_Data(0X12);
Lcd_Write_Data(0X81);
Lcd_Write_Data(0x00);
Lcd_Write_Data(0x00);
Lcd_Write_Com(0xED);
Lcd_Write_Data(0x64);
Lcd_Write_Data(0x03);
Lcd_Write_Data(0X12);
Lcd_Write_Data(0X81);
Lcd_Write_Com(0xF7);
Lcd_Write_Data(0x20);
Lcd_Write_Com(0xC0); //Power control
Lcd_Write_Data(0x23); //VRH[5:0]
Lcd_Write_Com(0xC1); //Power control
Lcd_Write_Data(0x10); //SAP[2:0];BT[3:0]
Lcd_Write_Data(0x20);
Lcd_Write_Com(0xC0); //Power control
Lcd_Write_Data(0x23); //VRH[5:0]
Lcd_Write_Com(0xC1); //Power control
Lcd_Write_Data(0x10); //SAP[2:0];BT[3:0]
Lcd_Write_Com(0xC5); //VCM control
Lcd_Write_Data(0x3e); //Contrast
Lcd_Write_Data(0x28);
Lcd_Write_Com(0xC7); //VCM control2
Lcd_Write_Data(0x86); //--
Lcd_Write_Com(0x36); // Memory Access Control
Lcd_Write_Data(0x48);
Lcd_Write_Data(0x3e); //Contrast
Lcd_Write_Data(0x28);
Lcd_Write_Com(0xC7); //VCM control2
Lcd_Write_Data(0x86); //--
Lcd_Write_Com(0x36); // Memory Access Control
Lcd_Write_Data(0x48);
Lcd_Write_Com(0x3A);
Lcd_Write_Data(0x55);
Lcd_Write_Data(0x55);
Lcd_Write_Com(0xB1);
Lcd_Write_Data(0x00);
Lcd_Write_Data(0x18);
Lcd_Write_Com(0xB6); // Display Function Control
Lcd_Write_Data(0x08);
Lcd_Write_Data(0x82);
Lcd_Write_Data(0x27);
Lcd_Write_Data(0x00);
Lcd_Write_Data(0x18);
Lcd_Write_Com(0xB6); // Display Function Control
Lcd_Write_Data(0x08);
Lcd_Write_Data(0x82);
Lcd_Write_Data(0x27);
Lcd_Write_Com(0x11); //Exit Sleep
delay(120);
Lcd_Write_Com(0x29); //Display on
Lcd_Write_Com(0x2c);
}
delay(120);
Lcd_Write_Com(0x29); //Display on
Lcd_Write_Com(0x2c);
}
void H_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c)
{
unsigned int i,j;
Lcd_Write_Com(0x02c); //write_memory_start
digitalWrite(LCD_RS,HIGH);
digitalWrite(LCD_CS,LOW);
l=l+x;
Address_set(x,y,l,y);
j=l*2;
for(i=1;i<=j;i++)
{
Lcd_Write_Data(c);
}
digitalWrite(LCD_CS,HIGH);
}
{
unsigned int i,j;
Lcd_Write_Com(0x02c); //write_memory_start
digitalWrite(LCD_RS,HIGH);
digitalWrite(LCD_CS,LOW);
l=l+x;
Address_set(x,y,l,y);
j=l*2;
for(i=1;i<=j;i++)
{
Lcd_Write_Data(c);
}
digitalWrite(LCD_CS,HIGH);
}
void V_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c)
{
unsigned int i,j;
Lcd_Write_Com(0x02c); //write_memory_start
digitalWrite(LCD_RS,HIGH);
digitalWrite(LCD_CS,LOW);
l=l+y;
Address_set(x,y,x,l);
j=l*2;
for(i=1;i<=j;i++)
{
Lcd_Write_Data(c);
}
digitalWrite(LCD_CS,HIGH);
}
{
unsigned int i,j;
Lcd_Write_Com(0x02c); //write_memory_start
digitalWrite(LCD_RS,HIGH);
digitalWrite(LCD_CS,LOW);
l=l+y;
Address_set(x,y,x,l);
j=l*2;
for(i=1;i<=j;i++)
{
Lcd_Write_Data(c);
}
digitalWrite(LCD_CS,HIGH);
}
void Rect(unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int c)
{
H_line(x , y , w, c);
H_line(x , y+h, w, c);
V_line(x , y , h, c);
V_line(x+w, y , h, c);
}
{
H_line(x , y , w, c);
H_line(x , y+h, w, c);
V_line(x , y , h, c);
V_line(x+w, y , h, c);
}
void Rectf(unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int c)
{
unsigned int i;
for(i=0;i {
H_line(x , y , w, c);
H_line(x , y+i, w, c);
}
}
int RGB(int r,int g,int b)
{return r << 16 | g << 8 | b;
}
void LCD_Clear(unsigned int j)
{
unsigned int i,m;
Address_set(0,0,240,320);
//Lcd_Write_Com(0x02c); //write_memory_start
//digitalWrite(LCD_RS,HIGH);
digitalWrite(LCD_CS,LOW);;i++)
{
unsigned int i;
for(i=0;i {
H_line(x , y , w, c);
H_line(x , y+i, w, c);
}
}
int RGB(int r,int g,int b)
{return r << 16 | g << 8 | b;
}
void LCD_Clear(unsigned int j)
{
unsigned int i,m;
Address_set(0,0,240,320);
//Lcd_Write_Com(0x02c); //write_memory_start
//digitalWrite(LCD_RS,HIGH);
digitalWrite(LCD_CS,LOW);;i++)
for(i=0;i<240;i++)
for(m=0;m<320;m++)
{
Lcd_Write_Data(j>>8);
Lcd_Write_Data(j);
}
digitalWrite(LCD_CS,HIGH);
}
digitalWrite(LCD_CS,HIGH);
}
void setup()
{
for(int p=0;p<10;p++)
{
pinMode(p,OUTPUT);
}
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(A4,OUTPUT);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
digitalWrite(A4, HIGH);
Lcd_Init();
//LCD_Clear(0xf800);
}
{
for(int p=0;p<10;p++)
{
pinMode(p,OUTPUT);
}
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(A4,OUTPUT);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
digitalWrite(A4, HIGH);
Lcd_Init();
//LCD_Clear(0xf800);
}
void loop()
{
LCD_Clear(0xf800);
LCD_Clear(0x07E0);
LCD_Clear(0x001F);
/*
for(int i=0;i<1000;i++)
{
Rect(random(300),random(300),random(300),random(300),random(65535)); // rectangle at x, y, with, hight, color
}*/
// LCD_Clear(0xf800);
}
{
LCD_Clear(0xf800);
LCD_Clear(0x07E0);
LCD_Clear(0x001F);
/*
for(int i=0;i<1000;i++)
{
Rect(random(300),random(300),random(300),random(300),random(65535)); // rectangle at x, y, with, hight, color
}*/
// LCD_Clear(0xf800);
}
Der Display muss nur auf den Arduinio draufgesteckt werden. Auf dem Display werden die Fraben rot, grün und blau abwechselnd angezeigt.
Erstellt: Eva Schwegle (05.02.2020)
Letzte Änderung: Eva Schwegle (19.02.2020)