只使用C语言写一个型号为SSD1315使用四线spi的oled的清屏函数
时间: 2024-04-30 10:19:23 浏览: 117
用C语言实现清屏处理(源程序).doc
以下是使用C语言写的SSD1315 OLED清屏函数,使用四线SPI通信协议:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <stdbool.h>
// 定义SSD1315相关的命令
#define SSD1315_SET_COLUMN_ADDR 0x15
#define SSD1315_SET_ROW_ADDR 0x75
#define SSD1315_SET_CONTRAST 0x81
#define SSD1315_ENTIRE_DISPLAY_ON 0xA4
#define SSD1315_SET_NORMAL_DISPLAY 0xA6
#define SSD1315_SET_INVERSE_DISPLAY 0xA7
#define SSD1315_SET_DISPLAY_OFF 0xAE
#define SSD1315_SET_DISPLAY_ON 0xAF
#define SSD1315_SET_COM_PINS 0xDA
#define SSD1315_SET_DISPLAY_START_LINE 0xA1
#define SSD1315_SET_DISPLAY_OFFSET 0xD3
#define SSD1315_SET_CLOCK_DIV_RATIO 0xD5
#define SSD1315_SET_PRECHARGE_PERIOD 0xD9
#define SSD1315_SET_VCOMH_DESELCT 0xDB
#define SSD1315_SET_CHARGE_PUMP 0x8D
// 定义SPI端口
#define OLED_SPI_PORT 1
// 定义OLED的尺寸
#define OLED_WIDTH 128
#define OLED_HEIGHT 64
// 定义SSD1315的行和列的范围
#define SSD1315_MIN_COLUMN 0
#define SSD1315_MAX_COLUMN (OLED_WIDTH - 1)
#define SSD1315_MIN_ROW 0
#define SSD1315_MAX_ROW (OLED_HEIGHT / 8 - 1)
// 定义SSD1315使用的位图存储格式
#define SSD1315_PIXEL_FORMAT_HORZ 0x00
#define SSD1315_PIXEL_FORMAT_VERT 0x01
#define SSD1315_PIXEL_FORMAT_PAGE 0x02
// 定义SSD1315使用的通讯速度
#define SSD1315_SPI_SPEED 1000000
// 定义清屏函数
void ssd1315_clear_screen()
{
uint8_t spi_tx_buf[4];
uint8_t spi_rx_buf[4];
// 设置列地址
spi_tx_buf[0] = SSD1315_SET_COLUMN_ADDR;
spi_tx_buf[1] = SSD1315_MIN_COLUMN;
spi_tx_buf[2] = SSD1315_MAX_COLUMN;
spi_tx_buf[3] = 0xFF;
spi_transfer(OLED_SPI_PORT, spi_tx_buf, spi_rx_buf, 4, SSD1315_SPI_SPEED);
// 设置行地址
spi_tx_buf[0] = SSD1315_SET_ROW_ADDR;
spi_tx_buf[1] = SSD1315_MIN_ROW;
spi_tx_buf[2] = SSD1315_MAX_ROW;
spi_tx_buf[3] = 0xFF;
spi_transfer(OLED_SPI_PORT, spi_tx_buf, spi_rx_buf, 4, SSD1315_SPI_SPEED);
// 清空数据
memset(spi_tx_buf, 0x00, sizeof(spi_tx_buf));
// 开始写入数据
spi_tx_buf[0] = 0x5C; // 指令:写数据
for (int i = 0; i < (OLED_WIDTH * OLED_HEIGHT / 8); i++)
{
spi_transfer(OLED_SPI_PORT, spi_tx_buf, spi_rx_buf, 1, SSD1315_SPI_SPEED);
}
}
```
该函数使用了SPI通信协议来与SSD1315 OLED进行通信,并根据SSD1315的命令设置列地址、行地址等参数,最终向OLED写入全0数据实现清屏。注意,该函数中的`spi_transfer()`函数需要根据实际情况进行定义。
阅读全文