// // LCD Driver: 0.96" OLED // // Interface: I2C // pin1: Gnd // pin2: Vcc // pin3: SCL // pin4: SDA // pin5: OUT // pin6: IN // pin7: SCK // pin8: CS #include #include #include #include #include "sys.h" #include "gpio.h" #include "i2c.h" #include "ssd1306.h" #include "codetab.h" void OLED_SingleWrite(unsigned char index, unsigned char data) { I2C_START(LCD_I2C_PORT); //Start I2C_WAIT_READY(LCD_I2C_PORT); //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag I2C_SET_DATA(LCD_I2C_PORT, LCD_I2C_SLA); //send slave address I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); I2C_WAIT_READY(LCD_I2C_PORT); //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag I2C_SET_DATA(LCD_I2C_PORT, index); //send index I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); I2C_WAIT_READY(LCD_I2C_PORT); //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag I2C_SET_DATA(LCD_I2C_PORT, data); //send Data I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); I2C_WAIT_READY(LCD_I2C_PORT); //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI|I2C_CTL_STO);//Stop } unsigned char OLED_SingleRead(unsigned char index) { unsigned char tmp; I2C_START(LCD_I2C_PORT); //Start I2C_WAIT_READY(LCD_I2C_PORT); //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag I2C_SET_DATA(LCD_I2C_PORT, LCD_I2C_SLA); //send slave address+W I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); I2C_WAIT_READY(LCD_I2C_PORT); I2C_SET_DATA(LCD_I2C_PORT, index); //send index I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); I2C_WAIT_READY(LCD_I2C_PORT); I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_STA | I2C_CTL_SI); //Start I2C_WAIT_READY(LCD_I2C_PORT); I2C_SET_DATA(LCD_I2C_PORT, (LCD_I2C_SLA+1)); //send slave address+R I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); I2C_WAIT_READY(LCD_I2C_PORT); I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); I2C_WAIT_READY(LCD_I2C_PORT); tmp = I2C_GET_DATA(LCD_I2C_PORT); //read data I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI|I2C_CTL_STO);//Stop return tmp; } void oledWriteCommand(unsigned char OLED_Command) { OLED_SingleWrite(0x00, OLED_Command); } void oledWriteData(unsigned char OLED_Data) { OLED_SingleWrite(0x40, OLED_Data); } void Init_LCD(void) { oledWriteCommand(0xae); //display off oledWriteCommand(0x20); //Set Memory Addressing Mode oledWriteCommand(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid oledWriteCommand(0xb0); //Set Page Start Address for Page Addressing Mode,0-7 oledWriteCommand(0xc8); //Set COM Output Scan Direction oledWriteCommand(0x00);//---set low column address oledWriteCommand(0x10);//---set high column address oledWriteCommand(0x40);//--set start line address oledWriteCommand(0x81);//--set contrast control register oledWriteCommand(0x7f); oledWriteCommand(0xa1);//--set segment re-map 0 to 127 oledWriteCommand(0xa6);//--set normal display oledWriteCommand(0xa8);//--set multiplex ratio(1 to 64) oledWriteCommand(0x3F);// oledWriteCommand(0xa4);//0xa4,Output follows RAM content;0xa5,Output ignores RAM content oledWriteCommand(0xd3);//-set display offset oledWriteCommand(0x00);//-not offset oledWriteCommand(0xd5);//--set display clock divide ratio/oscillator frequency oledWriteCommand(0xf0);//--set divide ratio oledWriteCommand(0xd9);//--set pre-charge period oledWriteCommand(0x22); // oledWriteCommand(0xda);//--set com pins hardware configuration oledWriteCommand(0x12); oledWriteCommand(0xdb);//--set vcomh oledWriteCommand(0x20);//0x20,0.77xVcc oledWriteCommand(0x8d);//--set DC-DC enable oledWriteCommand(0x14);// oledWriteCommand(0xaf);//--turn on oled panel } void oled_address(unsigned char column, unsigned char page) { oledWriteCommand(0xb0+page); // set page address oledWriteCommand(0x10 | ((column & 0xf0) >> 4)); // set column address MSB oledWriteCommand(0x00 | (column & 0x0f) ); // set column address LSB } void clear_LCD(void) { int16_t x, Y; for (Y=0;Y