这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【STM32WBA55CG开发板】驱动iic接口的oled屏幕

共3条 1/1 1 跳转至

【STM32WBA55CG开发板】驱动iic接口的oled屏幕

菜鸟
2024-12-25 17:11:20     打赏

首先oled的接口是iic,所以只需要接4根线,vcc  、GND、SCL和SDA。

其中SCL接板子的PB5

SDA接板子的PB8

接线连好之后,就先看看初始化程序

void OLED_Init(void)
{ 	
 
OLED_WR_Byte(0xAE,OLED_CMD);//-- 关闭显示。
	OLED_WR_Byte(0x00,OLED_CMD);//设置低列地址
	OLED_WR_Byte(0x10,OLED_CMD);//设置高列地址
	OLED_WR_Byte(0x40,OLED_CMD);//--设置起始行地址  
	OLED_WR_Byte(0xB0,OLED_CMD);//--设置页地址
	OLED_WR_Byte(0x81,OLED_CMD); // 设置对比度控制
	OLED_WR_Byte(0xFF,OLED_CMD);//--128 设置对比度值(最大对比度 ) 
	OLED_WR_Byte(0xA1,OLED_CMD);//设置段重映射,通常是将段的映射方式从左到右或从右到左。
	OLED_WR_Byte(0xA6,OLED_CMD);//设置正常/反转显示模式
	OLED_WR_Byte(0xA8,OLED_CMD);//--设置复用比率(1/64)
	OLED_WR_Byte(0x3F,OLED_CMD);//--设置1/32的占空比
	OLED_WR_Byte(0xC8,OLED_CMD);//设置COM扫描方向
	OLED_WR_Byte(0xD3,OLED_CMD);//- 设置显示偏移
	OLED_WR_Byte(0x00,OLED_CMD);//设置显示偏移值为0
	
	OLED_WR_Byte(0xD5,OLED_CMD);//设置振荡器分频
	OLED_WR_Byte(0x80,OLED_CMD);//设置分频值为1
	
	OLED_WR_Byte(0xD8,OLED_CMD);//设置区域颜色模式关闭
	OLED_WR_Byte(0x05,OLED_CMD);//设置区域颜色模式相关的参数。
	
	OLED_WR_Byte(0xD9,OLED_CMD);//设置预充电周期
	OLED_WR_Byte(0xF1,OLED_CMD);//设置预充电周期的值为F1
	
	OLED_WR_Byte(0xDA,OLED_CMD);//设置COM引脚配置
	OLED_WR_Byte(0x12,OLED_CMD);//设置COM引脚配置的参数
	
	OLED_WR_Byte(0xDB,OLED_CMD);//设置VCOMH(虚阴极电压)
	OLED_WR_Byte(0x30,OLED_CMD);//设置VCOMH的值为0x30
	
	OLED_WR_Byte(0x8D,OLED_CMD);//设置充电泵使能
	OLED_WR_Byte(0x14,OLED_CMD);//设置充电泵的值为0x14。
	
	OLED_WR_Byte(0xAF,OLED_CMD);//打开OLED面板显示
}

好,有了初始化函数,就来看看任意位置画图的函数

void OLED_DrawBitmap(int16_t iX, int16_t iY, int16_t iWidth, int16_t iHeight, const uint8_t *pchBuffer){
    //unsigned char j=0;
    unsigned char x,y;
    int16_t y0 = iY/8;
    int16_t y1 = iY + iHeight;
    
    if(y1%8==0) y1=y1/8;      
    else y1 = y1/8+1;
    
    for(y = y0;y < y1; y++){
        //OLED_Set_Pos(iX,y);
        OLED_WR_Byte(0xb0+y,OLED_CMD);
        OLED_WR_Byte((((iX+0)&0xf0)>>4)|0x10,OLED_CMD);
        OLED_WR_Byte(((iX+0)&0x0f),OLED_CMD); 
        
        uint16_t offect = (y-y0)*8*iWidth;//uint16_t offect = 128*8*i;
        for(x = 0;x < iWidth;x++){
            u8 data_ram = 0x00;
            for(uint16_t j = 0; j < 8; j++){
                if(pchBuffer[offect + x + iWidth *j] >= 0x80){
                    //data_ram &= ~(0x01<<j);
                    data_ram |= (0x01<<j);
                }
            } 
            OLED_WR_Byte(data_ram,OLED_DATA);	    
        }   
    }
}

首先,(iX,iY)就是在屏幕的这个点开始画图,图形的宽度为iWidth ,高度为iHeight

图形数据为uint8_t类型,也就是一个字节表示一个点。

点亮后显示图片的效果如下

07.png

程序下载链接如下

test2.zip

下一篇介绍如何移植arm公司开源的arm-2d




关键词: oled iic    

工程师
2024-12-25 18:34:35     打赏
2楼

期待大佬 arm-2d 的文章介绍


高工
2024-12-26 10:13:56     打赏
3楼

楼主,您这个帖子内容与板子相关吗


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]