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

 

posted @ 2021-07-18 17:08  fly123  阅读(140)  评论(0编辑  收藏  举报