请给出51单片机oledspi显示图片的详细代码
时间: 2024-02-16 20:03:38 浏览: 150
以下是51单片机OLED SPI显示图片的详细代码,供参考:
```
#include <reg51.h>
// OLED SPI引脚定义
sbit OLED_DC = P2^0; //数据/命令选择引脚
sbit OLED_RST = P2^1; //复位引脚
sbit OLED_CS = P2^2; //片选引脚
sbit OLED_SCLK = P2^3; //时钟引脚
sbit OLED_SDIN = P2^4; //数据引脚
// 延时函数
void Delay(unsigned int i)
{
while(i--);
}
// OLED SPI写命令
void OLED_WriteCmd(unsigned char I_Cmd)
{
OLED_DC = 0; // 选择写入命令
OLED_CS = 0; // 片选使能
OLED_SCLK = 0; // 时钟线置低
OLED_SDIN = I_Cmd; // 数据线写入
OLED_SCLK = 1; // 时钟线置高
OLED_CS = 1; // 片选禁止
}
// OLED SPI写数据
void OLED_WriteData(unsigned char I_Data)
{
OLED_DC = 1; // 选择写入数据
OLED_CS = 0; // 片选使能
OLED_SCLK = 0; // 时钟线置低
OLED_SDIN = I_Data; // 数据线写入
OLED_SCLK = 1; // 时钟线置高
OLED_CS = 1; // 片选禁止
}
// OLED SPI初始化
void OLED_Init()
{
OLED_RST = 0; // 复位OLED
Delay(200);
OLED_RST = 1;
OLED_WriteCmd(0xAE); // 关闭OLED显示
OLED_WriteCmd(0x20); // 设置内存地址模式
OLED_WriteCmd(0x10); // 垂直寻址模式
OLED_WriteCmd(0xB0); // 设置页地址
OLED_WriteCmd(0xC8); // 设置COM扫描方向
OLED_WriteCmd(0x00); // 设置低列地址
OLED_WriteCmd(0x10); // 设置高列地址
OLED_WriteCmd(0x40); // 设置显示开始行
OLED_WriteCmd(0x81); // 对比度设置
OLED_WriteCmd(0xFF); // 对比度值
OLED_WriteCmd(0xA1); // 设置段重定向
OLED_WriteCmd(0xA6); // 设置正常显示
OLED_WriteCmd(0xA8); // 设置多路复用比
OLED_WriteCmd(0x3F); // 多路复用比值
OLED_WriteCmd(0xAD); // 设置电荷泵
OLED_WriteCmd(0x8B); // 电荷泵开启
OLED_WriteCmd(0xD3); // 设置显示偏移
OLED_WriteCmd(0x00); // 显示偏移值
OLED_WriteCmd(0xD5); // 设置显示时钟分频
OLED_WriteCmd(0xF0); // 显示时钟分频值
OLED_WriteCmd(0xD9); // 设置预充电期
OLED_WriteCmd(0x22); // 预充电期值
OLED_WriteCmd(0xDA); // 设置COM硬件配置
OLED_WriteCmd(0x02); // COM硬件配置值
OLED_WriteCmd(0xDB); // 设置VCOMH
OLED_WriteCmd(0x49); // VCOMH值
OLED_WriteCmd(0xAF); // 打开OLED显示
}
// OLED SPI显示图片
void OLED_ShowPicture(unsigned char code *I_Picture)
{
unsigned char i,j;
for(i=0;i<8;i++)
{
OLED_WriteCmd(0xB0+i); // 设置页地址
OLED_WriteCmd(0x00); // 设置低列地址
OLED_WriteCmd(0x10); // 设置高列地址
for(j=0;j<128;j++)
{
OLED_WriteData(I_Picture[i*128+j]); // 写入数据
}
}
}
void main()
{
OLED_Init(); // 初始化OLED
OLED_ShowPicture(Picture_Data); // 显示图片
while(1);
}
```
在上面的代码中,需要注意以下几点:
1.在OLED SPI引脚定义中,根据实际连接的引脚进行定义。
2.OLED SPI写命令和写数据的函数分别是`OLED_WriteCmd()`和`OLED_WriteData()`。
3.OLED SPI初始化函数是`OLED_Init()`,其中设置了OLED的各种参数。
4.OLED SPI显示图片的函数是`OLED_ShowPicture()`,需要传入一个指向图片数组的指针。
5.在主函数中,调用`OLED_Init()`进行OLED SPI初始化,并调用`OLED_ShowPicture()`显示图片。
阅读全文