蓝牙BLE芯片PHY6222之SPI驱动ST7789

蓝牙BLE芯片PHY6222之SPI驱动ST7789

显示效果

在这里插入图片描述

环境

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();		
}

demo传送门

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值