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

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers REL225L01.cpp Source File

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