pt6964驱动
搜pt6964的时候发现百度很难找到相关资料,先把我用的驱动公开一下。
代码仅供参考(因为我还没整明白),有会用的大佬欢迎指导和分享资料。
pt6964.c
#include "pt6964.h" static uint8_t d_buf[12] = {0}; static spi_device_handle_t spi_dev; static void ChipSelect_EN(void) { gpio_set_level(PIN_NUM_CS, 1); } static void ChipSelect_Dis(void) { gpio_set_level(PIN_NUM_CS, 0); } static void SPIBeforeCmd(void) { ChipSelect_EN(); delay_ms(1); ChipSelect_Dis(); } static uint8_t Data_rl(uint8_t Data_MSB) { uint8_t Data_LSB = 0x00; for (int i = 0; i < 8; i += 1) { if (Data_MSB & 0x01) Data_LSB |= 1 << (7 - i); else Data_LSB &= ~(1 << (7 - i)); Data_MSB >>= 1; } return Data_LSB; } static int DisplayWriteByte(uint8_t inData) { int ret; spi_transaction_t t; uint8_t temp = Data_rl(inData); memset(&t, 0, sizeof(t)); t.length = 8; t.tx_buffer = &temp; t.user = (void *)0; ret = spi_device_transmit(spi_dev, &t); return ret } static void DisplayCommand(uint8_t inCommand) { SPIBeforeCmd(); DisplayWriteByte(inCommand); } static void DisplayData(void) { esp_err_t ret; spi_transaction_t t; uint8_t temp_Buffer[12]; memset(&temp_Buffer, 0, sizeof(temp_Buffer)); for (int i = 0; i < 12; i += 1) { temp_Buffer[i] = Data_rl(d_buf[i]); } memset(&t, 0, sizeof(t)); t.length = 8 * 12; t.tx_buffer = (void *)temp_Buffer; t.user = (void *)1; ret = spi_device_transmit(spi_dev, &t); assert(ret == ESP_OK); } static void DisplayCmdInit(void) { DisplayCommand(0x40); DisplayCommand(0xC0); DisplayCommand(0x02); DisplayCommand(0x80); } void DisplayRefresh(void) { DisplayCommand(0x40); DisplayCommand(0xC0); DisplayData(); DisplayCommand(0x02); DisplayCommand(0x8F); } void DisplaySetAll(unsigned char inData) { for (unsigned char TempB = 0; TempB < 12; TempB++) display.d_buf[TempB] = inData; } static void pt6964_spi_init(void) { //GPIO、SPI 初始化,请根据芯片平台对应实现 } void pt6964_init(void) { pt6964_spi_init(); DisplayCmdInit(); DisplaySetAll(0xff); DisplayRefresh(); }
pt6964.h
#ifndef PT6964_H #define PT6964_H #define PIN_NUM_MOSI 2 #define PIN_NUM_CLK 3 #define PIN_NUM_CS 8 extern uint8_t d_buf[12]; void DisplayRefresh(void); void pt6964_init(void); #endif