#include #include #include "fft.h" #include #define LCD_CD _RD2 #define LCD_RW _RD1 #define LCD_E _RD0 #define LCD_WR _RD1 #define LCD_RD _RD0 #define LCD_CS _RB12 #define LCD_RES _RB11 #define DB7 _RD8 _FOSC(CSW_FSCM_OFF & XT_PLL16); //Run this project using an external crystal //routed via the PLL in 16x multiplier mode //For the 7.3728 MHz crystal we will derive a //throughput of 7.3728e+6*16/4 = 29.4 MIPS(Fcy) //,~33.9 nanoseconds instruction cycle time(Tcy). _FWDT(WDT_OFF); _FBORPOR(MCLR_EN & PWRT_OFF); //Enable MCLR reset pin and turn off the //power-up timers. _FGS(CODE_PROT_OFF); //Disable Code Protection int x; void main(void) { ADPCFG = 0xffff; TRISD=0x0000; TRISB=0x0000; TRISC=0x0000; LCD_RD = 1; // clock WR LCD_WR = 0; __delay32(11); LCD_WR = 1; oled_cmd(0xA8); // Set multiplex ratio oled_cmd(0x3F); // set for 64 oled_cmd(0x20); // Set Memory Addressing Mode oled_cmd(0x00); // Horizontal oled_cmd(0x81); // Contrast control mode set oled_cmd(0x88); // (0x00 - 0xFF valid) oled_cmd(0xAF); // Display on delay(5000L); lcd_clr(0x00); // clear display delay(200000L); while (1) { oled_cmd(0xA6); // Display normal bmp(); __delay32(3000000000); oled_cmd(0xA7); // Display inverted bmp(); __delay32(3000000000); } } void oled_cmd(char befehl) { LCD_CD = 0; LCD_CS = 0; __delay32(300); lcd_daten(befehl); LCD_RW = 0; __delay32(300); LCD_RW = 1; __delay32(300); LCD_CS = 1; __delay32(300); } void data(char daten) { LCD_CD = 1; LCD_CS = 0; __delay32(300); lcd_daten(daten); LCD_CS = 0; __delay32(300); LCD_RW = 0; __delay32(300); LCD_CS = 1; __delay32(300); } void lcd_daten(unsigned char daten) { TRISF =0x0000; TRISD =0x0000; LATF = daten; if (daten > 127) DB7 = 1; else DB7 = 0; } unsigned int logo[8][128] = { {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0C,0x0C,0x1C,0x38,0x70,0x20,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0C,0x0C,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x49,0x49,0x49,0x26,0x00,0x7F,0x20,0x10,0x20,0x7F,0x00,0x3F,0x44,0x44,0x44,0x3F,0x00,0x7F,0x01,0x01,0x01,0x01,0x00,0x7F,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x1E,0x29,0x49,0x49,0x06,0x00,0x1B,0x04,0x04,0x1B,0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x7F,0x40,0x40,0x00,0x7F,0x49,0x49,0x49,0x41,0x80,0xE3,0x94,0x88,0x94,0x63,0x00,0x40,0x40,0x7F,0x40,0x40}, {0x80,0x80,0x80,0x80,0x80,0x80,0x98,0x9C,0x9E,0x9F,0x9F,0x9F,0x9F,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x9F,0x9F,0x9F,0x9F,0x9E,0x9C,0x98,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x80,0x80,0xC0,0xE0,0x60,0xE0,0x60,0xE0,0xC0,0x80,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0xC0,0xE0,0x78,0x1C,0x8F,0x03,0x01,0x81,0x01,0x03,0x8F,0x1E,0xF8,0xE0,0x80,0x00,0x80}, {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xF0,0xB8,0x9E,0x8F,0x83,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x83,0x87,0x9E,0xB8,0xF0,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xE0,0xF8,0xBE,0x8F,0x83,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x83,0x8F,0xFE,0xF8}, {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x00,0x03,0x07,0x0D,0x1D,0x39,0x71,0x61,0xC1,0xC1,0x81,0x81,0x81,0xC1,0xC1,0xE1,0x71,0x39,0x1D,0x0F,0x07,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x0F,0x3D,0xF9,0xE1,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xC1,0xF1,0x7D,0x1F,0x07,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01}, {0x01,0x01,0x01,0x01,0x01,0x01,0x19,0x39,0x79,0xF9,0xF9,0xF9,0xF9,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0xF9,0xF9,0xF9,0xF9,0x79,0x39,0x19,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x03,0x07,0x0F,0x1C,0x38,0x71,0x60,0x60,0x71,0x38,0x1C,0x0F,0x07,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x30,0x38,0x1C,0x0E,0x04,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x30,0x38,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0xFE,0xC3,0x01,0x01,0x03,0x86,0x84,0x03,0x7F,0xFC,0x90,0x10,0x10,0x11,0x07,0x1E,0x7C,0xE4,0x84,0xFC,0x7F,0x03,0x00,0x07,0x7F,0xF9,0x81,0x01,0x01,0x00,0x00,0x00,0x60,0xC7,0xFF,0xF8,0x80,0x00,0x03,0x87,0x8D,0x19,0xF1,0xE0,0x00,0x6E,0xFF,0x11,0x11,0xFE,0xEC,0x00,0x3E,0xFF,0xD1,0x23,0xBE,0x9C,0x0C,0x1C,0x34,0x67,0xFF,0xFC,0x84,0x07,0x7F,0xF9,0x81,0x01,0x01,0x00,0x00,0x00,0x00,0x00}, {0xC0,0xF0,0x38,0x1C,0x0C,0x0C,0x0C,0x1C,0x38,0x30,0x00,0xFC,0xFC,0x80,0x80,0xC0,0xE0,0xF0,0xB8,0x1C,0x0C,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x30,0x38,0x1C,0x0C,0x0C,0x0C,0x0C,0x9C,0xF8,0xF0,0x00,0x00,0x00,0x00,0xFC,0xFC,0x00,0x00,0x00,0x1C,0xFC,0xE1,0x61,0x61,0x61,0x60,0xE0,0xFC,0x1D,0x01,0x01,0xFD,0xFD,0x0D,0x0C,0x0C,0x0D,0x0D,0x0D,0x0C,0x0C,0x00,0x00,0xFC,0xFD,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF1,0x39,0x1C,0x0C,0x0C,0x1D,0x39,0xF1,0xC0,0x00,0x00,0xFC,0xFD,0x01,0x01,0x00,0xC0,0xE0,0x38,0xFD,0xFD,0x01,0x00,0x00,0x00,0xFC,0xFC,0x00,0x01,0x01,0x00,0x0C,0x3D,0x7D,0xCC,0x8C,0x0C,0x0C,0x0C,0x0C,0x0C}, {0x0F,0x3F,0x70,0xE0,0xC0,0xC0,0xC0,0xE0,0x70,0x30,0x00,0xFF,0xFF,0xC1,0xC1,0xC1,0xC1,0xC1,0xE3,0x7F,0x3E,0x00,0xC0,0xF0,0x3C,0x0F,0x03,0x03,0x0F,0x3C,0xF0,0xC0,0x00,0x3C,0x7E,0xE7,0xC3,0xC3,0xC3,0xC3,0xE3,0x71,0x30,0x00,0xC0,0xC0,0xC0,0xFF,0xFF,0xC0,0xC0,0xC0,0x00,0x00,0x07,0x3F,0xF8,0xF8,0x3F,0x07,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC0,0xC0,0x0F,0x3F,0x70,0xE0,0xC0,0xC0,0xE0,0x70,0x3F,0x0F,0x00,0x00,0xFF,0xFF,0x70,0x1C,0x0F,0x03,0x00,0x00,0xFF,0xFF,0x00,0xC0,0xC0,0xC0,0xFF,0xFF,0xC0,0xC0,0xC0,0x00,0xC0,0xC0,0xC0,0xC0,0xC3,0xC7,0xCC,0xF8,0xF0,0xC0} }; void bmp(void) { unsigned int j=0; unsigned int page=0; oled_cmd(0x00); // set high column address oled_cmd(0x10); // set low column address oled_cmd(0xB0); // set page address for(page=0;page<8;page++) { for(j=0;j<128;j++) { oled_data(logo[page][j]); } // display is 132x64 logically, so send 4 blanks oled_data(0); oled_data(0); oled_data(0); oled_data(0); } }