A lib for accessing ST7626 based lcds. It provides a set_pixel function. It is only tested with one display.

Revision:
0:9b24f296bc0e
Child:
1:ae0b4880e9db
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lcd.c	Sun Dec 26 22:44:22 2010 +0000
@@ -0,0 +1,244 @@
+#ifndef lcd_c
+#define lcd_c lcd_c
+#include "lcd.h"
+
+DigitalOut lcd_led(LCD_LED);
+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, 0x2d);    // EV:Vop[5:0]_6bit
+    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
+
+    lcd_led = 1;
+}
+
+void Display1(void) {
+    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++) {
+            if (j<=22) {
+                Write(DATA, 0xF8);
+                Write(DATA, 0x00);
+            } else if ((j>22)&&(j<44)) {
+                Write(DATA, 0x07);
+                Write(DATA, 0xE0);
+            } else {
+                Write(DATA, 0x00);
+                Write(DATA, 0x1F);
+            }
+        }
+    }
+}
+
+
+void LCD_clear(unsigned int GroundColor) {
+    //Display schwarz malen f&#65533;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);
+        }
+    }
+}
+
+void test_data(int data) {
+    lcd_data_l = data <<  23; //low nibble
+    lcd_data_h = data >>  4; //high nibble
+}
+
+void Write(unsigned char mode, unsigned char 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
\ No newline at end of file