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

Committer:
nullsub
Date:
Sun Dec 26 22:44:22 2010 +0000
Revision:
0:9b24f296bc0e
Child:
1:ae0b4880e9db
Alpha

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nullsub 0:9b24f296bc0e 1 #ifndef lcd_c
nullsub 0:9b24f296bc0e 2 #define lcd_c lcd_c
nullsub 0:9b24f296bc0e 3 #include "lcd.h"
nullsub 0:9b24f296bc0e 4
nullsub 0:9b24f296bc0e 5 DigitalOut lcd_led(LCD_LED);
nullsub 0:9b24f296bc0e 6 DigitalOut lcd_a0(LCD_A0);
nullsub 0:9b24f296bc0e 7 DigitalOut lcd_cs(LCD_CS);
nullsub 0:9b24f296bc0e 8 DigitalOut lcd_wr(LCD_WR);
nullsub 0:9b24f296bc0e 9 DigitalOut lcd_reset(LCD_RESET);
nullsub 0:9b24f296bc0e 10
nullsub 0:9b24f296bc0e 11 PortOut lcd_data_l(LCD_DATA_PORT_L, LCD_DATA_PORT_MASK_L);
nullsub 0:9b24f296bc0e 12 PortOut lcd_data_h(LCD_DATA_PORT_H, LCD_DATA_PORT_MASK_H);
nullsub 0:9b24f296bc0e 13
nullsub 0:9b24f296bc0e 14 //////////////////////////////////////////////////////////////////////////
nullsub 0:9b24f296bc0e 15 void LoadPaint(void) {
nullsub 0:9b24f296bc0e 16 Write(COMMAND, 0x31); // Ext = 1
nullsub 0:9b24f296bc0e 17
nullsub 0:9b24f296bc0e 18 Write(COMMAND, 0x20); // Palette FRC1 Setup
nullsub 0:9b24f296bc0e 19
nullsub 0:9b24f296bc0e 20 Write(DATA, 0x00); // RGB Level0 Setup
nullsub 0:9b24f296bc0e 21 Write(DATA, 0x02); // RGB Level1 Setup
nullsub 0:9b24f296bc0e 22 Write(DATA, 0x04); // RGB Level2 Setup
nullsub 0:9b24f296bc0e 23 Write(DATA, 0x06); // RGB Level3 Setup
nullsub 0:9b24f296bc0e 24 Write(DATA, 0x08); // RGB Level4 Setup
nullsub 0:9b24f296bc0e 25 Write(DATA, 0x0A); // RGB Level5 Setup
nullsub 0:9b24f296bc0e 26 Write(DATA, 0x0C); // RGB Level6 Setup
nullsub 0:9b24f296bc0e 27 Write(DATA, 0x0E); // RGB Level7 Setup
nullsub 0:9b24f296bc0e 28 Write(DATA, 0x10); // RGB Level8 Setup
nullsub 0:9b24f296bc0e 29 Write(DATA, 0x12); // RGB Level9 Setup
nullsub 0:9b24f296bc0e 30 Write(DATA, 0x14); // RGB Level10 Setup
nullsub 0:9b24f296bc0e 31 Write(DATA, 0x16); // RGB Level11 Setup
nullsub 0:9b24f296bc0e 32 Write(DATA, 0x18); // RGB Level12 Setup
nullsub 0:9b24f296bc0e 33 Write(DATA, 0x1A); // RGB Level13 Setup
nullsub 0:9b24f296bc0e 34 Write(DATA, 0x1C); // RGB Level14 Setup
nullsub 0:9b24f296bc0e 35 Write(DATA, 0x1E); // RGB Level15 Setup
nullsub 0:9b24f296bc0e 36
nullsub 0:9b24f296bc0e 37 Write(COMMAND, 0x21); // Palette FRC2 Setup
nullsub 0:9b24f296bc0e 38 Write(DATA, 0x00); // RGB Level0 Setup
nullsub 0:9b24f296bc0e 39 Write(DATA, 0x02); // RGB Level1 Setup
nullsub 0:9b24f296bc0e 40 Write(DATA, 0x04); // RGB Level2 Setup
nullsub 0:9b24f296bc0e 41 Write(DATA, 0x06); // RGB Level3 Setup
nullsub 0:9b24f296bc0e 42 Write(DATA, 0x08); // RGB Level4 Setup
nullsub 0:9b24f296bc0e 43 Write(DATA, 0x0A); // RGB Level5 Setup
nullsub 0:9b24f296bc0e 44 Write(DATA, 0x0C); // RGB Level6 Setup
nullsub 0:9b24f296bc0e 45 Write(DATA, 0x0E); // RGB Level7 Setup
nullsub 0:9b24f296bc0e 46 Write(DATA, 0x10); // RGB Level8 Setup
nullsub 0:9b24f296bc0e 47 Write(DATA, 0x12); // RGB Level9 Setup
nullsub 0:9b24f296bc0e 48 Write(DATA, 0x14); // RGB Level10 Setup
nullsub 0:9b24f296bc0e 49 Write(DATA, 0x16); // RGB Level11 Setup
nullsub 0:9b24f296bc0e 50 Write(DATA, 0x18); // RGB Level12 Setup
nullsub 0:9b24f296bc0e 51 Write(DATA, 0x1A); // RGB Level13 Setup
nullsub 0:9b24f296bc0e 52 Write(DATA, 0x1C); // RGB Level14 Setup
nullsub 0:9b24f296bc0e 53 Write(DATA, 0x1E); // RGB Level15 Setup
nullsub 0:9b24f296bc0e 54
nullsub 0:9b24f296bc0e 55 Write(COMMAND, 0x22); // Palette FRC3 Setup
nullsub 0:9b24f296bc0e 56 Write(DATA, 0x00); // RGB Level0 Setup
nullsub 0:9b24f296bc0e 57 Write(DATA, 0x02); // RGB Level1 Setup
nullsub 0:9b24f296bc0e 58 Write(DATA, 0x04); // RGB Level2 Setup
nullsub 0:9b24f296bc0e 59 Write(DATA, 0x06); // RGB Level3 Setup
nullsub 0:9b24f296bc0e 60 Write(DATA, 0x08); // RGB Level4 Setup
nullsub 0:9b24f296bc0e 61 Write(DATA, 0x0A); // RGB Level5 Setup
nullsub 0:9b24f296bc0e 62 Write(DATA, 0x0C); // RGB Level6 Setup
nullsub 0:9b24f296bc0e 63 Write(DATA, 0x0E); // RGB Level7 Setup
nullsub 0:9b24f296bc0e 64 Write(DATA, 0x10); // RGB Level8 Setup
nullsub 0:9b24f296bc0e 65 Write(DATA, 0x12); // RGB Level9 Setup
nullsub 0:9b24f296bc0e 66 Write(DATA, 0x14); // RGB Level10 Setup
nullsub 0:9b24f296bc0e 67 Write(DATA, 0x16); // RGB Level11 Setup
nullsub 0:9b24f296bc0e 68 Write(DATA, 0x18); // RGB Level12 Setup
nullsub 0:9b24f296bc0e 69 Write(DATA, 0x1A); // RGB Level13 Setup
nullsub 0:9b24f296bc0e 70 Write(DATA, 0x1C); // RGB Level14 Setup
nullsub 0:9b24f296bc0e 71 Write(DATA, 0x1E); // RGB Level15 Setup
nullsub 0:9b24f296bc0e 72
nullsub 0:9b24f296bc0e 73 Write(COMMAND, 0x23); // Palette FRC4 Setup
nullsub 0:9b24f296bc0e 74 Write(DATA, 0x00); // RGB Level0 Setup
nullsub 0:9b24f296bc0e 75 Write(DATA, 0x02); // RGB Level1 Setup
nullsub 0:9b24f296bc0e 76 Write(DATA, 0x04); // RGB Level2 Setup
nullsub 0:9b24f296bc0e 77 Write(DATA, 0x06); // RGB Level3 Setup
nullsub 0:9b24f296bc0e 78 Write(DATA, 0x08); // RGB Level4 Setup
nullsub 0:9b24f296bc0e 79 Write(DATA, 0x0A); // RGB Level5 Setup
nullsub 0:9b24f296bc0e 80 Write(DATA, 0x0C); // RGB Level6 Setup
nullsub 0:9b24f296bc0e 81 Write(DATA, 0x0E); // RGB Level7 Setup
nullsub 0:9b24f296bc0e 82 Write(DATA, 0x10); // RGB Level8 Setup
nullsub 0:9b24f296bc0e 83 Write(DATA, 0x12); // RGB Level9 Setup
nullsub 0:9b24f296bc0e 84 Write(DATA, 0x14); // RGB Level10 Setup
nullsub 0:9b24f296bc0e 85 Write(DATA, 0x16); // RGB Level11 Setup
nullsub 0:9b24f296bc0e 86 Write(DATA, 0x18); // RGB Level12 Setup
nullsub 0:9b24f296bc0e 87 Write(DATA, 0x1A); // RGB Level13 Setup
nullsub 0:9b24f296bc0e 88 Write(DATA, 0x1C); // RGB Level14 Setup
nullsub 0:9b24f296bc0e 89 Write(DATA, 0x1E); // RGB Level15 Setup
nullsub 0:9b24f296bc0e 90 Write(COMMAND, 0x30); // Ext = 0
nullsub 0:9b24f296bc0e 91 }
nullsub 0:9b24f296bc0e 92
nullsub 0:9b24f296bc0e 93 void LoadEEPROM(void) {
nullsub 0:9b24f296bc0e 94 Write(COMMAND, 0x31); // Ext = 1
nullsub 0:9b24f296bc0e 95 Write(COMMAND, 0xcd); // Enable EEPROM
nullsub 0:9b24f296bc0e 96 Write(DATA, 0x00); //
nullsub 0:9b24f296bc0e 97 wait_ms(50); // Delay 50ms
nullsub 0:9b24f296bc0e 98 Write(COMMAND, 0xfd); // Load EEPROM
nullsub 0:9b24f296bc0e 99 wait_ms(50); // Delay 50ms
nullsub 0:9b24f296bc0e 100 Write(COMMAND, 0xcc); // Disable EEPROM
nullsub 0:9b24f296bc0e 101 Write(COMMAND, 0x30); // Ext = 0
nullsub 0:9b24f296bc0e 102 }
nullsub 0:9b24f296bc0e 103
nullsub 0:9b24f296bc0e 104 void ST7626_Init(void) {
nullsub 0:9b24f296bc0e 105 lcd_cs = 1;
nullsub 0:9b24f296bc0e 106 /* lcd_reset = 0;
nullsub 0:9b24f296bc0e 107 wait_ms(10);
nullsub 0:9b24f296bc0e 108 lcd_reset = 1;
nullsub 0:9b24f296bc0e 109 wait_ms(50);*/
nullsub 0:9b24f296bc0e 110 resetdisp();
nullsub 0:9b24f296bc0e 111
nullsub 0:9b24f296bc0e 112 Write(COMMAND, 0x30); // Ext = 0
nullsub 0:9b24f296bc0e 113 Write(COMMAND, 0x04); // Sleep In/Out Preparation
nullsub 0:9b24f296bc0e 114 Write(DATA, 0x3e); // Sleep In/Out Sequencing
nullsub 0:9b24f296bc0e 115 Write(COMMAND, 0x31); // Ext = 1
nullsub 0:9b24f296bc0e 116 Write(COMMAND, 0xf4); // Internal Initialize Preparation
nullsub 0:9b24f296bc0e 117 Write(DATA, 0x58); // Internal Initialize Sequencing
nullsub 0:9b24f296bc0e 118 Write(COMMAND, 0x30); // Ext = 0
nullsub 0:9b24f296bc0e 119 Write(COMMAND, 0x94); // Sleep Out
nullsub 0:9b24f296bc0e 120 Write(COMMAND, 0xd1); // Internal OSC on
nullsub 0:9b24f296bc0e 121 Write(COMMAND, 0xca); // Display Control
nullsub 0:9b24f296bc0e 122 Write(DATA, 0x00); // CL divisions Ratio
nullsub 0:9b24f296bc0e 123 Write(DATA, 0x10); // Duty Setting (= 68)
nullsub 0:9b24f296bc0e 124 Write(DATA, 0x00); // N-Line Inverse-set value
nullsub 0:9b24f296bc0e 125 Write(COMMAND, 0x31); // Ext = 1
nullsub 0:9b24f296bc0e 126 Write(COMMAND, 0x32); // Analog Setting
nullsub 0:9b24f296bc0e 127 Write(DATA, 0x00); // OSC Freqency adjustment
nullsub 0:9b24f296bc0e 128 Write(DATA, 0x02); // Booster Efficiency Setting = Level 3
nullsub 0:9b24f296bc0e 129 Write(DATA, 0x03); // Bias Setting (=1/9)
nullsub 0:9b24f296bc0e 130 Write(DATA, 0x04); // Booster X 5
nullsub 0:9b24f296bc0e 131 Write(COMMAND, 0x30); // Ext = 0
nullsub 0:9b24f296bc0e 132 Write(COMMAND, 0x81); // Electronic Volume Control
nullsub 0:9b24f296bc0e 133 Write(DATA, 0x2d); // EV:Vop[5:0]_6bit
nullsub 0:9b24f296bc0e 134 Write(DATA, 0x02); // EV:Vop[8:6]_3bit
nullsub 0:9b24f296bc0e 135 // Vop is 10.52V under this condition for example
nullsub 0:9b24f296bc0e 136 Write( COMMAND, 0x20); // Power Control
nullsub 0:9b24f296bc0e 137 Write( DATA, 0x0b); // B/F/R = On/On/On
nullsub 0:9b24f296bc0e 138 wait_ms(50); // Delay 50ms
nullsub 0:9b24f296bc0e 139 LoadEEPROM(); // Load EEPROM (refer page 68)
nullsub 0:9b24f296bc0e 140 LoadPaint(); // Load Gamma Table Parameter (refer page 64)
nullsub 0:9b24f296bc0e 141 Write(COMMAND, 0x30); // Ext = 0
nullsub 0:9b24f296bc0e 142 Write(COMMAND, 0xa7); // Inverse Display
nullsub 0:9b24f296bc0e 143 Write(COMMAND, 0xbb); // Com Scan Direction
nullsub 0:9b24f296bc0e 144 Write(DATA, 0x01); // 0~33 / 67~34
nullsub 0:9b24f296bc0e 145 Write(COMMAND, 0xbc); // Data Scan Direction
nullsub 0:9b24f296bc0e 146 Write(DATA, 0x00); // Page / Column Address Setting
nullsub 0:9b24f296bc0e 147 Write(DATA, 0x00); // RGB arrangement (0:RGB 1:BGR)
nullsub 0:9b24f296bc0e 148 Write(DATA, 0x01); // Gray-scale setup ( 64-gray: 01H)
nullsub 0:9b24f296bc0e 149 Write(COMMAND, 0x75); // Page address set
nullsub 0:9b24f296bc0e 150 Write(DATA, 0x00); // From page address 0
nullsub 0:9b24f296bc0e 151 Write(DATA, 0x43); // to page address 67
nullsub 0:9b24f296bc0e 152 Write(COMMAND, 0x15); // Column address set
nullsub 0:9b24f296bc0e 153 Write(DATA, 0x00); // From column address 0
nullsub 0:9b24f296bc0e 154 Write(DATA, 0x5f); // to column address 97
nullsub 0:9b24f296bc0e 155 Write(COMMAND, 0xaf); // Display On
nullsub 0:9b24f296bc0e 156 Write(COMMAND, 0x30); // Ext = 0
nullsub 0:9b24f296bc0e 157
nullsub 0:9b24f296bc0e 158 lcd_led = 1;
nullsub 0:9b24f296bc0e 159 }
nullsub 0:9b24f296bc0e 160
nullsub 0:9b24f296bc0e 161 void Display1(void) {
nullsub 0:9b24f296bc0e 162 unsigned char i, j;
nullsub 0:9b24f296bc0e 163 Write(COMMAND, 0x30); // Ext = 0
nullsub 0:9b24f296bc0e 164 Write(COMMAND, 0x15); // Column address set
nullsub 0:9b24f296bc0e 165 Write(DATA, 0); // From column address 0 to 97
nullsub 0:9b24f296bc0e 166 Write(DATA, 97 );
nullsub 0:9b24f296bc0e 167 Write(COMMAND, 0x75); // Page address set
nullsub 0:9b24f296bc0e 168 Write(DATA, 0); // From page address 0 to 67
nullsub 0:9b24f296bc0e 169 Write(DATA, 67);
nullsub 0:9b24f296bc0e 170 Write(COMMAND, 0x5c); // Entry Memory Write Mode
nullsub 0:9b24f296bc0e 171
nullsub 0:9b24f296bc0e 172 for (j = 0; j < 68 ; j++) {
nullsub 0:9b24f296bc0e 173 for (i = 0 ; i < 98 ; i++) {
nullsub 0:9b24f296bc0e 174 if (j<=22) {
nullsub 0:9b24f296bc0e 175 Write(DATA, 0xF8);
nullsub 0:9b24f296bc0e 176 Write(DATA, 0x00);
nullsub 0:9b24f296bc0e 177 } else if ((j>22)&&(j<44)) {
nullsub 0:9b24f296bc0e 178 Write(DATA, 0x07);
nullsub 0:9b24f296bc0e 179 Write(DATA, 0xE0);
nullsub 0:9b24f296bc0e 180 } else {
nullsub 0:9b24f296bc0e 181 Write(DATA, 0x00);
nullsub 0:9b24f296bc0e 182 Write(DATA, 0x1F);
nullsub 0:9b24f296bc0e 183 }
nullsub 0:9b24f296bc0e 184 }
nullsub 0:9b24f296bc0e 185 }
nullsub 0:9b24f296bc0e 186 }
nullsub 0:9b24f296bc0e 187
nullsub 0:9b24f296bc0e 188
nullsub 0:9b24f296bc0e 189 void LCD_clear(unsigned int GroundColor) {
nullsub 0:9b24f296bc0e 190 //Display schwarz malen f&#65533;r Schrift Vorbereitung
nullsub 0:9b24f296bc0e 191 unsigned char i, j;
nullsub 0:9b24f296bc0e 192 Write(COMMAND, 0x30); // Ext = 0
nullsub 0:9b24f296bc0e 193 Write(COMMAND, 0x15); // Column address set
nullsub 0:9b24f296bc0e 194 Write(DATA, 0); // From column address 0 to 97
nullsub 0:9b24f296bc0e 195 Write(DATA, 97 );
nullsub 0:9b24f296bc0e 196 Write(COMMAND, 0x75); // Page address set
nullsub 0:9b24f296bc0e 197 Write(DATA, 0); // From page address 0 to 67
nullsub 0:9b24f296bc0e 198 Write(DATA, 67);
nullsub 0:9b24f296bc0e 199 Write(COMMAND, 0x5c); // Entry Memory Write Mode
nullsub 0:9b24f296bc0e 200
nullsub 0:9b24f296bc0e 201
nullsub 0:9b24f296bc0e 202 for (j = 0; j < 68 ; j++) {
nullsub 0:9b24f296bc0e 203 for (i = 0 ; i < 98 ; i++) {
nullsub 0:9b24f296bc0e 204 Write(DATA, GroundColor);
nullsub 0:9b24f296bc0e 205 Write(DATA, GroundColor);
nullsub 0:9b24f296bc0e 206 }
nullsub 0:9b24f296bc0e 207 }
nullsub 0:9b24f296bc0e 208 }
nullsub 0:9b24f296bc0e 209
nullsub 0:9b24f296bc0e 210 void test_data(int data) {
nullsub 0:9b24f296bc0e 211 lcd_data_l = data << 23; //low nibble
nullsub 0:9b24f296bc0e 212 lcd_data_h = data >> 4; //high nibble
nullsub 0:9b24f296bc0e 213 }
nullsub 0:9b24f296bc0e 214
nullsub 0:9b24f296bc0e 215 void Write(unsigned char mode, unsigned char data) {
nullsub 0:9b24f296bc0e 216 if (mode) {
nullsub 0:9b24f296bc0e 217 lcd_a0 = 1; // LCD_PORT_COM |= (1<<LCD_A0);//A0=1;
nullsub 0:9b24f296bc0e 218 } else {
nullsub 0:9b24f296bc0e 219 lcd_a0 = 0; //LCD_PORT_COM &= ~(1<<LCD_A0);//A0=0;
nullsub 0:9b24f296bc0e 220 }
nullsub 0:9b24f296bc0e 221
nullsub 0:9b24f296bc0e 222 lcd_data_l = data << 23; //low nibble
nullsub 0:9b24f296bc0e 223 lcd_data_h = data >> 0x04; //high nibble
nullsub 0:9b24f296bc0e 224
nullsub 0:9b24f296bc0e 225 lcd_cs = 0; // LCD_PORT_COM &= ~(1<<LCD_CS);//CS=0;
nullsub 0:9b24f296bc0e 226 lcd_wr = 0; //LCD_PORT_COM &= ~(1<<LCD_WR);//WR=0;
nullsub 0:9b24f296bc0e 227 wait_us(1); //FIXME: look it up in the datasheet!!!
nullsub 0:9b24f296bc0e 228 lcd_wr = 1; //LCD_PORT_COM |= (1<<LCD_WR);//WR=1;
nullsub 0:9b24f296bc0e 229 lcd_cs = 1; //LCD_PORT_COM |= (1<<LCD_CS);//CS=1;
nullsub 0:9b24f296bc0e 230 wait_us(1);
nullsub 0:9b24f296bc0e 231 }
nullsub 0:9b24f296bc0e 232
nullsub 0:9b24f296bc0e 233 void resetdisp(void) {
nullsub 0:9b24f296bc0e 234 lcd_reset = 1; // LCD_PORT_COM |= (1<<LCD_RESET);
nullsub 0:9b24f296bc0e 235 wait_us(1);
nullsub 0:9b24f296bc0e 236 lcd_reset = 0; //LCD_PORT_COM &= ~(1<<LCD_RESET);
nullsub 0:9b24f296bc0e 237 wait_us(1);
nullsub 0:9b24f296bc0e 238 lcd_reset = 1; //LCD_PORT_COM |= (1<<LCD_RESET);
nullsub 0:9b24f296bc0e 239 wait_us(1);
nullsub 0:9b24f296bc0e 240 }
nullsub 0:9b24f296bc0e 241
nullsub 0:9b24f296bc0e 242
nullsub 0:9b24f296bc0e 243
nullsub 0:9b24f296bc0e 244 #endif