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

Committer:
nullsub
Date:
Sun Jan 09 22:04:01 2011 +0000
Revision:
5:70dcbb284628
Parent:
3:5b7d04c36d1a

        

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