首先构建stm32cubeide工程,在工程core下面的文件夹inc下,新建两个头文件oled.h和oledfont.h,具体为:
oled.h代码为:
#ifndef __OLED_H
#define __OLED_H
#include "stdlib.h"
//Notice:移植时需要修改的部分:1、OLED屏引脚接口定义;2、延迟时间
/*-----------------OLED屏宏定义部分----------------*/
/////------------------------------------------------------/////
//定义OLED屏引脚接口,可根据实际需求修改|demo中:SCL——PB0、SDA——PB1
#define OLED_IIC_Port GPIOB
#define OLED_SCL_Pin GPIO_PIN_0
#define OLED_SDA_Pin GPIO_PIN_1
/////------------------------------------------------------/////
#define OLED_SCL_CLR() HAL_GPIO_WritePin(OLED_IIC_Port,OLED_SCL_Pin,GPIO_PIN_RESET)//SCL
#define OLED_SCL_SET() HAL_GPIO_WritePin(OLED_IIC_Port,OLED_SCL_Pin,GPIO_PIN_SET)
#define OLED_SDA_CLR() HAL_GPIO_WritePin(OLED_IIC_Port,OLED_SDA_Pin,GPIO_PIN_RESET)//SDA
#define OLED_SDA_SET() HAL_GPIO_WritePin(OLED_IIC_Port,OLED_SDA_Pin,GPIO_PIN_SET)
#define OLED_CMD 0
#define OLED_DATA 1
uint8_t OLED_GRAM[128][8];
//延时函数
//需要根据时钟树设定灵活修改,确保IIC时序工作在OLED屏能够识别的范围
void delay_us(uint16_t t)
{
//STM32F103取HSI=8MHz,主频提高后可根据实际情况乘以倍数。
uint16_t i=t*1;
while(i--);
}
//IIC起始信号
void I2C_Start(void)
{
OLED_SDA_SET();
OLED_SCL_SET();
delay_us(6);
OLED_SDA_CLR();
delay_us(6);
OLED_SCL_CLR();
delay_us(6);
}
//IIC结束信号
void I2C_Stop(void)
{
OLED_SDA_CLR();
OLED_SCL_SET();
delay_us(6);
OLED_SDA_SET();
}
//IIC等待信号响应
void I2C_Ack(void)
{
OLED_SDA_SET();
delay_us(6);
OLED_SCL_SET();
delay_us(6);
OLED_SCL_CLR();
delay_us(6);
}
//向IIC总线写1个字节
void I2C_WtByte(uint8_t dat)
{
uint8_t i;
for(i=0;i<8;i++)
{
if(dat & 0x80)//将dat的8位从最高位开始依次写入
{
OLED_SDA_SET();
}
else
{
OLED_SDA_CLR();
}
delay_us(6);
OLED_SCL_SET();
delay_us(6);
OLED_SCL_CLR();//将时钟信号设置为低电平
dat<<=1;
}
}
//向oled屏发送一个字节
//mode:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WtByte(uint8_t dat,uint8_t mode)
{
I2C_Start();
I2C_WtByte(0x78);
I2C_Ack();
if(mode){I2C_WtByte(0x40);}
else{I2C_WtByte(0x00);}
I2C_Ack();
I2C_WtByte(dat);
I2C_Ack();
I2C_Stop();
}
//OLED显示数据更新
void OLED_Refresh(void)
{
uint8_t i,n;
for(i=0;i<8;i++)
{
OLED_WtByte(0xb0+i,OLED_CMD); //设置行起始地址
OLED_WtByte(0x00,OLED_CMD); //设置低列起始地址
OLED_WtByte(0x10,OLED_CMD); //设置高列起始地址
&n

最低0.47元/天 解锁文章
5131

被折叠的 条评论
为什么被折叠?



