STM32F103C8T6 0.42寸的OLED屏幕IIC例程

news/2024/11/28 10:46:41/

初始化部分

void OLED_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 //使能A端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; 		 //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);	  //初始化PA0,1GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);	  //初始化PA2GPIO_SetBits(GPIOA,GPIO_Pin_2);OLED_RES_Clr();delay_ms(200);OLED_RES_Set();OLED_WR_Byte(0xAE,OLED_CMD); /*display off*/OLED_WR_Byte(0xD5,OLED_CMD); /*set osc division*/OLED_WR_Byte(0xF0,OLED_CMD);OLED_WR_Byte(0xA8,OLED_CMD); /*multiplex ratio*/OLED_WR_Byte(0x27,OLED_CMD); /*duty = 1/40*/OLED_WR_Byte(0xD3,OLED_CMD); /*set display offset*/OLED_WR_Byte(0x00,OLED_CMD);OLED_WR_Byte(0x40,OLED_CMD); /*Set Display Start Line */OLED_WR_Byte(0x8d,OLED_CMD); /*set charge pump enable*/OLED_WR_Byte(0x14,OLED_CMD);OLED_WR_Byte(0x20,OLED_CMD); /*Set page address mode*/OLED_WR_Byte(0x02,OLED_CMD);OLED_WR_Byte(0xA1,OLED_CMD); /*set segment remap*/OLED_WR_Byte(0xC8,OLED_CMD); /*Com scan direction*/OLED_WR_Byte(0xDA,OLED_CMD); /*set COM pins*/OLED_WR_Byte(0x12,OLED_CMD);OLED_WR_Byte(0xAD,OLED_CMD); /*Internal IREF Setting*/OLED_WR_Byte(0x30,OLED_CMD);OLED_WR_Byte(0x81,OLED_CMD); /*contract control*/OLED_WR_Byte(0xfF,OLED_CMD); /*128*/OLED_WR_Byte(0xD9,OLED_CMD); /*set pre-charge period*/OLED_WR_Byte(0x22,OLED_CMD);OLED_WR_Byte(0xdb,OLED_CMD); /*set vcomh*/OLED_WR_Byte(0x20,OLED_CMD);OLED_WR_Byte(0xA4,OLED_CMD); /*Set Entire Display On/Off*/OLED_WR_Byte(0xA6,OLED_CMD); /*normal / reverse*/OLED_WR_Byte(0x0C,OLED_CMD); /*set lower column address*/OLED_WR_Byte(0x11,OLED_CMD); /*set higher column address*/	OLED_Clear();OLED_WR_Byte(0xAF,OLED_CMD); /*display ON*/ 
}

显存与清屏部分

//更新显存到OLED	
void OLED_Refresh(void)
{u8 i,n;for(i=0;i<5;i++){OLED_WR_Byte(0xb0+i,OLED_CMD); //设置行起始地址OLED_WR_Byte(0x0c,OLED_CMD);   //设置低列起始地址OLED_WR_Byte(0x11,OLED_CMD);   //设置高列起始地址I2C_Start();Send_Byte(0x78);I2C_WaitAck();Send_Byte(0x40);I2C_WaitAck();for(n=0;n<72;n++){Send_Byte(OLED_GRAM[n][i]);I2C_WaitAck();}I2C_Stop();}
}
//清屏函数
void OLED_Clear(void)
{u8 i,n;for(i=0;i<5;i++){for(n=0;n<72;n++){OLED_GRAM[n][i]=0;//清除所有数据}}OLED_Refresh();//更新显示
}

OLED的demo其他都差不多的。
需要注意的两点配置
1.关于时钟频率的配置,不同的驱动也会有不同的要求值,比如我这里的是1315的驱动,具体如下图
在这里插入图片描述
在这里插入图片描述
FOSC表示内部振荡器的频率值,当命令D5h A[7:4]为默认值时,该值688的典型值。

2.关于页寻址的列地址,主要还是通过以下三个指令寻址写数据
设置页面的起始地址命令B0h~B7h目标显示位置。
通过命令00h~0Fh设置指针的低起始列地址。
通过命令10h~1Fh设置指针的高起始列地址。
所谓的低高,就是低满了高就进一。就比如,我的屏幕是72*40的,所以屏幕列的长度为72,通过计算,我应该偏移到28列开始写数据,那怎么得到这个值呢?按照上面说的,当为0x1c的时候就表示28,低位是C,高位为1.

参考链接
https://blog.csdn.net/u013581207/article/details/102467912
https://zhuanlan.zhihu.com/p/485419438

例程代码链接: https://pan.baidu.com/s/1BUKbeoyXgZSn7TOcj6gTGA?pwd=dikf 提取码: dikf


http://www.ppmy.cn/news/346425.html

相关文章

HW-95 L298N电机驱动板模块的使用

int input1 5; // 定义uno的pin 5 向 input1 输出 int input2 6; // 定义uno的pin 6 向 input2 输出 int input3 9; // 定义uno的pin 9 向 input3 输出 int input4 10; // 定义uno的pin 10 向 input4 输出 void setup() { // Serial.begin (9600); //初始化各IO,模…

STM32驱动W25Q128

1、W25Q128 是华邦公司推出的一款 SPI 接口的 NOR Flash 芯片&#xff0c;其存储空间为 128Mbit&#xff0c;相当于 16M 字节。 W25Q128 可以支持 SPI 的模式 0 和模式 3&#xff0c;也就是 CPOL0/CPHA0 和CPOL1/CPHA1 这两种模式。 2、写入数据时&#xff0c;需要注意以下两个…

【C++】 STL(上)STL简述、STL容器

文章目录 简述STL容器list链表vector向量deque双端队列map映射表set集合hash_map哈希表 简述 STL是“Standard Template Library”的缩写&#xff0c;中文译为“标准模板库”。STL是C标准库的一部分&#xff0c;位与各个C的头文件中&#xff0c;即他并非以二进制代码的形式提供…

L298N模块的连接与使用(stm32驱动与51驱动)

一、L298N的一些基本参数 使用方法&#xff1a; 输出A&#xff1a; 通道A输出 &#xff0c;连接电机 输出B: 通道B输出 &#xff0c;连接电机 12V供电&#xff1a; 主电源正极输入 供电GND: 主电源正负极极输入 5V输出&#xff1a; 5v电压输出端&#xff0c;可用…

L226WTQ 参数

分辨率&#xff1a;1680x1050 水平刷新率&#xff1a;30-83KHz 垂直刷新率&#xff1a;56-75Hz

简单使用Hystrix

使用Hystrix之前&#xff0c;需要先对SpringCloud有所了解&#xff0c;然后才会使用的顺畅&#xff0c;它是我们SpringCould的一种保护机制&#xff0c;非常好用。 下面直接开始 先导入Hystrix所需要的依赖 <!-- 引入openfiegn--> <dependency> <groupId>org…

项目 引入 uView

只分享干货&#xff01; 第一点&#xff1a; npm install uview-ui//或yarn add uview-ui 第二点 import Vue from vue; import uView from uview-ui;Vue.use(uView);//或// main.js import uView from /node_modules/uview-ui Vue.use(uView) 第三点 import /node_module…

element-plus的el-select实现触底加载更多(新版本报错踩坑)

前言 element-plus新版增加了一个属性&#xff0c;且默认为true&#xff0c;使得下拉菜单被插入到了body元素下。即.el-select下默认不包含.el-select-dropdown了。 现象 当依旧按照之前的方式&#xff0c;封装自定义指令&#xff0c;实现滚动到el-select下拉菜单的底部&…