#include #include #include #include #include #include "gpio.h" #include "lcd.h" #include "log.h" void ssd1309_on(lcd_handle_t *h, int flag) { if(flag) { lcd_write_reg(h,0x8D); lcd_write_reg(h,0x14); lcd_write_reg(h,0xAF); } else { lcd_write_reg(h,0x8D); lcd_write_reg(h,0x10); lcd_write_reg(h,0xAE); } return 0; } int ssd1309_init(lcd_handle_t *h) { ssd1309_reset(); lcd_write_reg(h,0xFD); lcd_write_reg(h,0x12); lcd_write_reg(h,0xAE);//--turn off oled panel lcd_write_reg(h,0xd5);//--set display clock divide ratio/oscillator frequency lcd_write_reg(h,0xA0); lcd_write_reg(h,0xA8);//--set multiplex ratio(1 to 64) lcd_write_reg(h,0x3f);//--1/64 duty lcd_write_reg(h,0xD3);//-set display offset Shift Mapping RAM Counter (0x00~0x3F) lcd_write_reg(h,0x00);//-not offset lcd_write_reg(h,0x40);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F) lcd_write_reg(h,0xA1);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常 lcd_write_reg(h,0xC8);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常 lcd_write_reg(h,0xDA);//--set com pins hardware configuration lcd_write_reg(h,0x12); lcd_write_reg(h,0x81);//--set contrast control register lcd_write_reg(h,0x7F);// Set SEG Output Current Brightness lcd_write_reg(h,0xD9);//--set pre-charge period lcd_write_reg(h,0x82);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock lcd_write_reg(h,0xDB);//--set vcomh lcd_write_reg(h,0x34);//Set VCOM Deselect Level lcd_write_reg(h,0xA4);// Disable Entire Display On (0xa4/0xa5) lcd_write_reg(h,0xA6);// Disable Inverse Display On (0xa6/a7) ssd1309_refresh(h); ssd1309_on(h,1); return 0; } int ssd1309_refresh(lcd_handle_t *h) { int i,n,offset; for(i=0;i<8;i++) { lcd_write_reg(h,0xb0+i); //设置行起始地址 lcd_write_reg(h,0x00); //设置低列起始地址 lcd_write_reg(h,0x10); //设置高列起始地址 gpio_set(DC_GPIO, 1); lcd_hw_write(h, &h->buf[i*h->width], h->width); } }