在线时间9 小时
UID3937441
注册时间2023-8-10
NXP金币34
该用户从未签到
注册会员
- 积分
- 108
- 最后登录
- 2024-11-1
|
本帖最后由 eefocus_3937441 于 2023-8-23 08:46 编辑
1.使用硬件spi连接上oled屏
2.配置LCD的SPI信息,如图默认使用SPI8
3.进行初始化
ssd1306init
//以下为SSD1306设置初始化代码,基本不用改动
_writeCommand(0xAE); //关闭显示
_writeCommand(0xD5); //设置时钟分频因子,振荡频率
_writeCommand(80); //[3:0],分频因子;[7:4],振荡频率
_writeCommand(0xA8); //设置驱动路数
_writeCommand(0X3F); //默认0X3F(1/64)
_writeCommand(0xD3); //设置显示偏移
_writeCommand(0X00); //默认为0
_writeCommand(0x40); //设置显示开始行 [5:0],行数.
_writeCommand(0x8D); //电荷泵设置
_writeCommand(0x14); //bit2 开启/关闭
_writeCommand(0x20); //设置内存地址模式
_writeCommand(0x02); //[1:0],00列地址模式;01行地址模式;10,页地址模式;默认10;
_writeCommand(0xA1); //段重定义设置,bit0:0,0->0;1,0->127;
_writeCommand(0xC0); //设置COM扫描方向;bit3:0,普通模式;1,重定义模式 COM[N-1]->COM0;N:驱动路数
_writeCommand(0xDA); //设置COM口硬件引脚配置
_writeCommand(0x12); //[5:4]配置
_writeCommand(0x81); //对比度设置
_writeCommand(0xEF); //1~255;默认0X7F (亮度设置,越大越亮)
_writeCommand(0xD9); //设置预充电周期
_writeCommand(0xf1); //[3:0],PHASE 1;[7:4],PHASE 2;
_writeCommand(0xDB); //设置VCOMH 电压倍率
_writeCommand(0x30); //[6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;
_writeCommand(0xA4); //全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)
_writeCommand(0xA6); //设置显示方式;bit0:1,反相显示;0,正常显示
_writeCommand(0xAF); //开启显示
这里写入命令直接套用的原来的函数DEMO_SPI_LCD_WriteData,DEMO_SPI_LCD_WriteCmd
4.初始化后需要修改刷新函数
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{
PRINTF("Refresh area:x1=%d, y1=%d, x2=%d, y2=%d\r\n", area->x1,area->y1,area->x2,area->y2);
//*刷新显示区每个点的像素值*/
for (uint8_t y = area->y1; y <= area->y2; y++){
for (uint8_t x = area->x1; x <= area->x2; x++){
if(color_p->full != 0)OLED_DrawPoint(x, y,1);//由于用的OLED只有黑白,所以配置的2种颜色,当颜色值为1时设置该像素点
else
OLED_DrawPoint(x, y,0);//由于我是用的OLED只有黑白,所以配置的2种颜色,当颜色值为0时设置清除像素点
PRINTF("%d",OLED_GRAM[x][y]);
color_p++;
}
}
//将缓冲buf写入oled
OLED_Refresh_Gram();
//最后必须得调用,通知lvgl库你已经flushing拷贝完成了
lv_disp_flush_ready(disp_drv);
}
这里OLED_DrawPoint(x, y,1)是对OLED_GRAM[x][y])数组进行赋值,OLED_GRAM[x][y])是全局变量,将这个数组写入到显示屏就可以显示了。
5.因为1306是单色屏所以色深也要改为1
/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/
#define LV_COLOR_DEPTH 1
/*Swap the 2 bytes of RGB565 color. Useful if the display has an 8-bit interface (e.g. SPI)*/
#define LV_COLOR_16_SWAP 0 6.效果图如下
|
|