平头哥RVB2601开发板测评——OLED与LVGL移植介绍"/>
平头哥RVB2601开发板测评——OLED与LVGL移植介绍
本文作者:溪悦哦
一、OLED介绍
我们的屏幕采用的是128*64的分辨率的,驱动ic应该是SSD1306,这个刚好支持129*64的,但是就是单色屏,用的是spi接口。
首先初始化io口:csi_gpio_pin_t pin_clk;csi_gpio_pin_t pin_mosi;csi_gpio_pin_t pin_cs;csi_gpio_pin_t pin_miso;static void oled_pinmux_init(){csi_pin_set_mux(PA28, PIN_FUNC_GPIO); //clkcsi_pin_set_mux(PA29, PIN_FUNC_GPIO); //mosicsi_pin_set_mux(PA27, PIN_FUNC_GPIO); //cscsi_pin_set_mux(PA30, PIN_FUNC_GPIO); //miso}static void oled_gpio_init(){csi_gpio_pin_init(&pin_clk, PA28);csi_gpio_pin_dir(&pin_clk, GPIO_DIRECTION_OUTPUT); csi_gpio_pin_init(&pin_mosi, PA29);csi_gpio_pin_dir(&pin_mosi, GPIO_DIRECTION_OUTPUT);csi_gpio_pin_init(&pin_cs, PA27);csi_gpio_pin_dir(&pin_cs, GPIO_DIRECTION_OUTPUT);csi_gpio_pin_init(&pin_miso, PA30); //dccsi_gpio_pin_dir(&pin_miso, GPIO_DIRECTION_OUTPUT);}然后写命令、数据函数void Write_Command(unsigned char Data){unsigned char i;lcd_cs(0);lcd_dc(0);for (i = 0; i < 8; i++) {lcd_sclk(0);lcd_sdin((Data & 0x80) >> 7);Data = Data << 1;lcd_sclk(1);}lcd_dc(1);lcd_cs(1);}void Write_Data(unsigned char Data){unsigned char i;lcd_cs(0);lcd_dc(1);for (i = 0; i < 8; i++) {lcd_sclk(0);lcd_sdin((Data & 0x80) >> 7);Data = Data << 1;lcd_sclk(1);}lcd_dc(1);lcd_cs(1);}对于这种单色屏,我们直接开一个缓冲区就行:uint8_t g_oled_ram[8][128];画点就是修改缓存区的内容:void oled_draw_point(uint8_t r, uint8_t c, uint8_t t){if (t) {SET_BIT(g_oled_ram[r / 8][c], ((r % 8)));} else {CLR_BIT(g_oled_ram[r / 8][c], (r % 8));}}最后要调用刷新函数来修改一整个屏幕:void oled_reflesh(){unsigned char
更多推荐
平头哥RVB2601开发板测评——OLED与LVGL移植介绍
发布评论