【GD32L233C-START 评测】-八、普通GPIO方式驱动1.5寸OLED屏
[复制链接]
几次测试下来,一直在通过SPI和I2C方式驱动OLED,结果在I2C驱动中遇到了很多的难题,至今没点亮哈。
偶然看到一个帖子,模拟SPI方式驱动OLED,仔细研究发现,通用GPIO就能够驱动OLED,于是做了本次评测。
为方便连接,就用了GD32L233C左侧的A口连接到OLED屏
#define RCU_OLED_PORT RCU_GPIOA
#define OLED_CS_PORT GPIOA
#define OLED_CS_PIN GPIO_PIN_5
#define OLED_RST_PORT GPIOA
#define OLED_RST_PIN GPIO_PIN_3
#define OLED_DC_PORT GPIOA
#define OLED_DC_PIN GPIO_PIN_4
#define RCU_I2C_PORT RCU_GPIOA
#define I2C1_SCL_Pin GPIO_PIN_1
#define I2C1_SCL_GPIO_Port GPIOA
#define I2C1_SDA_Pin GPIO_PIN_2
#define I2C1_SDA_GPIO_Port GPIOA
各管脚只进行简单的GPIO初始化,代码就不写了哈
OLED的核心驱动代码如下
void OLED_SendData(uint8_t data)
{
uint8_t i = 0;
OLED_SCL_0;
for(i = 0;i < 8;i++)
{
OLED_SCL_0;
if (data & 0x80)
{
OLED_SDA_1;
}
else
{
OLED_SDA_0;
}
OLED_SCL_1;
data <<= 1;
}
}
void OLED_WriteReg(uint8_t addr)
{
//SCK_0();
//OLED_CS_0;
OLED_DC_0; //当DC = 0时写命令
OLED_SendData(addr);
//OLED_CS_1;
OLED_DC_1;
}
void OLED_WriteData(uint8_t data)
{
//OLED_CS_0;
OLED_DC_1; //当DC = 1时写数据
OLED_SendData(data);
//OLED_CS_1;
OLED_DC_0;
}
其他的代码都跟前面的评测一致
发现能够完美驱动OLED屏,甚至感觉速度不差
连接线的照片
希望对OLED驱动无头绪的朋友有帮助。
完整的项目文件
|