使用STM32F103C8T6驱动0.96寸RGB IPS显示屏

笔者购买的是一款0.96寸的IPS显示屏,分辨率为160x80,驱动器IC为ST7735S,65k Colors, RGB 5,6,5-bit Input。 接口定义:

  • GND: 接地;
  • VCC: 3.3~5V电源正;
  • SCL: SPI时钟线;
  • SDA: SPI数据线;
  • RES: 重启线;
  • DC: SPI数据/命令选择线;
  • CS: 片选接口;
  • BLK: 被光控制,默认NC,低电平关闭背光。

本文介绍实现SPI通信协议来驱动显示屏,先给出代码:stm32f103c8-st7735s-lcd

0.96 RGB IPS Display

## SPI通信时序

参考ST7735S数据手册4线串行接口时序,SPI协议向ST7735S写数据流程是:

  1. 把CS片选线从高电平拉到低电平,使能芯片;
  2. 操作SDA,DC引脚为要写入的数据
  3. 在SCL时钟的上升沿时刻写入数据到芯片中;
  4. 重复以上2、3步骤直到各个位的数据写入到芯片;
  5. 把CS片选冲低电平拉升到高电平,停止通信。

时序如下图:

实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* @brief SPI协议写一个字节
* @param data 8位数据
* @retval None
*/
void writeBus(uint8_t data)
{
uint8_t i;
LCD_CS_CLR();
for(i=0; i<8; i++)
{
LCD_SCL_CLR();
if(data&0x80)
LCD_SDA_SET();
else
LCD_SDA_CLR();
LCD_SCL_SET();
data<<=1;
}
LCD_CS_SET();
}

运行效果


lcd.c中已经实现了一个显示字符串的函数void LCD_showString(uint16_t x, uint16_t y, char *p, uint16_t color);,x, y是字符串显示的左上像素坐标,*p为字符串,color为显示函数。实现方法是使用PCtoLCD2002取模软件对ASCII字符进行取模取模,取模的结果放到font.h文件中。

Junle's Blog

使用STM32F103C8T6驱动0.96寸RGB IPS显示屏

https://www.junle.org/使用STM32F103C8T6驱动0-96寸RGB-IPS显示屏/

作者

Junle

发布于

2020-05-03

更新于

2024-03-22

许可协议

评论