Yuji Notsu
/
OV7670_camera_test
This program is for OV7670 and TFT-LCD(REL225L01)
Embed:
(wiki syntax)
Show/hide line numbers
REL225L01.cpp
00001 #include "REL225L01.h" 00002 //This program is for using 74HC595 and SPI I/F 00003 // 00004 00005 00006 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) 00007 { CS_OUT = 0x01;RS_OUT = 0x01; RD_OUT = 0x01; 00008 WR_OUT = 0x01;RST_OUT = 0x01;RCK_OUT = 0x00; 00009 //SCK_OUT= 0x01; SDA_OUT=0x01; 00010 //t.attach( this, &SG12864A::display, ReflashRate ); 00011 } 00012 00013 //Initialization LCD module 00014 void REL225L01::lcd_init(void){ 00015 spi.format(8,3); 00016 spi.frequency(20000000); 00017 00018 wait_ms(20); 00019 RCK_OUT=0; 00020 RD_OUT=1; 00021 CS_OUT=1; 00022 WR_OUT = 0; 00023 //WR_OUT=1; 00024 RST_OUT=0; 00025 wait_ms(1); 00026 RST_OUT=1; 00027 wait_ms(25); 00028 00029 lcd_cmd(0xB0); 00030 lcd_data(0xCA); 00031 lcd_data(0x90); 00032 lcd_data(0x37); 00033 lcd_data(0x01); 00034 lcd_data(0x48); 00035 lcd_data(0x01); 00036 lcd_data(0x40); 00037 lcd_data(0x04); 00038 lcd_data(0x00); 00039 lcd_data(0x00); 00040 00041 lcd_cmd(0x26); 00042 lcd_data(0x01); 00043 00044 lcd_cmd(0xB1); 00045 lcd_data(0x00); 00046 lcd_data(0x00); 00047 lcd_data(0x00); 00048 lcd_data(0x00); 00049 lcd_data(0x08); 00050 lcd_data(0x00); 00051 lcd_data(0x04); 00052 lcd_data(0x10); 00053 lcd_data(0x48); 00054 lcd_data(0x82); 00055 lcd_data(0x20); 00056 lcd_data(0x84); 00057 lcd_data(0x92); 00058 lcd_data(0x2A); 00059 lcd_data(0x52); 00060 lcd_data(0xAA); 00061 lcd_data(0x5A); 00062 lcd_data(0x55); 00063 lcd_data(0x2A); 00064 lcd_data(0x55); 00065 lcd_data(0xAE); 00066 lcd_data(0xFF); 00067 lcd_data(0xFE); 00068 lcd_data(0x00); 00069 lcd_data(0x00); 00070 lcd_data(0x00); 00071 lcd_data(0x00); 00072 lcd_data(0x00); 00073 lcd_data(0x00); 00074 lcd_data(0x04); 00075 00076 lcd_cmd(0xB2); 00077 lcd_data(0x00); 00078 lcd_data(0x00); 00079 lcd_data(0x00); 00080 lcd_data(0x00); 00081 lcd_data(0x04); 00082 lcd_data(0x00); 00083 lcd_data(0x02); 00084 lcd_data(0x08); 00085 lcd_data(0x48); 00086 lcd_data(0x82); 00087 lcd_data(0x20); 00088 lcd_data(0x84); 00089 lcd_data(0x42); 00090 lcd_data(0x48); 00091 lcd_data(0x92); 00092 lcd_data(0x2A); 00093 lcd_data(0x52); 00094 lcd_data(0xAA); 00095 lcd_data(0x5A); 00096 lcd_data(0x55); 00097 lcd_data(0x2A); 00098 lcd_data(0x55); 00099 lcd_data(0xAE); 00100 lcd_data(0xFF); 00101 lcd_data(0xFE); 00102 lcd_data(0x00); 00103 lcd_data(0x00); 00104 lcd_data(0x00); 00105 lcd_data(0x00); 00106 lcd_data(0x00); 00107 lcd_data(0x00); 00108 lcd_data(0x04); 00109 00110 lcd_cmd(MODE); // Entry Mode 00111 lcd_data(0x29); // 0b00101001 : 0 I/D1 AM 0 BGR 0 0 I/D0 00112 // ID[1:0] = 00: H:increment, V:increment 00113 // 01: H:increment, V:decrement 00114 // 10: H:Decrement, V:increment 00115 // 11: H:Decrement, V:decrement 00116 // AM = 0 : Horizontal , AM=1: Vertical 00117 //BGR : Reverse Red and Blue 00118 //color mode 00119 lcd_cmd(COLMOD); 00120 lcd_data(0x05); //65k color 00121 //Inteface mode 00122 lcd_cmd(IFMOD); 00123 lcd_data(0x00); //Data[2:0] = I/F mode 00124 // = 000 : 8bit I/F 00125 // = 011 : 16bit I/F 00126 // = 100 : 18bit I/F 00127 00128 00129 lcd_cmd(0xBA); 00130 lcd_data(0x55); 00131 lcd_data(0x55); 00132 lcd_data(0x55); 00133 lcd_data(0x55); 00134 lcd_data(0x55); 00135 lcd_data(0x55); 00136 lcd_data(0x55); 00137 lcd_data(0x55); 00138 lcd_data(0x55); 00139 lcd_data(0x55); 00140 lcd_data(0x55); 00141 lcd_data(0x55); 00142 lcd_data(0x55); 00143 lcd_data(0x55); 00144 lcd_data(0x55); 00145 lcd_data(0x55); 00146 lcd_data(0x55); 00147 lcd_data(0x55); 00148 lcd_data(0x55); 00149 lcd_data(0x55); 00150 lcd_data(0x55); 00151 lcd_data(0x55); 00152 lcd_data(0x55); 00153 lcd_data(0x55); 00154 lcd_data(0x55); 00155 lcd_data(0x55); 00156 lcd_data(0x55); 00157 lcd_data(0x55); 00158 lcd_data(0x55); 00159 lcd_data(0x55); 00160 lcd_data(0x55); 00161 lcd_data(0x55); 00162 lcd_data(0x55); 00163 lcd_data(0x55); 00164 lcd_data(0x55); 00165 lcd_data(0x55); 00166 lcd_data(0x55); 00167 lcd_data(0x55); 00168 lcd_data(0x55); 00169 lcd_data(0x55); 00170 lcd_data(0x55); 00171 lcd_data(0x55); 00172 lcd_data(0x55); 00173 lcd_data(0x55); 00174 lcd_data(0x55); 00175 lcd_data(0x55); 00176 lcd_data(0x55); 00177 00178 00179 // 00180 lcd_cmd(SLPOUT); 00181 lcd_cmd(DISON); //Display On 00182 } 00183 00184 00185 //Command output function 00186 void REL225L01::lcd_cmd(unsigned int comm){ 00187 if(comm<=0xffff) 00188 { 00189 00190 //for(int i=0;i<16;i++) 00191 //{ 00192 // SDA_OUT = ((comm >> i) & 0x1); 00193 // SCK_OUT = 0; 00194 // SCK_OUT = 1; 00195 //} 00196 //rotate 00197 00198 unsigned int B=0; 00199 /* 00200 B=((comm>>15)&0x0001)+((comm>>13)&0x0002)+((comm>>11)&0x0004) 00201 +((comm>>9)&0x0008)+((comm>>7)&0x0010)+((comm>>5)&0x0020) 00202 +((comm>>3)&0x0040)+((comm>>1)&0x0080) 00203 +((comm<<1)&0x0100)+((comm<<3)&0x0200)+((comm<<5)&0x0400)+((comm<<7)&0x0800) 00204 +((comm<<9)&0x1000)+((comm<<11)&0x2000)+((comm<<13)&0x4000)+((comm<<15)&0x8000); 00205 */ 00206 B = comm & 0xff; 00207 spi.write(B); 00208 //74HC595 Output control 00209 RCK_OUT = 1; 00210 RCK_OUT = 0; 00211 //spi.write(comm); 00212 RS_OUT = 0; 00213 CS_OUT = 0; 00214 WR_OUT = 1; 00215 //WR_OUT = 0; 00216 //wait_us(1); 00217 RS_OUT = 1; 00218 WR_OUT = 0; 00219 //WR_OUT = 1; 00220 CS_OUT = 1; 00221 // wait_us(1); 00222 00223 } 00224 } 00225 00226 void REL225L01::lcd_data(unsigned int data){ 00227 if(data<=0xffff) 00228 { 00229 //for(int i=0;i<16;i++) 00230 //{ 00231 // SDA_OUT = ((data >> i) & 0x1); 00232 // SCK_OUT = 0; 00233 // SCK_OUT = 1; 00234 //} 00235 00236 unsigned int B=0; 00237 /* 00238 B=((data>>15)&0x0001)+((data>>13)&0x0002)+((data>>11)&0x0004) 00239 +((data>>9)&0x0008)+((data>>7)&0x0010)+((data>>5)&0x0020) 00240 +((data>>3)&0x0040)+((data>>1)&0x0080) 00241 +((data<<1)&0x0100)+((data<<3)&0x0200)+((data<<5)&0x0400)+((data<<7)&0x0800) 00242 +((data<<9)&0x1000)+((data<<11)&0x2000)+((data<<13)&0x4000)+((data<<15)&0x8000); 00243 */ 00244 B = data & 0xff; 00245 spi.write(B); 00246 //74HC595 Output control 00247 RCK_OUT = 1; 00248 RCK_OUT = 0; 00249 //spi.write(data); 00250 CS_OUT = 0; 00251 WR_OUT = 1; 00252 //WR_OUT = 0; 00253 //wait_us(1); 00254 WR_OUT = 0; 00255 //WR_OUT = 1; 00256 CS_OUT = 1; 00257 // wait_us(1); 00258 } 00259 } 00260 00261 00262 void REL225L01::lcd_clear(unsigned short Color){ 00263 int i, j; 00264 00265 lcd_cmd(PASET); 00266 lcd_data(0); 00267 lcd_data(0x0C); 00268 lcd_data((unsigned char)((ENDPAGE+0x0C)>>8)); 00269 lcd_data((unsigned char)(ENDPAGE+0x0C)); 00270 //lcd_data(ENDPAGE); 00271 00272 lcd_cmd(CASET); 00273 lcd_data(0); 00274 lcd_data(0x08); 00275 lcd_data((unsigned char)((ENDCOL+0x08)>>8)); 00276 lcd_data((unsigned char)(ENDCOL+0x08)); 00277 //lcd_data(ENDCOL); 00278 00279 lcd_cmd(RAMWR); 00280 for(j=0; j<4; j++){ 00281 for(i=0; i<(ENDCOL+1)*80; i++){ 00282 lcd_data((unsigned char)(Color>>8)); 00283 lcd_data((unsigned char)Color); 00284 //lcd_data(Color); 00285 } 00286 } 00287 } 00288 00289 void REL225L01::lcd_cw_start(void) 00290 { 00291 00292 lcd_cmd(RAMWR); 00293 CS_OUT = 0; 00294 WR_OUT = 1; 00295 } 00296 00297 void REL225L01::lcd_cw_end(void) 00298 { 00299 CS_OUT = 1; 00300 WR_OUT = 0; 00301 } 00302 00303
Generated on Wed Jul 20 2022 22:37:56 by 1.7.2