基于stm32物联网开发板(2)--LCD屏幕

这篇具有很好参考价值的文章主要介绍了基于stm32物联网开发板(2)--LCD屏幕。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于stm32物联网开发板(2)–LCD屏幕

  • LCD应用展示:

LCD屏幕应用


基于stm32物联网开发板(2)--LCD屏幕

1.概述

  • 屏幕尺寸为1.3寸,分辨率240*240,颜色格式RGB565,驱动IC:ST7789VW;
  • 超大可视角度:大于160°(显示屏中可视角度最大的一种屏幕);
  • 宽电压供电(3V~5V),兼容3.3V和5V电平逻辑,无需电平转换芯片;
  • 采用7线制SPI接口;
  • 工作温度范围为工业级(-20℃~60℃);
  • 军工级工艺标准,长期稳定工作;

基于stm32物联网开发板(2)--LCD屏幕

  • 硬件接口:
引脚 说明
LEDK PB0背光
CS PA4片选
SCL PA5 时钟
SDA PA7主机输出
RES PB1 复位脚(电平复位)
D/C PC4 数据命令选择脚

2.通讯协议

  ST7789VW是一款用于262K彩色图形型TFT-LCD的单片机控制器/驱动器。它由720个源极线和320个栅极线驱动电路组成。该芯片能够直接连接到外部微处理器,并接受8位/9位/16位/18位并行接口。显示数据可以存储在240x320x18位的片上显示数据RAM。它可以执行显示数据RAM读/写操作,无需外部操作时钟,以最大限度地减少功耗。此外,由于集成电源驱动液晶所必需的电路;可以制造具有最少部件的显示系统。

2.1 SPI接口时序

  本次LCD屏幕采用SPI时序驱动,时序图如下:
基于stm32物联网开发板(2)--LCD屏幕
  上升沿采样数据,下降沿发送数据。
  4线串行接口包括串行时钟SCLK,串行数据SDIN,数据命令选择D/C,片选CS。

u8 SPI_WriteReadByte(u8 dat_tx)
{
	u8 data_rx=0;
	SPI_CLK=0;//空闲电平为低电平
	for(i=0;i<8;i++)
	{
		SPI_CLK=0;//开始发送数据(主机和从机都发送数据)
		if(dat_tx&0x80)SPI_MOSI=1;
		else SPI_MOSI=0;
		SPI_CLK=1;//数据发送完成,开始读取数据
		dat_tx<<=1;//准备发送下一位数据
		//0x23--- 0010 0011
		data_rx<<=1;//默认读取到的数据为0
		if(SPI_MISO)data_rx=data_rx|0x01;
	}
	SPI_CLK=0;//空闲电平为低电平
	return data_rx;
}

2.2 硬件SPI配置

基于stm32物联网开发板(2)--LCD屏幕
基于stm32物联网开发板(2)--LCD屏幕

uint8_t SPI1_WROneByte(uint8_t data)
{
  HAL_SPI_Transmit(&hspi1,&data,1,100);
	return 0;
}

关于SPI硬件配置详细介绍参考:STM32 SPI硬件配置

2.2 写数据和写命令

  当采用SPI接口驱动时,D/C引脚作为数据命令选择脚,D/C=0时读写命令,D/C=1时读写数据。

/************************************************************
函数说明:LCD写入数据
入口数据:dat 写入的数据
返回值:  无
**************************************************************/
void LCD_WR_DATA(u16 dat)
{
    OLED_CS(0);
	OLED_DC_Set();//写数据
	LCD_Writ_Bus(dat>>8);
	LCD_Writ_Bus(dat);
    OLED_CS(1);
}

/****************************************************
函数说明:LCD写入命令
入口数据:dat 写入的命令
返回值:  无
*****************************************************/
void LCD_WR_REG(u8 dat)
{
    OLED_CS(0);
	OLED_DC_Clr();//写命令
	LCD_Writ_Bus(dat);
    OLED_CS(1);
}

3.常用命令介绍

  (1)设置屏幕扫描方向0x36
基于stm32物联网开发板(2)--LCD屏幕

  • 参数说明:
    基于stm32物联网开发板(2)--LCD屏幕
      (2)设置列(Column)地址0x2A

  0x2A指令用于设置列的起始地址和结束地址,XS<=XE。
基于stm32物联网开发板(2)--LCD屏幕
  (3)设置行(ROW)地址0x2B

  0x2B指令用于设置行的起始地址和结束地址,YS<=YE。
基于stm32物联网开发板(2)--LCD屏幕
  (4)写GRAM指令0x2C
  此命令用于将数据从MCU传输到帧存储器。接受此命令后,列寄存器和页寄存器将重置为起始列/起始页面位置。起始列/起始页的位置根据MADCTL设置而不同。发送任何其他命令都可以停止帧写入。
基于stm32物联网开发板(2)--LCD屏幕

4.ST7789驱动序列

void Lcd_Init(void)
{
	OLED_RST_Clr();
	Delay_Ms(200);
	OLED_RST_Set();
	Delay_Ms(20);  
  //************* Start Initial Sequence **********// 
  LCD_WR_REG(0x36);
  if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x00);//横屏
  else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC0);//横屏
  else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x70);//竖屏
  else LCD_WR_DATA8(0xA0);//竖屏

  LCD_WR_REG(0x3A); 
  LCD_WR_DATA8(0x05);

  LCD_WR_REG(0xB2);
  LCD_WR_DATA8(0x0C);
  LCD_WR_DATA8(0x0C);
  LCD_WR_DATA8(0x00);
  LCD_WR_DATA8(0x33);
  LCD_WR_DATA8(0x33); 

  LCD_WR_REG(0xB7); 
  LCD_WR_DATA8(0x35);  

  LCD_WR_REG(0xBB);
  LCD_WR_DATA8(0x19);

  LCD_WR_REG(0xC0);
  LCD_WR_DATA8(0x2C);

  LCD_WR_REG(0xC2);
  LCD_WR_DATA8(0x01);

  LCD_WR_REG(0xC3);
  LCD_WR_DATA8(0x12);   

  LCD_WR_REG(0xC4);
  LCD_WR_DATA8(0x20);  

  LCD_WR_REG(0xC6); 
  LCD_WR_DATA8(0x0F);    

  LCD_WR_REG(0xD0); 
  LCD_WR_DATA8(0xA4);
  LCD_WR_DATA8(0xA1);

  LCD_WR_REG(0xE0);
  LCD_WR_DATA8(0xD0);
  LCD_WR_DATA8(0x04);
  LCD_WR_DATA8(0x0D);
  LCD_WR_DATA8(0x11);
  LCD_WR_DATA8(0x13);
  LCD_WR_DATA8(0x2B);
  LCD_WR_DATA8(0x3F);
  LCD_WR_DATA8(0x54);
  LCD_WR_DATA8(0x4C);
  LCD_WR_DATA8(0x18);
  LCD_WR_DATA8(0x0D);
  LCD_WR_DATA8(0x0B);
  LCD_WR_DATA8(0x1F);
  LCD_WR_DATA8(0x23);

  LCD_WR_REG(0xE1);
  LCD_WR_DATA8(0xD0);
  LCD_WR_DATA8(0x04);
  LCD_WR_DATA8(0x0C);
  LCD_WR_DATA8(0x11);
  LCD_WR_DATA8(0x13);
  LCD_WR_DATA8(0x2C);
  LCD_WR_DATA8(0x3F);
  LCD_WR_DATA8(0x44);
  LCD_WR_DATA8(0x51);
  LCD_WR_DATA8(0x2F);
  LCD_WR_DATA8(0x1F);
  LCD_WR_DATA8(0x1F);
  LCD_WR_DATA8(0x20);
  LCD_WR_DATA8(0x23);
  LCD_WR_REG(0x21); 
  LCD_WR_REG(0x11); 
  LCD_WR_REG(0x29);//开启显示 
  LCD_Clear(WHITE);//清屏
  OLED_BLK_Set();//开背光 
} 

5.LCD屏示例

5.1 横竖屏配置示例

  要实现屏幕横屏和竖屏效果,可设置屏幕扫描方向寄存器0x36。文章来源地址https://www.toymoban.com/news/detail-444434.html

#define USE_HORIZONTAL 0  //设置横屏或者竖屏显示 0或1为竖屏 2或3为横屏
/******************************************************************************
函数说明:设置起始和结束地址
入口数据:x1,x2 设置列的起始和结束地址
          y1,y2 设置行的起始和结束地址
返回值:  无
******************************************************************************/
void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2)
{
	if(USE_HORIZONTAL==0)
	{
		LCD_WR_REG(0x2a);//列地址设置
		LCD_WR_DATA(x1);
		LCD_WR_DATA(x2);
		LCD_WR_REG(0x2b);//行地址设置
		LCD_WR_DATA(y1);
		LCD_WR_DATA(y2);
		LCD_WR_REG(0x2c);//储存器写
	}
	else if(USE_HORIZONTAL==1)
	{
		LCD_WR_REG(0x2a);//列地址设置
		LCD_WR_DATA(x1);
		LCD_WR_DATA(x2);
		LCD_WR_REG(0x2b);//行地址设置
		LCD_WR_DATA(y1+80);
		LCD_WR_DATA(y2+80);
		LCD_WR_REG(0x2c);//储存器写
	}
	else if(USE_HORIZONTAL==2)
	{
		LCD_WR_REG(0x2a);//列地址设置
		LCD_WR_DATA(x1);
		LCD_WR_DATA(x2);
		LCD_WR_REG(0x2b);//行地址设置
		LCD_WR_DATA(y1);
		LCD_WR_DATA(y2);
		LCD_WR_REG(0x2c);//储存器写
	}
	else
	{
		LCD_WR_REG(0x2a);//列地址设置
		LCD_WR_DATA(x1+80);
		LCD_WR_DATA(x2+80);
		LCD_WR_REG(0x2b);//行地址设置
		LCD_WR_DATA(y1);
		LCD_WR_DATA(y2);
		LCD_WR_REG(0x2c);//储存器写
	}
}

5.2 图片显示

/******************************************************************************
函数说明:显示图片
入口数据:x1,y1    起点坐标
          width,height --图片宽高
          bmp --要显示的图片内容
返回值:  无
******************************************************************************/
void LCD_ShowPicture(u16 x1,u16 y1,u16 width,u16 height,u8*bmp)
{
    int i;
    LCD_WR_REG(0x2a);//列地址设置
    LCD_WR_DATA(x1);
    LCD_WR_DATA(x1+width-1);
		LCD_WR_REG(0x2b);//行地址设置
		LCD_WR_DATA(y1);
    LCD_WR_DATA(y1+height-1);
		LCD_WR_REG(0x2c);//储存器写
		for(i=0;i<width*height;i++)
	  { 	
			LCD_WR_DATA8(bmp[i*2]);	 
			LCD_WR_DATA8(bmp[i*2+1]);			
	  }
    LCD_WR_REG(0x2a);//列地址设置	
		LCD_WR_DATA(0);
    LCD_WR_DATA(LCD_W);
    LCD_WR_REG(0x2b);//行地址设置
    LCD_WR_DATA(0);
    LCD_WR_DATA(LCD_H);
}

到了这里,关于基于stm32物联网开发板(2)--LCD屏幕的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32 hal库硬件spi(软件spi)驱动1.8寸tft—lcd屏幕

    屏幕是嵌入式开发中的一个重要的部分,cdsn上有许多解释原理的,还有很多是采用正点原子的屏幕来驱动的,对于刚刚入门不久的我们可能没有资金去购买较为昂贵的屏幕。而对于底层原理我们暂时也不必了解的那么深入,能点亮屏幕就是我们最大的快乐。 除了中景园的资

    2024年02月03日
    浏览(38)
  • 基于stm32物联网开发板(1)

      本开发板采用了STM32F103RET6作为核心CPU,72MHZ工作频率,512KB flash,64KB Sram。本开发平台外设模块有ESP8266 WIFI模块、1.3寸LCD彩屏、SYN6288语音模块、MAX30102心率血氧传感器、AD8232心电图监测模块、BH1750环境光传感器、RGB全彩灯和3个按键。本开发平台支持串口自动下载电路和

    2024年02月03日
    浏览(25)
  • 【STM32CubeIDE】STM32F103硬件SPI驱动1.8寸TFT LCD128X160 ST7735S屏幕

    ✨虽然STM32CubeIDE也是基于HAL库,但是还是不能直接转Keil MDK工程,本驱动案例从GitHub下载来的,原始工程使用的是较老版本的STM32CubeIDE配置的,没法在继续在新版本上程序配置,工程只是做了初始化配置。程序并不能直接被点亮,重新配置了lcd初始化函数以及复位函数后,才

    2024年02月12日
    浏览(26)
  • 【STM32】STM32F411RET6(NUCLEO)开发板基于HAL库创建工程模板及屏幕驱动

    驱动单色0.96英寸七针OLED 显示屏 串口调试等功能 本文如题采用STM32F411RET6(NUCLEO)开发板如图所示。 开发环境使用MDK(keil5)和STM32CubeMX,不了解的同学可以去百度一下。 首先选择对应的开发板型号,然后进入图形化配置界面。 第一步是时钟配置,每个板子在不考虑功耗的情况下

    2024年02月09日
    浏览(30)
  • 单片机:STM32F4x HAL库软硬SPI驱动ST7735s 1.8寸LCD屏幕

    说明:此篇为学习记录。可能存在错误或者不足。如有问题请指出。 主控芯片:STM32F411CEU6 主控开发板:WeAct STM32F411CEU6最小系统板 TFT-LCD屏幕:合宙1.8寸TFT-LCD,驱动为ST7735s MDK版本:5,32 HAL库版本:1.27.1 STM32CubeMX版本:6.7.0 ST7735s支持8080并口,3线和4线串行接口,模块的驱动方

    2024年02月03日
    浏览(45)
  • 基于stm32物联网开发板(3)--SYN6288语音模块

    SYN6288语音模块   SYN6288-A语音合成模块是一款性价比更高,效果更自然的一款中高端语音合技术 。 SYN6288-A通过异步串口接收待合成的文本,实现文本到声音(TTS)的转换。   国内首款语音合成评估板SYN6288-A的推出继承了OSYNO6188-A模块的优秀特点:最小体积,硬件接口简单

    2024年02月16日
    浏览(27)
  • STM32基于CubeIDE和HAL库 基础入门学习笔记:物联网项目开发流程和思路

    文章目录: 第一部分:项目开始前的计划与准备 1.项目策划和开发规范  1.1 项目要求文档 1.2 技术实现文档 1.3 开发规范 2.创建项目工程与日志 第二部分:调通硬件电路与驱动程序 第三部分:编写最基础的应用程序 第四部分:完成最终要求、反复调试 第五部分:程序优化、

    2024年02月13日
    浏览(29)
  • 嵌入式linux物联网毕业设计项目智能语音识别基于stm32mp157开发板

    stm32mp157开发板FS-MP1A是华清远见自主研发的一款高品质、高性价比的Linux+单片机二合一的嵌入式教学级开发板。开发板搭载ST的STM32MP157高性能微处理器,集成2个Cortex-A7核和1个Cortex-M4 核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRTOS、RT-Thread等实时操作系统。开发板搭配仿真

    2024年02月02日
    浏览(54)
  • STM32CubeIDE开发(十九),结合图片取模工具,stm32程序在LCD显示图片

    目录 一、图片取模工具(imag2lcd) 二、 工程设计 三、图片显示实现过程 四、编译及下载         我们前面将汉字显示时说过,嵌入式LCD屏显示就是通过LCD屏幕数据接口给每个屏幕像素给出一个颜色值实现实时渲染显示出来。只不过文字显示时,给出的是一个二进制点阵

    2024年02月16日
    浏览(26)
  • STM32MP157驱动开发——Linux LCD驱动(上)

      LCD 是很常用的一个外设,通过 LCD 可以显示图片、界面UI等,提高人机交互的效率。STM32MP1 提供了一个 LTDC 接口用于连接 RGB 接口的液晶屏。本节就来学习如何使用这个接口。   LCD 全称是 Liquid Crystal Display,也就是液晶显示器,是现在最常用到的显示器。网上对于 LCD

    2024年02月08日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包