A lib for accessing ST7626 based lcds. It provides a set_pixel function. It is only tested with one display.
lcd.c
- Committer:
- nullsub
- Date:
- 2011-01-08
- Revision:
- 3:5b7d04c36d1a
- Parent:
- 2:04fb8af3ecb0
- Child:
- 5:70dcbb284628
File content as of revision 3:5b7d04c36d1a:
#ifndef lcd_c #define lcd_c lcd_c #include "lcd.h" #ifdef LCD_BACKLIGHT_LED DigitalOut lcd_led(LCD_LED); #endif DigitalOut lcd_a0(LCD_A0); DigitalOut lcd_cs(LCD_CS); DigitalOut lcd_wr(LCD_WR); DigitalOut lcd_reset(LCD_RESET); PortOut lcd_data_l(LCD_DATA_PORT_L, LCD_DATA_PORT_MASK_L); PortOut lcd_data_h(LCD_DATA_PORT_H, LCD_DATA_PORT_MASK_H); ////////////////////////////////////////////////////////////////////////// void LoadPaint(void) { Write(COMMAND, 0x31); // Ext = 1 Write(COMMAND, 0x20); // Palette FRC1 Setup Write(DATA, 0x00); // RGB Level0 Setup Write(DATA, 0x02); // RGB Level1 Setup Write(DATA, 0x04); // RGB Level2 Setup Write(DATA, 0x06); // RGB Level3 Setup Write(DATA, 0x08); // RGB Level4 Setup Write(DATA, 0x0A); // RGB Level5 Setup Write(DATA, 0x0C); // RGB Level6 Setup Write(DATA, 0x0E); // RGB Level7 Setup Write(DATA, 0x10); // RGB Level8 Setup Write(DATA, 0x12); // RGB Level9 Setup Write(DATA, 0x14); // RGB Level10 Setup Write(DATA, 0x16); // RGB Level11 Setup Write(DATA, 0x18); // RGB Level12 Setup Write(DATA, 0x1A); // RGB Level13 Setup Write(DATA, 0x1C); // RGB Level14 Setup Write(DATA, 0x1E); // RGB Level15 Setup Write(COMMAND, 0x21); // Palette FRC2 Setup Write(DATA, 0x00); // RGB Level0 Setup Write(DATA, 0x02); // RGB Level1 Setup Write(DATA, 0x04); // RGB Level2 Setup Write(DATA, 0x06); // RGB Level3 Setup Write(DATA, 0x08); // RGB Level4 Setup Write(DATA, 0x0A); // RGB Level5 Setup Write(DATA, 0x0C); // RGB Level6 Setup Write(DATA, 0x0E); // RGB Level7 Setup Write(DATA, 0x10); // RGB Level8 Setup Write(DATA, 0x12); // RGB Level9 Setup Write(DATA, 0x14); // RGB Level10 Setup Write(DATA, 0x16); // RGB Level11 Setup Write(DATA, 0x18); // RGB Level12 Setup Write(DATA, 0x1A); // RGB Level13 Setup Write(DATA, 0x1C); // RGB Level14 Setup Write(DATA, 0x1E); // RGB Level15 Setup Write(COMMAND, 0x22); // Palette FRC3 Setup Write(DATA, 0x00); // RGB Level0 Setup Write(DATA, 0x02); // RGB Level1 Setup Write(DATA, 0x04); // RGB Level2 Setup Write(DATA, 0x06); // RGB Level3 Setup Write(DATA, 0x08); // RGB Level4 Setup Write(DATA, 0x0A); // RGB Level5 Setup Write(DATA, 0x0C); // RGB Level6 Setup Write(DATA, 0x0E); // RGB Level7 Setup Write(DATA, 0x10); // RGB Level8 Setup Write(DATA, 0x12); // RGB Level9 Setup Write(DATA, 0x14); // RGB Level10 Setup Write(DATA, 0x16); // RGB Level11 Setup Write(DATA, 0x18); // RGB Level12 Setup Write(DATA, 0x1A); // RGB Level13 Setup Write(DATA, 0x1C); // RGB Level14 Setup Write(DATA, 0x1E); // RGB Level15 Setup Write(COMMAND, 0x23); // Palette FRC4 Setup Write(DATA, 0x00); // RGB Level0 Setup Write(DATA, 0x02); // RGB Level1 Setup Write(DATA, 0x04); // RGB Level2 Setup Write(DATA, 0x06); // RGB Level3 Setup Write(DATA, 0x08); // RGB Level4 Setup Write(DATA, 0x0A); // RGB Level5 Setup Write(DATA, 0x0C); // RGB Level6 Setup Write(DATA, 0x0E); // RGB Level7 Setup Write(DATA, 0x10); // RGB Level8 Setup Write(DATA, 0x12); // RGB Level9 Setup Write(DATA, 0x14); // RGB Level10 Setup Write(DATA, 0x16); // RGB Level11 Setup Write(DATA, 0x18); // RGB Level12 Setup Write(DATA, 0x1A); // RGB Level13 Setup Write(DATA, 0x1C); // RGB Level14 Setup Write(DATA, 0x1E); // RGB Level15 Setup Write(COMMAND, 0x30); // Ext = 0 } void LoadEEPROM(void) { Write(COMMAND, 0x31); // Ext = 1 Write(COMMAND, 0xcd); // Enable EEPROM Write(DATA, 0x00); // wait_ms(50); // Delay 50ms Write(COMMAND, 0xfd); // Load EEPROM wait_ms(50); // Delay 50ms Write(COMMAND, 0xcc); // Disable EEPROM Write(COMMAND, 0x30); // Ext = 0 } void ST7626_Init(void) { lcd_cs = 1; /* lcd_reset = 0; wait_ms(10); lcd_reset = 1; wait_ms(50);*/ resetdisp(); Write(COMMAND, 0x30); // Ext = 0 Write(COMMAND, 0x04); // Sleep In/Out Preparation Write(DATA, 0x3e); // Sleep In/Out Sequencing Write(COMMAND, 0x31); // Ext = 1 Write(COMMAND, 0xf4); // Internal Initialize Preparation Write(DATA, 0x58); // Internal Initialize Sequencing Write(COMMAND, 0x30); // Ext = 0 Write(COMMAND, 0x94); // Sleep Out Write(COMMAND, 0xd1); // Internal OSC on Write(COMMAND, 0xca); // Display Control Write(DATA, 0x00); // CL divisions Ratio Write(DATA, 0x10); // Duty Setting (= 68) Write(DATA, 0x00); // N-Line Inverse-set value Write(COMMAND, 0x31); // Ext = 1 Write(COMMAND, 0x32); // Analog Setting Write(DATA, 0x00); // OSC Freqency adjustment Write(DATA, 0x02); // Booster Efficiency Setting = Level 3 Write(DATA, 0x03); // Bias Setting (=1/9) Write(DATA, 0x04); // Booster X 5 Write(COMMAND, 0x30); // Ext = 0 Write(COMMAND, 0x81); // Electronic Volume Control Write(DATA, 0x1d); // EV:Vop[5:0]_6bit //previously Write(DATA,0x2D); Write(DATA, 0x02); // EV:Vop[8:6]_3bit // Vop is 10.52V under this condition for example Write( COMMAND, 0x20); // Power Control Write( DATA, 0x0b); // B/F/R = On/On/On wait_ms(50); // Delay 50ms LoadEEPROM(); // Load EEPROM (refer page 68) LoadPaint(); // Load Gamma Table Parameter (refer page 64) Write(COMMAND, 0x30); // Ext = 0 Write(COMMAND, 0xa7); // Inverse Display Write(COMMAND, 0xbb); // Com Scan Direction Write(DATA, 0x01); // 0~33 / 67~34 Write(COMMAND, 0xbc); // Data Scan Direction Write(DATA, 0x00); // Page / Column Address Setting Write(DATA, 0x00); // RGB arrangement (0:RGB 1:BGR) Write(DATA, 0x01); // Gray-scale setup ( 64-gray: 01H) Write(COMMAND, 0x75); // Page address set Write(DATA, 0x00); // From page address 0 Write(DATA, 0x43); // to page address 67 Write(COMMAND, 0x15); // Column address set Write(DATA, 0x00); // From column address 0 Write(DATA, 0x5f); // to column address 97 Write(COMMAND, 0xaf); // Display On Write(COMMAND, 0x30); // Ext = 0 #ifdef LCD_BACKLIGHT_LED lcd_led = 1; #endif } void lcd_putpixel( int x, int y, int16_t color){ Write(COMMAND, 0x30); // Ext = 0 Write(COMMAND, 0x15); // Column address set Write(DATA, x); // From column address 0 to 97 Write(DATA, x+1 ); Write(COMMAND, 0x75); // Page address set Write(DATA, y); // From page address 0 to 67 Write(DATA, y+1); Write(COMMAND, 0x5c); // Entry Memory Write Mode Write(DATA, (int8_t)(color&0xFF)); Write(DATA, (int8_t)((color>>8)&0xFF)); } void LCD_clear(int16_t GroundColor) { //Display schwarz malen f�r Schrift Vorbereitung unsigned char i, j; Write(COMMAND, 0x30); // Ext = 0 Write(COMMAND, 0x15); // Column address set Write(DATA, 0); // From column address 0 to 97 Write(DATA, 97 ); Write(COMMAND, 0x75); // Page address set Write(DATA, 0); // From page address 0 to 67 Write(DATA, 67); Write(COMMAND, 0x5c); // Entry Memory Write Mode for (j = 0; j < 68 ; j++) { for (i = 0 ; i < 98 ; i++) { Write(DATA, GroundColor); Write(DATA, GroundColor>>8); } } } void Write(unsigned char mode, int8_t data) { if (mode) { lcd_a0 = 1; // LCD_PORT_COM |= (1<<LCD_A0);//A0=1; } else { lcd_a0 = 0; //LCD_PORT_COM &= ~(1<<LCD_A0);//A0=0; } lcd_data_l = data << 23; //low nibble lcd_data_h = data >> 0x04; //high nibble lcd_cs = 0; // LCD_PORT_COM &= ~(1<<LCD_CS);//CS=0; lcd_wr = 0; //LCD_PORT_COM &= ~(1<<LCD_WR);//WR=0; wait_us(1); //FIXME: look it up in the datasheet!!! lcd_wr = 1; //LCD_PORT_COM |= (1<<LCD_WR);//WR=1; lcd_cs = 1; //LCD_PORT_COM |= (1<<LCD_CS);//CS=1; wait_us(1); } void resetdisp(void) { lcd_reset = 1; // LCD_PORT_COM |= (1<<LCD_RESET); wait_us(1); lcd_reset = 0; //LCD_PORT_COM &= ~(1<<LCD_RESET); wait_us(1); lcd_reset = 1; //LCD_PORT_COM |= (1<<LCD_RESET); wait_us(1); } #endif