显示效果
环境
1.PHY6222开发板
2.SDK3.1.1----example\ble_peripheral\lcd_demo
3.硬件接线
#define PIN_LCD_BL_EN GPIO_P02//背光
#define PIN_LCD_SPI_SCS GPIO_P23//片选
#define PIN_LCD_RST GPIO_P24//复位
#define PIN_LCD_RS GPIO_P25//数据、命令
#define PIN_LCD_SPI_SDO GPIO_P32//MOSI
#define PIN_LCD_SPI_SDI GPIO_P01//MISO
#define PIN_LCD_SPI_SCK GPIO_P34//时钟
SPI初始化
void reg_spi_init(hal_spi_t* spi_ptr,uint32 speed, GPIO_Pin_e sck_pin,GPIO_Pin_e ssn_pin,GPIO_Pin_e miso_pin,GPIO_Pin_e mosi_pin, SPI_SCMOD_e scmod,SPI_TMOD_e tmod)
{
hal_clk_gate_enable((MODULE_e)(MOD_SPI0 + spi_ptr->spi_index));
hal_spi_pin_init(spi_ptr,sck_pin,ssn_pin,miso_pin,mosi_pin);
hal_spi_master_init(spi_ptr,speed,scmod, tmod);
spi_int_disable(spi_ptr);
}
ST7789初始化
//背光上拉输出,写0保持
#define LCD_BL_INIT() \
do { \
hal_gpio_pin_init(PIN_LCD_BL_EN, GPIO_OUTPUT); \
hal_gpio_pull_set(PIN_LCD_BL_EN, STRONG_PULL_UP); \
hal_gpio_write(PIN_LCD_BL_EN,0);\
hal_gpioretention_register(PIN_LCD_BL_EN);\
} while (0)
//数据,命令脚上拉输出,写1保持
#define LCD_RS_INIT() \
do { \
hal_gpio_cfg_analog_io(PIN_LCD_RS,Bit_DISABLE); \
hal_gpio_pin_init(PIN_LCD_RS, GPIO_OUTPUT); \
hal_gpio_pull_set(PIN_LCD_RS, STRONG_PULL_UP); \
hal_gpio_fast_write(PIN_LCD_RS,1); \
hal_gpioretention_register(PIN_LCD_RS);\
} while (0)
//复位脚上拉输出,写1保持
#define LCD_RST_INIT() \
do { \
hal_gpio_cfg_analog_io(PIN_LCD_RST,Bit_DISABLE); \
hal_gpio_pin_init(PIN_LCD_RST, GPIO_OUTPUT); \
hal_gpio_pull_set(PIN_LCD_RST, STRONG_PULL_UP); \
hal_gpio_fast_write(PIN_LCD_RST,1); \
hal_gpioretention_register(PIN_LCD_RST);\
}
//片选脚上拉输出,写1保持
#define LCD_SPI_CS_INIT() \
do { \
hal_gpio_cfg_analog_io(PIN_LCD_SPI_SCS,Bit_DISABLE); \
hal_gpio_pin_init(PIN_LCD_SPI_SCS, GPIO_OUTPUT); \
hal_gpio_pull_set(PIN_LCD_SPI_SCS, STRONG_PULL_UP); \
EFLASH_SPI_CS_INIT(); \
EFLASH_SPI_CS_HIGH(); \
hal_gpioretention_register(PIN_LCD_SPI_SCS);\
} while (0)
#define SW_SPI_SCL_SET_OUTPUT() hal_gpio_pin_init(PIN_LCD_SPI_SCK, GPIO_OUTPUT);
//软件SPI获取st7789ID
get_lcd_drv_id();
//初始化屏幕
static const unsigned char __attribute__((aligned (4))) init_cmd_hsd7789[] = {
0xFF, 0x36, // Send CMD 0x36
0xA0, // ºáÆÁ
0xFF, 0x3A,
0x05,
0xFF, 0xB2, // Send CMD 0xB2
0x0C, 0x0C, 0x00, 0x33, 0x33, // Send DATA 0x0c, 0x0c, 0x00, 0x33, 0x33
0xFF, 0xB7,
0x35,
0xFF, 0xBB,
0x19,
0xFF, 0xC0,
0x2c,
0xFF, 0xC2,
0x01,
0xFF, 0xC3,
0x12,
0xFF, 0xC4,
0x20,
0xFF, 0xC6,
0x0F,
0xFF, 0xD0,
0xA4, 0xA1,
0xFF, 0xE0,
0xD0,0x04,0x0D,0x11,0x13,0x2B,0x3F,0x54,0x4C,0x18,0x0D,0x0B,0x1F,0x23,
0xFF, 0xE1,
0xD0,0x04,0x0C,0x11,0x13,0x2C,0x3F,0x44,0x51,0x2F,0x1F,0x1F,0x20,0x23,
0xFF, 0x21,
0xFF, 0x11,
0xFF, 0x29,
};
显示图片文字
//打开st7789
static const unsigned char __attribute__((aligned (4))) on_cmd_hsd7789[] = {
0xff, 0x11,
//0xfe, 120,
0xff, 0x29,
//0xfe, 10,
};
//设置背景色
void lcd_fill_dat(uint8 x, uint8 y, uint8 w, uint8 h, uint16 dat)
{
uint32 len = w * h;
lcd_set_region(x, y, w, h);
LCD_SPI_CS_LOW();
write_color(dat,len);
LCD_SPI_CS_HIGH();
}
//显示图片
void LCD_ShowPicture(uint16 x1,uint16 y1,uint16 x2,uint16 y2)
{
int i;
lcd_set_region(x1,y1,x2,y2);
LCD_SPI_CS_LOW();
for(i=0;i<1600;i++)
{
wr_data(image[i*2+1]); //使用取模把图片放在一个数组
wr_data(image[i*2]);
}
delay_us(10);
LCD_SPI_CS_HIGH();
}