221 lines
5.3 KiB
C
221 lines
5.3 KiB
C
|
|
#include "delay.h"
|
|||
|
|
#include "spi.h"
|
|||
|
|
|
|||
|
|
#include "lcd.h"
|
|||
|
|
|
|||
|
|
/**************************************** ˽<>к<EFBFBD><D0BA><EFBFBD> ****************************************/
|
|||
|
|
|
|||
|
|
void LCD_SetWin(uint16_t x, uint16_t y, uint16_t width, uint16_t height);
|
|||
|
|
|
|||
|
|
/*****************************************************************************************/
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief LCD <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 8 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param cmd: 8 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void LCD_SendCmd(uint8_t cmd)
|
|||
|
|
{
|
|||
|
|
LCD_Cmd_Mode_On;
|
|||
|
|
|
|||
|
|
SPI2_Write8Bits(cmd);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief LCD <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 8 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param data: 8 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void LCD_SendData8Bits(uint8_t data)
|
|||
|
|
{
|
|||
|
|
LCD_Data_Mode_On;
|
|||
|
|
|
|||
|
|
SPI2_Write8Bits(data);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief LCD <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 16 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param data: 16 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void LCD_SendData16Bits(uint16_t data)
|
|||
|
|
{
|
|||
|
|
LCD_Data_Mode_On;
|
|||
|
|
|
|||
|
|
SPI2_Write16Bits(data);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief LCD <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 32 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param data: 32 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void LCD_SendData32Bits(uint32_t data)
|
|||
|
|
{
|
|||
|
|
LCD_Data_Mode_On;
|
|||
|
|
|
|||
|
|
SPI2_Write32Bits(data);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief LCD <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param pData: ָ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
|
* @param Count: <EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void LCD_SendDataBytes(uint8_t *pData, uint32_t Count)
|
|||
|
|
{
|
|||
|
|
LCD_Data_Mode_On;
|
|||
|
|
|
|||
|
|
SPI2_WriteBytes(pData, Count);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief LCD <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 8 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 8 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param cmd: 8 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param data: 8 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void LCD_SendCmdData8Bits(uint8_t cmd, uint8_t data)
|
|||
|
|
{
|
|||
|
|
LCD_SendCmd(cmd);
|
|||
|
|
LCD_SendData8Bits(data);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief LCD <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 8 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 16 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param cmd: 8 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param data: 16 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void LCD_SendCmdData16Bits(uint8_t cmd, uint16_t data)
|
|||
|
|
{
|
|||
|
|
LCD_SendCmd(cmd);
|
|||
|
|
LCD_SendData16Bits(data);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief LCD <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 8 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 32 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param cmd: 8 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param data: 32 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void LCD_SendCmdData32Bits(uint8_t cmd, uint32_t data)
|
|||
|
|
{
|
|||
|
|
LCD_SendCmd(cmd);
|
|||
|
|
LCD_SendData32Bits(data);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief LCD <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 8 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param cmd: 8 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param pData: ָ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
|
* @param Count: <EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void LCD_SendCmdDataBytes(uint8_t cmd, uint8_t *pData, uint32_t Count)
|
|||
|
|
{
|
|||
|
|
LCD_SendCmd(cmd);
|
|||
|
|
LCD_SendDataBytes(pData, Count);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief LCD <EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void LCD_Init(void)
|
|||
|
|
{
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC> ILI9431
|
|||
|
|
GPIO_B0_B1_B12_Init(); //<2F><>ʼ<EFBFBD><CABC> PB0 PB1 PB12
|
|||
|
|
|
|||
|
|
LCD_Stop_Send;
|
|||
|
|
LCD_Data_Mode_On;
|
|||
|
|
LCD_BLK_On; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
SPI2_Init(); //<2F><>ʼ<EFBFBD><CABC> SPI2
|
|||
|
|
SPI2_SetSpeed(SPI_BAUDRATEPRESCALER_4); //<2F><><EFBFBD><EFBFBD> SPI2 <20>ٶ<EFBFBD>
|
|||
|
|
|
|||
|
|
LCD_Start_Send; //Ƭѡ CS λ<><CEBB> 0<><30><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
LCD_SendCmd(LCD_CMD_SWRESET); //<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˯<EFBFBD><CBAF>ģʽ
|
|||
|
|
Delay_ms(50);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD> B
|
|||
|
|
uint8_t pwctrlb_param[3] = {0x00, 0xd9, 0x30};
|
|||
|
|
LCD_SendCmdDataBytes(LCD_CMD_PWCTRLB, pwctrlb_param, 3);
|
|||
|
|
|
|||
|
|
LCD_SendCmdData32Bits(LCD_CMD_PWOSCTRL, 0x64031281); //<2F><>Դ<EFBFBD><D4B4><EFBFBD>п<EFBFBD><D0BF><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> A
|
|||
|
|
uint8_t dtctrla_param[3] = {0x85, 0x10, 0x78};
|
|||
|
|
LCD_SendCmdDataBytes(LCD_CMD_DTCTRLA, dtctrla_param, 3);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD> A
|
|||
|
|
uint8_t pwctrla_param[5] = {0x39, 0x2c, 0x00, 0x34, 0x02};
|
|||
|
|
LCD_SendCmdDataBytes(LCD_CMD_PWCTRLA, pwctrla_param, 5);
|
|||
|
|
|
|||
|
|
LCD_SendCmdData8Bits(LCD_CMD_PRCRTL, 0x20); //<2F>ñȿ<C3B1><C8BF><EFBFBD>
|
|||
|
|
|
|||
|
|
LCD_SendCmdData16Bits(LCD_CMD_DTCTRLB, 0x0000); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> B
|
|||
|
|
|
|||
|
|
LCD_SendCmdData8Bits(LCD_CMD_PWCTRL1, 0x21); //<2F><><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD> 1
|
|||
|
|
|
|||
|
|
LCD_SendCmdData8Bits(LCD_CMD_PWCTRL2, 0x12); //<2F><><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD> 2
|
|||
|
|
|
|||
|
|
LCD_SendCmdData16Bits(LCD_CMD_VMCTRL1, 0x323c); //VCOM <20><><EFBFBD><EFBFBD> 1
|
|||
|
|
|
|||
|
|
LCD_SendCmdData8Bits(LCD_CMD_VMCTRL2, 0xc1); //VCOM <20><><EFBFBD><EFBFBD> 2
|
|||
|
|
|
|||
|
|
LCD_SendCmdData8Bits(LCD_CMD_MADCTL, LCD_CMD_MADCTL_PARAM); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʿ<EFBFBD><CABF>ƣ<EFBFBD><C6A3>趨Ϊ<E8B6A8><CEAA><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
LCD_SendCmdData8Bits(LCD_CMD_PIXSET, 0x55); //<2F><><EFBFBD>ظ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
LCD_SendCmdData16Bits(LCD_CMD_FRMCTR1, 0x0018); //֡<><D6A1><EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
|
|||
|
|
|
|||
|
|
LCD_SendCmdData16Bits(LCD_CMD_DISCTRL, 0x0aa2); //<2F><>ʾ<EFBFBD><CABE><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD>
|
|||
|
|
|
|||
|
|
LCD_SendCmdData8Bits(LCD_CMD_EN3G, 0x00); //ʹ<><CAB9> 3G
|
|||
|
|
|
|||
|
|
LCD_SendCmdData8Bits(LCD_CMD_GAMSET, 0x01); //٤<><D9A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>٤<EFBFBD><D9A4>У
|
|||
|
|
uint8_t pgamctrl_param[15] = {0x0f, 0x20, 0x1e, 0x09, 0x12, 0x0b, 0x50, 0xba, 0x44, 0x09, 0x14, 0x05, 0x23, 0x21, 0x00};
|
|||
|
|
LCD_SendCmdDataBytes(LCD_CMD_PGAMCTRL, pgamctrl_param, 15);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>٤<EFBFBD><D9A4>У
|
|||
|
|
uint8_t ngamctrl_param[15] = {0x00, 0x19, 0x19, 0x00, 0x12, 0x07, 0x2d, 0x28, 0x3f, 0x02, 0x0a, 0x08, 0x25, 0x2d, 0x0f};
|
|||
|
|
LCD_SendCmdDataBytes(LCD_CMD_NGAMCTRL, ngamctrl_param, 15);
|
|||
|
|
|
|||
|
|
LCD_SendCmd(LCD_CMD_SLPOUT); //<2F>˳<EFBFBD>˯<EFBFBD><CBAF>ģʽ
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>˯<EFBFBD><CBAF>ģʽ<C4A3><CABD><EFBFBD>ĵȴ<C4B5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ֿ<EFBFBD>
|
|||
|
|
uint8_t font_temp[8];
|
|||
|
|
LCD_Font_ReadAddr(font_temp, 0x00000000, 8); //<2F>Զ<EFBFBD> 8 <20>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD> ILI9431 <20>ֲᣬ<D6B2><E1A3AC><EFBFBD><EFBFBD> LCD_CMD_SLPOUT <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD> 120ms<6D><73>ʵ<EFBFBD><CAB5>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD>
|
|||
|
|
// Delay_ms(120);
|
|||
|
|
|
|||
|
|
LCD_Disp_On; //<2F><><EFBFBD><EFBFBD>ʾ
|
|||
|
|
|
|||
|
|
LCD_SetWin(0, 0, LCD_WIDTH, LCD_HEIGHT);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief LCD <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param x: 0~319
|
|||
|
|
* @param y: 0~239<EFBFBD><EFBFBD>x y Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param width: <EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
|
|||
|
|
* @param height: <EFBFBD><EFBFBD><EFBFBD>ڸ߶ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
|
|||
|
|
*/
|
|||
|
|
void LCD_SetWin(uint16_t x, uint16_t y, uint16_t width, uint16_t height)
|
|||
|
|
{
|
|||
|
|
LCD_SendCmdData32Bits(LCD_CMD_CASET, (x << 16) | (x + width - 1));
|
|||
|
|
LCD_SendCmdData32Bits(LCD_CMD_PASET, (y << 16) | (y + height - 1));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief LCD <EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
|
* @param pData: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
|
* @param addr: 16 λ<EFBFBD><EFBFBD>ַ
|
|||
|
|
* @param Count: <EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void LCD_Font_ReadAddr(uint8_t *pData, uint32_t addr, uint16_t Count)
|
|||
|
|
{
|
|||
|
|
LCD_Font_Start_Send; //CS <20><> 1<><31><EFBFBD><EFBFBD>ʱ<EFBFBD>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD> ILI9431
|
|||
|
|
|
|||
|
|
SPI2_Write32Bits(LCD_FONT_CMD_RDADDR << 24 | addr);
|
|||
|
|
SPI2_ReadBytes(pData, Count);
|
|||
|
|
|
|||
|
|
LCD_Font_Stop_Send;
|
|||
|
|
}
|