void LCD_Writ_Bus(int VH,int VL){ //LCD_DATA_BUS = VH; //0x04,0x08,0x01,0x20,0x40,0x80,0x100,0x800 (pins 0 - 7) if(VH & 0x01){ PORTDSET = 0x04; } else { PORTDCLR = 0x04; } if(VH & 0x02){ PORTDSET = 0x08; } else { PORTDCLR = 0x08; } if(VH & 0x04){ PORTDSET = 0x01; } else { PORTDCLR = 0x01; } if(VH & 0x08){ PORTDSET = 0x20; } else { PORTDCLR = 0x20; } if(VH & 0x10){ PORTDSET = 0x40; } else { PORTDCLR = 0x40; } if(VH & 0x20){ PORTDSET = 0x80; } else { PORTDCLR = 0x80; } if(VH & 0x40){ PORTDSET = 0x100; } else { PORTDCLR = 0x100; } if(VH & 0x80){ PORTDSET = 0x800; } else { PORTDCLR = 0x800; } fastDelay(); fastWriteLow(LCD_WR); fastDelay(); fastWriteHigh(LCD_WR); fastDelay(); //LCD_DATA_BUS = VL; //0x04,0x08,0x01,0x20,0x40,0x80,0x100,0x800 (pins 0 - 7) if(VL & 0x01){ PORTDSET = 0x04; } else { PORTDCLR = 0x04; } if(VL & 0x02){ PORTDSET = 0x08; } else { PORTDCLR = 0x08; } if(VL & 0x04){ PORTDSET = 0x01; } else { PORTDCLR = 0x01; } if(VL & 0x08){ PORTDSET = 0x20; } else { PORTDCLR = 0x20; } if(VL & 0x10){ PORTDSET = 0x40; } else { PORTDCLR = 0x40; } if(VL & 0x20){ PORTDSET = 0x80; } else { PORTDCLR = 0x80; } if(VL & 0x40){ PORTDSET = 0x100; } else { PORTDCLR = 0x100; } if(VL & 0x80){ PORTDSET = 0x800; } else { PORTDCLR = 0x800; } fastDelay(); fastWriteLow(LCD_WR); fastDelay(); fastWriteHigh(LCD_WR); fastDelay(); fastDelay(); }
void LCD_Writ_Bus(int VH,int VL){ LCD_DATA_BUS = VH; fastWriteLow(LCD_WR); fastWriteHigh(LCD_WR); LCD_DATA_BUS = VL; fastWriteLow(LCD_WR); fastWriteHigh(LCD_WR); }
/////////////////////////////// basis funktion /////////////////////////////// void ssd0323::senden_spi(unsigned char zeichen) { unsigned char a=0, b=0b10000000; fastWriteLow(SPI_CS); // cs auf low => aktivieren fastWriteHigh(SPI_CLK); // clock auf high, zu fallender flanke werden daten übernommen for(a=0;a<8;a++){ /* a = 0..7, wegen 8 pixel zeichen breite */ if(zeichen&b) fastWriteHigh(SPI_DATA); /* wenn zeichen&b dann porta bit 0 auf high serial data line */ else fastWriteLow(SPI_DATA); /* PORTA bit 0 auf low zwingen serial data line */ fastWriteLow(SPI_CLK); // clock auf high, zu fallender flanke werden daten übernommen //_delay_ms(1); // technisch korrekt: hier wartezeit einfügen fastWriteHigh(SPI_CLK); // clock auf high, zu fallender flanke werden daten übernommen //_delay_ms(1); // technisch korrekt: hier wartezeit einfügen b=b>>1; /* bitmaske einen nach recht schieben => msb first ?! */ } fastWriteHigh(SPI_CS); // cs auf high => deaktivieren }
void fillScr(char r, char g, char b){ long i; fastWriteLow(LCD_CS); if (orient==PORTRAIT) setXY(0,0,239,319); else setXY(0,0,319,239); for (i=0; i<76800; i++) { setPixel (r, g, b); } fastWriteHigh(LCD_CS); }
void clrScr(){ unsigned long i; fastWriteLow(LCD_CS); if (orient==PORTRAIT) setXY(0,0,239,319); else setXY(0,0,319,239); for (i=0; i<76800; i++) { setPixel(0,0,0); } fastWriteHigh(LCD_CS); }
/////////////////////////////// data funktion /////////////////////////////// void ssd0323::send_char(unsigned char zeichen) { fastWriteHigh(SPI_CD); //turn to data mode senden_spi(zeichen); }
/////////////////////////////// init sequenz /////////////////////////////// void ssd0323::init(unsigned char phase,unsigned char ref) { pinMode(SPI_CD, OUTPUT); // D/C low = command pinMode(SPI_RESET, OUTPUT); // reset pinMode(SPI_DATA, OUTPUT); pinMode(SPI_CLK,OUTPUT); pinMode(SPI_CS,OUTPUT); _delay_ms(10); fastWriteHigh(SPI_CS); fastWriteLow(SPI_CD); fastWriteLow(SPI_DATA); fastWriteLow(SPI_CLK); // reset fastWriteLow(SPI_RESET); _delay_ms(10); fastWriteHigh(SPI_RESET); _delay_ms(1); // init sequenze ///////////////////////////// // XXXXXX | Normale | 180° // // ----------------------- // // Re-Map | 0x41 | 0x52 // // Offset | 0x44 | 0x4C // ///////////////////////////// // Column Address send_command(0x15); send_command(0x00); send_command(0x3F); // Row Address send_command(0x75); send_command(0x00); send_command(0x3F); // Contrast Control send_command(0x81); send_command(0x66); // Current Range send_command(0x86); // Re-map send_command(0xA0); send_command(0x52); // Display Start Line send_command(0xA1); send_command(0x00); // Display Offset send_command(0xA2); send_command(0x4C); // Display Mode send_command(0xA4); // Multiplex Ratio send_command(0xA8); send_command(0x3F); // set prechange // Phase Length send_command(0xB1); send_command(phase); // Row Period send_command(0xB2); send_command(0x46); // Display Clock Divide send_command(0xB3); send_command(0xF1); // war f1 /* POR = 0000 0001*/ // VSL send_command(0xBF); send_command(0x0D); // VCOMH send_command(0xBE); send_command(0x02); send_command(0xBC); send_command(ref); // Gamma send_command(0xB8); send_command(0x01); send_command(0x11); send_command(0x22); send_command(0x32); send_command(0x43); send_command(0x54); send_command(0x65); send_command(0x76); /* LB[6:4], LA[2:0] 0101 0101 */ /* LD[6:4], LC[2:0] 0110 0110 */ /* LF[6:4], LE[2:0] 1000 0111 */ // Set DC-DC send_command(0xAD); /* Set DC-DC */ send_command(0x02); /* 03=ON, 02=Off */ // Display ON/OFF send_command(0xAF); /* AF=ON, AE=Sleep Mode */ }
/////////////////////////////// kommando funktion /////////////////////////////// void ssd0323::send_command(unsigned char theCommand) { fastWriteLow(SPI_CD); //turn to command mode senden_spi(theCommand); fastWriteHigh(SPI_CD); //turn to data mode }
void InitLCD(char orientation){ orient=orientation; LCD_DATA_DIR = 0x00; //Output for All pins on DATA BUS LCD_DATA_BUS = 0x0000; //Pin Mode for Control Pins! //OLIMEX BOARDS (Arduino Like Boards, using SHIELDs) #if defined(PIC32_PINGUINO) || defined(PIC32_PINGUINO_OTG) fastSetOutputMode(dLCD_RS); fastSetOutputMode(dLCD_WR); fastSetOutputMode(dLCD_CS); fastSetOutputMode(dLCD_REST); TRISDbits.TRISD4 = 1; //RD4 is connected to D2, don't know why! :-P PORTDbits.RD4 = 0; #else fastSetOutputMode(LCD_RS); fastSetOutputMode(LCD_WR); fastSetOutputMode(LCD_CS); fastSetOutputMode(LCD_REST); #endif fastWriteHigh(LCD_REST); Delayms(5); fastWriteLow(LCD_REST); Delayms(5); fastWriteHigh(LCD_REST); Delayms(5); fastWriteLow(LCD_CS); //************* Start Initial Sequence **********// LCD_Write_COM(0x00,0xE5); LCD_Write_DATA(0x78,0xF0); // set SRAM internal timing LCD_Write_COM(0x00,0x01); LCD_Write_DATA(0x01,0x00); // set SS and SM bit LCD_Write_COM(0x00,0x02); LCD_Write_DATA(0x07,0x00); // set 1 line inversion LCD_Write_COM(0x00,0x03); LCD_Write_DATA(0x10,0x30); // set GRAM write direction and BGR=1. LCD_Write_COM(0x00,0x04); LCD_Write_DATA(0x00,0x00); // Resize register LCD_Write_COM(0x00,0x08); LCD_Write_DATA(0x02,0x07); // set the back porch and front porch LCD_Write_COM(0x00,0x09); LCD_Write_DATA(0x00,0x00); // set non-display area refresh cycle ISC[3:0] LCD_Write_COM(0x00,0x0A); LCD_Write_DATA(0x00,0x00); // FMARK function LCD_Write_COM(0x00,0x0C); LCD_Write_DATA(0x00,0x00); // RGB interface setting LCD_Write_COM(0x00,0x0D); LCD_Write_DATA(0x00,0x00); // Frame marker Position LCD_Write_COM(0x00,0x0F); LCD_Write_DATA(0x00,0x00); // RGB interface polarity //*************Power On sequence ****************// LCD_Write_COM(0x00,0x10); LCD_Write_DATA(0x00,0x00); // SAP, BT[3:0], AP, DSTB, SLP, STB LCD_Write_COM(0x00,0x11); LCD_Write_DATA(0x00,0x07); // DC1[2:0], DC0[2:0], VC[2:0] LCD_Write_COM(0x00,0x12); LCD_Write_DATA(0x00,0x00); // VREG1OUT voltage LCD_Write_COM(0x00,0x13); LCD_Write_DATA(0x00,0x00); // VDV[4:0] for VCOM amplitude LCD_Write_COM(0x00,0x07); LCD_Write_DATA(0x00,0x01); Delayms(50); // Dis-charge capacitor power voltage LCD_Write_COM(0x00,0x10); LCD_Write_DATA(0x10,0x90); // 1490//SAP, BT[3:0], AP, DSTB, SLP, STB LCD_Write_COM(0x00,0x11); LCD_Write_DATA(0x02,0x27); // DC1[2:0], DC0[2:0], VC[2:0] Delayms(50); // Delay 50ms LCD_Write_COM(0x00,0x12); LCD_Write_DATA(0x00,0x1F); //001C// Internal reference voltage= Vci; Delayms(50); // Delay 50ms LCD_Write_COM(0x00,0x13); LCD_Write_DATA(0x15,0x00); //0x1000//1400 Set VDV[4:0] for VCOM amplitude 1A00 LCD_Write_COM(0x00,0x29); LCD_Write_DATA(0x00,0x27); //0x0012 //001a Set VCM[5:0] for VCOMH //0x0025 0034 LCD_Write_COM(0x00,0x2B); LCD_Write_DATA(0x00,0x0D); // Set Frame Rate 000C Delayms(50); // Delay 50ms LCD_Write_COM(0x00,0x20); LCD_Write_DATA(0x00,0x00); // GRAM horizontal Address LCD_Write_COM(0x00,0x21); LCD_Write_DATA(0x00,0x00); // GRAM Vertical Address // ----------- Adjust the Gamma Curve ----------// LCD_Write_COM(0x00,0x30); LCD_Write_DATA(0x00,0x00); LCD_Write_COM(0x00,0x31); LCD_Write_DATA(0x07,0x07); LCD_Write_COM(0x00,0x32); LCD_Write_DATA(0x03,0x07); LCD_Write_COM(0x00,0x35); LCD_Write_DATA(0x02,0x00); LCD_Write_COM(0x00,0x36); LCD_Write_DATA(0x00,0x08);//0207 LCD_Write_COM(0x00,0x37); LCD_Write_DATA(0x00,0x04);//0306 LCD_Write_COM(0x00,0x38); LCD_Write_DATA(0x00,0x00);//0102 LCD_Write_COM(0x00,0x39); LCD_Write_DATA(0x07,0x07);//0707 LCD_Write_COM(0x00,0x3C); LCD_Write_DATA(0x00,0x02);//0702 LCD_Write_COM(0x00,0x3D); LCD_Write_DATA(0x1D,0x04);//1604 //------------------ Set GRAM area ---------------// LCD_Write_COM(0x00,0x50); LCD_Write_DATA(0x00,0x00); // Horizontal GRAM Start Address LCD_Write_COM(0x00,0x51); LCD_Write_DATA(0x00,0xEF); // Horizontal GRAM End Address LCD_Write_COM(0x00,0x52); LCD_Write_DATA(0x00,0x00); // Vertical GRAM Start Address LCD_Write_COM(0x00,0x53); LCD_Write_DATA(0x01,0x3F); // Vertical GRAM Start Address LCD_Write_COM(0x00,0x60); LCD_Write_DATA(0xA7,0x00); // Gate Scan Line LCD_Write_COM(0x00,0x61); LCD_Write_DATA(0x00,0x01); // NDL,VLE, REV LCD_Write_COM(0x00,0x6A); LCD_Write_DATA(0x00,0x00); // set scrolling line //-------------- Partial Display Control ---------// LCD_Write_COM(0x00,0x80); LCD_Write_DATA(0x00,0x00); LCD_Write_COM(0x00,0x81); LCD_Write_DATA(0x00,0x00); LCD_Write_COM(0x00,0x82); LCD_Write_DATA(0x00,0x00); LCD_Write_COM(0x00,0x83); LCD_Write_DATA(0x00,0x00); LCD_Write_COM(0x00,0x84); LCD_Write_DATA(0x00,0x00); LCD_Write_COM(0x00,0x85); LCD_Write_DATA(0x00,0x00); //-------------- Panel Control -------------------// LCD_Write_COM(0x00,0x90); LCD_Write_DATA(0x00,0x10); LCD_Write_COM(0x00,0x92); LCD_Write_DATA(0x06,0x00); LCD_Write_COM(0x00,0x07); LCD_Write_DATA(0x01,0x33); fastWriteHigh(LCD_CS); setColor(255, 255, 255); setBackColor(0, 0, 0); fsize = FONT_SMALL; }
void LCD_Write_DATA(int VH,int VL){ fastWriteHigh(LCD_RS); LCD_Writ_Bus(VH,VL); }