This program is for OV7670 and TFT-LCD(REL225L01)

Dependencies:   mbed

Committer:
y_notsu
Date:
Thu Feb 16 14:51:28 2012 +0000
Revision:
0:03f32e3679c8

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
y_notsu 0:03f32e3679c8 1 #include "REL225L01.h"
y_notsu 0:03f32e3679c8 2 //This program is for using 74HC595 and SPI I/F
y_notsu 0:03f32e3679c8 3 //
y_notsu 0:03f32e3679c8 4
y_notsu 0:03f32e3679c8 5
y_notsu 0:03f32e3679c8 6 REL225L01::REL225L01() : CS_OUT(CS), RS_OUT(RS), RD_OUT(RD), WR_OUT(_WR),RST_OUT(RST),RCK_OUT(RCK),spi(MOSI,MISO,SCK)//SCK_OUT(SCK),SDA_OUT(SDA)
y_notsu 0:03f32e3679c8 7 { CS_OUT = 0x01;RS_OUT = 0x01; RD_OUT = 0x01;
y_notsu 0:03f32e3679c8 8 WR_OUT = 0x01;RST_OUT = 0x01;RCK_OUT = 0x00;
y_notsu 0:03f32e3679c8 9 //SCK_OUT= 0x01; SDA_OUT=0x01;
y_notsu 0:03f32e3679c8 10 //t.attach( this, &SG12864A::display, ReflashRate );
y_notsu 0:03f32e3679c8 11 }
y_notsu 0:03f32e3679c8 12
y_notsu 0:03f32e3679c8 13 //Initialization LCD module
y_notsu 0:03f32e3679c8 14 void REL225L01::lcd_init(void){
y_notsu 0:03f32e3679c8 15 spi.format(8,3);
y_notsu 0:03f32e3679c8 16 spi.frequency(20000000);
y_notsu 0:03f32e3679c8 17
y_notsu 0:03f32e3679c8 18 wait_ms(20);
y_notsu 0:03f32e3679c8 19 RCK_OUT=0;
y_notsu 0:03f32e3679c8 20 RD_OUT=1;
y_notsu 0:03f32e3679c8 21 CS_OUT=1;
y_notsu 0:03f32e3679c8 22 WR_OUT = 0;
y_notsu 0:03f32e3679c8 23 //WR_OUT=1;
y_notsu 0:03f32e3679c8 24 RST_OUT=0;
y_notsu 0:03f32e3679c8 25 wait_ms(1);
y_notsu 0:03f32e3679c8 26 RST_OUT=1;
y_notsu 0:03f32e3679c8 27 wait_ms(25);
y_notsu 0:03f32e3679c8 28
y_notsu 0:03f32e3679c8 29 lcd_cmd(0xB0);
y_notsu 0:03f32e3679c8 30 lcd_data(0xCA);
y_notsu 0:03f32e3679c8 31 lcd_data(0x90);
y_notsu 0:03f32e3679c8 32 lcd_data(0x37);
y_notsu 0:03f32e3679c8 33 lcd_data(0x01);
y_notsu 0:03f32e3679c8 34 lcd_data(0x48);
y_notsu 0:03f32e3679c8 35 lcd_data(0x01);
y_notsu 0:03f32e3679c8 36 lcd_data(0x40);
y_notsu 0:03f32e3679c8 37 lcd_data(0x04);
y_notsu 0:03f32e3679c8 38 lcd_data(0x00);
y_notsu 0:03f32e3679c8 39 lcd_data(0x00);
y_notsu 0:03f32e3679c8 40
y_notsu 0:03f32e3679c8 41 lcd_cmd(0x26);
y_notsu 0:03f32e3679c8 42 lcd_data(0x01);
y_notsu 0:03f32e3679c8 43
y_notsu 0:03f32e3679c8 44 lcd_cmd(0xB1);
y_notsu 0:03f32e3679c8 45 lcd_data(0x00);
y_notsu 0:03f32e3679c8 46 lcd_data(0x00);
y_notsu 0:03f32e3679c8 47 lcd_data(0x00);
y_notsu 0:03f32e3679c8 48 lcd_data(0x00);
y_notsu 0:03f32e3679c8 49 lcd_data(0x08);
y_notsu 0:03f32e3679c8 50 lcd_data(0x00);
y_notsu 0:03f32e3679c8 51 lcd_data(0x04);
y_notsu 0:03f32e3679c8 52 lcd_data(0x10);
y_notsu 0:03f32e3679c8 53 lcd_data(0x48);
y_notsu 0:03f32e3679c8 54 lcd_data(0x82);
y_notsu 0:03f32e3679c8 55 lcd_data(0x20);
y_notsu 0:03f32e3679c8 56 lcd_data(0x84);
y_notsu 0:03f32e3679c8 57 lcd_data(0x92);
y_notsu 0:03f32e3679c8 58 lcd_data(0x2A);
y_notsu 0:03f32e3679c8 59 lcd_data(0x52);
y_notsu 0:03f32e3679c8 60 lcd_data(0xAA);
y_notsu 0:03f32e3679c8 61 lcd_data(0x5A);
y_notsu 0:03f32e3679c8 62 lcd_data(0x55);
y_notsu 0:03f32e3679c8 63 lcd_data(0x2A);
y_notsu 0:03f32e3679c8 64 lcd_data(0x55);
y_notsu 0:03f32e3679c8 65 lcd_data(0xAE);
y_notsu 0:03f32e3679c8 66 lcd_data(0xFF);
y_notsu 0:03f32e3679c8 67 lcd_data(0xFE);
y_notsu 0:03f32e3679c8 68 lcd_data(0x00);
y_notsu 0:03f32e3679c8 69 lcd_data(0x00);
y_notsu 0:03f32e3679c8 70 lcd_data(0x00);
y_notsu 0:03f32e3679c8 71 lcd_data(0x00);
y_notsu 0:03f32e3679c8 72 lcd_data(0x00);
y_notsu 0:03f32e3679c8 73 lcd_data(0x00);
y_notsu 0:03f32e3679c8 74 lcd_data(0x04);
y_notsu 0:03f32e3679c8 75
y_notsu 0:03f32e3679c8 76 lcd_cmd(0xB2);
y_notsu 0:03f32e3679c8 77 lcd_data(0x00);
y_notsu 0:03f32e3679c8 78 lcd_data(0x00);
y_notsu 0:03f32e3679c8 79 lcd_data(0x00);
y_notsu 0:03f32e3679c8 80 lcd_data(0x00);
y_notsu 0:03f32e3679c8 81 lcd_data(0x04);
y_notsu 0:03f32e3679c8 82 lcd_data(0x00);
y_notsu 0:03f32e3679c8 83 lcd_data(0x02);
y_notsu 0:03f32e3679c8 84 lcd_data(0x08);
y_notsu 0:03f32e3679c8 85 lcd_data(0x48);
y_notsu 0:03f32e3679c8 86 lcd_data(0x82);
y_notsu 0:03f32e3679c8 87 lcd_data(0x20);
y_notsu 0:03f32e3679c8 88 lcd_data(0x84);
y_notsu 0:03f32e3679c8 89 lcd_data(0x42);
y_notsu 0:03f32e3679c8 90 lcd_data(0x48);
y_notsu 0:03f32e3679c8 91 lcd_data(0x92);
y_notsu 0:03f32e3679c8 92 lcd_data(0x2A);
y_notsu 0:03f32e3679c8 93 lcd_data(0x52);
y_notsu 0:03f32e3679c8 94 lcd_data(0xAA);
y_notsu 0:03f32e3679c8 95 lcd_data(0x5A);
y_notsu 0:03f32e3679c8 96 lcd_data(0x55);
y_notsu 0:03f32e3679c8 97 lcd_data(0x2A);
y_notsu 0:03f32e3679c8 98 lcd_data(0x55);
y_notsu 0:03f32e3679c8 99 lcd_data(0xAE);
y_notsu 0:03f32e3679c8 100 lcd_data(0xFF);
y_notsu 0:03f32e3679c8 101 lcd_data(0xFE);
y_notsu 0:03f32e3679c8 102 lcd_data(0x00);
y_notsu 0:03f32e3679c8 103 lcd_data(0x00);
y_notsu 0:03f32e3679c8 104 lcd_data(0x00);
y_notsu 0:03f32e3679c8 105 lcd_data(0x00);
y_notsu 0:03f32e3679c8 106 lcd_data(0x00);
y_notsu 0:03f32e3679c8 107 lcd_data(0x00);
y_notsu 0:03f32e3679c8 108 lcd_data(0x04);
y_notsu 0:03f32e3679c8 109
y_notsu 0:03f32e3679c8 110 lcd_cmd(MODE); // Entry Mode
y_notsu 0:03f32e3679c8 111 lcd_data(0x29); // 0b00101001 : 0 I/D1 AM 0 BGR 0 0 I/D0
y_notsu 0:03f32e3679c8 112 // ID[1:0] = 00: H:increment, V:increment
y_notsu 0:03f32e3679c8 113 // 01: H:increment, V:decrement
y_notsu 0:03f32e3679c8 114 // 10: H:Decrement, V:increment
y_notsu 0:03f32e3679c8 115 // 11: H:Decrement, V:decrement
y_notsu 0:03f32e3679c8 116 // AM = 0 : Horizontal , AM=1: Vertical
y_notsu 0:03f32e3679c8 117 //BGR : Reverse Red and Blue
y_notsu 0:03f32e3679c8 118 //color mode
y_notsu 0:03f32e3679c8 119 lcd_cmd(COLMOD);
y_notsu 0:03f32e3679c8 120 lcd_data(0x05); //65k color
y_notsu 0:03f32e3679c8 121 //Inteface mode
y_notsu 0:03f32e3679c8 122 lcd_cmd(IFMOD);
y_notsu 0:03f32e3679c8 123 lcd_data(0x00); //Data[2:0] = I/F mode
y_notsu 0:03f32e3679c8 124 // = 000 : 8bit I/F
y_notsu 0:03f32e3679c8 125 // = 011 : 16bit I/F
y_notsu 0:03f32e3679c8 126 // = 100 : 18bit I/F
y_notsu 0:03f32e3679c8 127
y_notsu 0:03f32e3679c8 128
y_notsu 0:03f32e3679c8 129 lcd_cmd(0xBA);
y_notsu 0:03f32e3679c8 130 lcd_data(0x55);
y_notsu 0:03f32e3679c8 131 lcd_data(0x55);
y_notsu 0:03f32e3679c8 132 lcd_data(0x55);
y_notsu 0:03f32e3679c8 133 lcd_data(0x55);
y_notsu 0:03f32e3679c8 134 lcd_data(0x55);
y_notsu 0:03f32e3679c8 135 lcd_data(0x55);
y_notsu 0:03f32e3679c8 136 lcd_data(0x55);
y_notsu 0:03f32e3679c8 137 lcd_data(0x55);
y_notsu 0:03f32e3679c8 138 lcd_data(0x55);
y_notsu 0:03f32e3679c8 139 lcd_data(0x55);
y_notsu 0:03f32e3679c8 140 lcd_data(0x55);
y_notsu 0:03f32e3679c8 141 lcd_data(0x55);
y_notsu 0:03f32e3679c8 142 lcd_data(0x55);
y_notsu 0:03f32e3679c8 143 lcd_data(0x55);
y_notsu 0:03f32e3679c8 144 lcd_data(0x55);
y_notsu 0:03f32e3679c8 145 lcd_data(0x55);
y_notsu 0:03f32e3679c8 146 lcd_data(0x55);
y_notsu 0:03f32e3679c8 147 lcd_data(0x55);
y_notsu 0:03f32e3679c8 148 lcd_data(0x55);
y_notsu 0:03f32e3679c8 149 lcd_data(0x55);
y_notsu 0:03f32e3679c8 150 lcd_data(0x55);
y_notsu 0:03f32e3679c8 151 lcd_data(0x55);
y_notsu 0:03f32e3679c8 152 lcd_data(0x55);
y_notsu 0:03f32e3679c8 153 lcd_data(0x55);
y_notsu 0:03f32e3679c8 154 lcd_data(0x55);
y_notsu 0:03f32e3679c8 155 lcd_data(0x55);
y_notsu 0:03f32e3679c8 156 lcd_data(0x55);
y_notsu 0:03f32e3679c8 157 lcd_data(0x55);
y_notsu 0:03f32e3679c8 158 lcd_data(0x55);
y_notsu 0:03f32e3679c8 159 lcd_data(0x55);
y_notsu 0:03f32e3679c8 160 lcd_data(0x55);
y_notsu 0:03f32e3679c8 161 lcd_data(0x55);
y_notsu 0:03f32e3679c8 162 lcd_data(0x55);
y_notsu 0:03f32e3679c8 163 lcd_data(0x55);
y_notsu 0:03f32e3679c8 164 lcd_data(0x55);
y_notsu 0:03f32e3679c8 165 lcd_data(0x55);
y_notsu 0:03f32e3679c8 166 lcd_data(0x55);
y_notsu 0:03f32e3679c8 167 lcd_data(0x55);
y_notsu 0:03f32e3679c8 168 lcd_data(0x55);
y_notsu 0:03f32e3679c8 169 lcd_data(0x55);
y_notsu 0:03f32e3679c8 170 lcd_data(0x55);
y_notsu 0:03f32e3679c8 171 lcd_data(0x55);
y_notsu 0:03f32e3679c8 172 lcd_data(0x55);
y_notsu 0:03f32e3679c8 173 lcd_data(0x55);
y_notsu 0:03f32e3679c8 174 lcd_data(0x55);
y_notsu 0:03f32e3679c8 175 lcd_data(0x55);
y_notsu 0:03f32e3679c8 176 lcd_data(0x55);
y_notsu 0:03f32e3679c8 177
y_notsu 0:03f32e3679c8 178
y_notsu 0:03f32e3679c8 179 //
y_notsu 0:03f32e3679c8 180 lcd_cmd(SLPOUT);
y_notsu 0:03f32e3679c8 181 lcd_cmd(DISON); //Display On
y_notsu 0:03f32e3679c8 182 }
y_notsu 0:03f32e3679c8 183
y_notsu 0:03f32e3679c8 184
y_notsu 0:03f32e3679c8 185 //Command output function
y_notsu 0:03f32e3679c8 186 void REL225L01::lcd_cmd(unsigned int comm){
y_notsu 0:03f32e3679c8 187 if(comm<=0xffff)
y_notsu 0:03f32e3679c8 188 {
y_notsu 0:03f32e3679c8 189
y_notsu 0:03f32e3679c8 190 //for(int i=0;i<16;i++)
y_notsu 0:03f32e3679c8 191 //{
y_notsu 0:03f32e3679c8 192 // SDA_OUT = ((comm >> i) & 0x1);
y_notsu 0:03f32e3679c8 193 // SCK_OUT = 0;
y_notsu 0:03f32e3679c8 194 // SCK_OUT = 1;
y_notsu 0:03f32e3679c8 195 //}
y_notsu 0:03f32e3679c8 196 //rotate
y_notsu 0:03f32e3679c8 197
y_notsu 0:03f32e3679c8 198 unsigned int B=0;
y_notsu 0:03f32e3679c8 199 /*
y_notsu 0:03f32e3679c8 200 B=((comm>>15)&0x0001)+((comm>>13)&0x0002)+((comm>>11)&0x0004)
y_notsu 0:03f32e3679c8 201 +((comm>>9)&0x0008)+((comm>>7)&0x0010)+((comm>>5)&0x0020)
y_notsu 0:03f32e3679c8 202 +((comm>>3)&0x0040)+((comm>>1)&0x0080)
y_notsu 0:03f32e3679c8 203 +((comm<<1)&0x0100)+((comm<<3)&0x0200)+((comm<<5)&0x0400)+((comm<<7)&0x0800)
y_notsu 0:03f32e3679c8 204 +((comm<<9)&0x1000)+((comm<<11)&0x2000)+((comm<<13)&0x4000)+((comm<<15)&0x8000);
y_notsu 0:03f32e3679c8 205 */
y_notsu 0:03f32e3679c8 206 B = comm & 0xff;
y_notsu 0:03f32e3679c8 207 spi.write(B);
y_notsu 0:03f32e3679c8 208 //74HC595 Output control
y_notsu 0:03f32e3679c8 209 RCK_OUT = 1;
y_notsu 0:03f32e3679c8 210 RCK_OUT = 0;
y_notsu 0:03f32e3679c8 211 //spi.write(comm);
y_notsu 0:03f32e3679c8 212 RS_OUT = 0;
y_notsu 0:03f32e3679c8 213 CS_OUT = 0;
y_notsu 0:03f32e3679c8 214 WR_OUT = 1;
y_notsu 0:03f32e3679c8 215 //WR_OUT = 0;
y_notsu 0:03f32e3679c8 216 //wait_us(1);
y_notsu 0:03f32e3679c8 217 RS_OUT = 1;
y_notsu 0:03f32e3679c8 218 WR_OUT = 0;
y_notsu 0:03f32e3679c8 219 //WR_OUT = 1;
y_notsu 0:03f32e3679c8 220 CS_OUT = 1;
y_notsu 0:03f32e3679c8 221 // wait_us(1);
y_notsu 0:03f32e3679c8 222
y_notsu 0:03f32e3679c8 223 }
y_notsu 0:03f32e3679c8 224 }
y_notsu 0:03f32e3679c8 225
y_notsu 0:03f32e3679c8 226 void REL225L01::lcd_data(unsigned int data){
y_notsu 0:03f32e3679c8 227 if(data<=0xffff)
y_notsu 0:03f32e3679c8 228 {
y_notsu 0:03f32e3679c8 229 //for(int i=0;i<16;i++)
y_notsu 0:03f32e3679c8 230 //{
y_notsu 0:03f32e3679c8 231 // SDA_OUT = ((data >> i) & 0x1);
y_notsu 0:03f32e3679c8 232 // SCK_OUT = 0;
y_notsu 0:03f32e3679c8 233 // SCK_OUT = 1;
y_notsu 0:03f32e3679c8 234 //}
y_notsu 0:03f32e3679c8 235
y_notsu 0:03f32e3679c8 236 unsigned int B=0;
y_notsu 0:03f32e3679c8 237 /*
y_notsu 0:03f32e3679c8 238 B=((data>>15)&0x0001)+((data>>13)&0x0002)+((data>>11)&0x0004)
y_notsu 0:03f32e3679c8 239 +((data>>9)&0x0008)+((data>>7)&0x0010)+((data>>5)&0x0020)
y_notsu 0:03f32e3679c8 240 +((data>>3)&0x0040)+((data>>1)&0x0080)
y_notsu 0:03f32e3679c8 241 +((data<<1)&0x0100)+((data<<3)&0x0200)+((data<<5)&0x0400)+((data<<7)&0x0800)
y_notsu 0:03f32e3679c8 242 +((data<<9)&0x1000)+((data<<11)&0x2000)+((data<<13)&0x4000)+((data<<15)&0x8000);
y_notsu 0:03f32e3679c8 243 */
y_notsu 0:03f32e3679c8 244 B = data & 0xff;
y_notsu 0:03f32e3679c8 245 spi.write(B);
y_notsu 0:03f32e3679c8 246 //74HC595 Output control
y_notsu 0:03f32e3679c8 247 RCK_OUT = 1;
y_notsu 0:03f32e3679c8 248 RCK_OUT = 0;
y_notsu 0:03f32e3679c8 249 //spi.write(data);
y_notsu 0:03f32e3679c8 250 CS_OUT = 0;
y_notsu 0:03f32e3679c8 251 WR_OUT = 1;
y_notsu 0:03f32e3679c8 252 //WR_OUT = 0;
y_notsu 0:03f32e3679c8 253 //wait_us(1);
y_notsu 0:03f32e3679c8 254 WR_OUT = 0;
y_notsu 0:03f32e3679c8 255 //WR_OUT = 1;
y_notsu 0:03f32e3679c8 256 CS_OUT = 1;
y_notsu 0:03f32e3679c8 257 // wait_us(1);
y_notsu 0:03f32e3679c8 258 }
y_notsu 0:03f32e3679c8 259 }
y_notsu 0:03f32e3679c8 260
y_notsu 0:03f32e3679c8 261
y_notsu 0:03f32e3679c8 262 void REL225L01::lcd_clear(unsigned short Color){
y_notsu 0:03f32e3679c8 263 int i, j;
y_notsu 0:03f32e3679c8 264
y_notsu 0:03f32e3679c8 265 lcd_cmd(PASET);
y_notsu 0:03f32e3679c8 266 lcd_data(0);
y_notsu 0:03f32e3679c8 267 lcd_data(0x0C);
y_notsu 0:03f32e3679c8 268 lcd_data((unsigned char)((ENDPAGE+0x0C)>>8));
y_notsu 0:03f32e3679c8 269 lcd_data((unsigned char)(ENDPAGE+0x0C));
y_notsu 0:03f32e3679c8 270 //lcd_data(ENDPAGE);
y_notsu 0:03f32e3679c8 271
y_notsu 0:03f32e3679c8 272 lcd_cmd(CASET);
y_notsu 0:03f32e3679c8 273 lcd_data(0);
y_notsu 0:03f32e3679c8 274 lcd_data(0x08);
y_notsu 0:03f32e3679c8 275 lcd_data((unsigned char)((ENDCOL+0x08)>>8));
y_notsu 0:03f32e3679c8 276 lcd_data((unsigned char)(ENDCOL+0x08));
y_notsu 0:03f32e3679c8 277 //lcd_data(ENDCOL);
y_notsu 0:03f32e3679c8 278
y_notsu 0:03f32e3679c8 279 lcd_cmd(RAMWR);
y_notsu 0:03f32e3679c8 280 for(j=0; j<4; j++){
y_notsu 0:03f32e3679c8 281 for(i=0; i<(ENDCOL+1)*80; i++){
y_notsu 0:03f32e3679c8 282 lcd_data((unsigned char)(Color>>8));
y_notsu 0:03f32e3679c8 283 lcd_data((unsigned char)Color);
y_notsu 0:03f32e3679c8 284 //lcd_data(Color);
y_notsu 0:03f32e3679c8 285 }
y_notsu 0:03f32e3679c8 286 }
y_notsu 0:03f32e3679c8 287 }
y_notsu 0:03f32e3679c8 288
y_notsu 0:03f32e3679c8 289 void REL225L01::lcd_cw_start(void)
y_notsu 0:03f32e3679c8 290 {
y_notsu 0:03f32e3679c8 291
y_notsu 0:03f32e3679c8 292 lcd_cmd(RAMWR);
y_notsu 0:03f32e3679c8 293 CS_OUT = 0;
y_notsu 0:03f32e3679c8 294 WR_OUT = 1;
y_notsu 0:03f32e3679c8 295 }
y_notsu 0:03f32e3679c8 296
y_notsu 0:03f32e3679c8 297 void REL225L01::lcd_cw_end(void)
y_notsu 0:03f32e3679c8 298 {
y_notsu 0:03f32e3679c8 299 CS_OUT = 1;
y_notsu 0:03f32e3679c8 300 WR_OUT = 0;
y_notsu 0:03f32e3679c8 301 }
y_notsu 0:03f32e3679c8 302
y_notsu 0:03f32e3679c8 303