IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 独木带你玩转彩屏——应用1驱动彩屏(寄存器spi版) -> 正文阅读

[嵌入式]独木带你玩转彩屏——应用1驱动彩屏(寄存器spi版)

SPI驱动彩屏
笔者最近画了个嘉立创的紫色版,上面布有彩屏模块,不得不说嘉立创紫真的很nice!
是不是很cool
言归正传,笔者曾经在学长#巨大的八爪鱼# 帮助下写过一篇FSMC驱动彩屏的文章,但是笔者并没有玩转彩屏,所以这次要出系列彩屏文章,形成一个完整的彩屏项目

STM32F103VET6驱动彩屏TFT2.8(ili9341)HAL库+标准库

可是!
之前买的那块微雪彩屏价格直逼one hundred yuans,
笔者果断放弃,不用FSMC驱动,找个便宜的裸屏

在这里插入图片描述
点击! 笔者购买的彩屏连接,便宜,还给你教程

言归正传 ,这次是真的!

1. 驱动彩屏

彩屏对应引脚
彩屏引脚
TFT_CSPA4
TFT_RESPE13
D/RPE8
SPI1_MOSIPA7
SPI1_MISOPA6
SPI1_SCKPA5
TFT_LED+3.3V
SPI3_MOSIPB5:
SPI3_MISOPB4
:SPI3_SCK:PB3:
T_CSPA15
T_IRQ:PE10-:
注!TFT_LED引脚我直接接到一个按键上,用按键控制背光灯

1.1 初始化引脚

//打开需要用到的功能,配置输入输出模式
 RCC->APB2ENR =RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USART1EN | RCC_APB2ENR_IOPEEN | RCC_APB2ENR_SPI1EN | RCC_APB2ENR_TIM1EN ;
  
  GPIOA->CRH = (GPIOA->CRH  & 0XFFFFF00F) | 0X4B0;
  
  GPIOE->CRH = (GPIOE->CRH & 0X00F00F0F) | 0X44037030;
//spi初始化配置
void SPI1_Init(void)	
{
	    /* SPI初始化 */
  GPIOA->CRL = (GPIOA->CRL & 0X0000FFFF) | 0Xb4bb0000;//spi引脚配置
  
  SPI1->CR1 = SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_MSTR | SPI_CR1_SPE; 
}
void LCD_GPIOInit(void)
{
 
 //推挽输出   RES/DR配置
  GPIOE->CRH = (GPIOE->CRH & 0XFF0FFFF0) | 0X300003;

}
注!初始化引脚的内容就不罗嗦了
//低电平复位
void LCD_RESET(void)
{
	LCD_RST_CLR;
	delay_ms(100);	
	LCD_RST_SET;
	delay_ms(100);
}

1.2 初始化彩屏

 void LCD_Init(void)
{  
	SPI1_Init(); //硬件SPI1初始化
	LCD_GPIOInit();//LCD GPIO初始化										 
 	LCD_RESET(); //LCD 复位

 // LCD_WR_REG(0X01); 软件res
  // Power control B
  LCD_WR_REG (0xcf);
  LCD_WR_DATA (0x00);
  LCD_WR_DATA (0x81);
  LCD_WR_DATA ( 0x30);
  
  // Power on sequence control
  LCD_WR_REG (0xed);
  LCD_WR_DATA ( 0x64);
  LCD_WR_DATA ( 0x03);
  LCD_WR_DATA (0x12);
  LCD_WR_DATA ( 0x81);
  
  // Driver timing control A
  LCD_WR_REG (0xe8);
  LCD_WR_DATA (0x85);
  LCD_WR_DATA (0x10);
  LCD_WR_DATA (0x78);
  
  // Power control A
  LCD_WR_REG ( 0xcb);
  LCD_WR_DATA ( 0x39);
  LCD_WR_DATA (0x2c);
  LCD_WR_DATA (0x00);
  LCD_WR_DATA (0x34);
  LCD_WR_DATA ( 0x02);
  
  // Pump ratio control
  LCD_WR_REG (0xf7);
  LCD_WR_DATA(0x20);
  
  // Driver timing control B
  LCD_WR_REG ( 0xea);
  LCD_WR_DATA ( 0x00);
  LCD_WR_DATA ( 0x00);
  
  // Frame Rate Control (In Normal Mode/Full Colors)
  LCD_WR_REG ( 0xb1);
  LCD_WR_DATA ( 0x00);
  LCD_WR_DATA ( 0x1b);
  
  // Display Function Control
  LCD_WR_REG ( 0xb6);
  LCD_WR_DATA ( 0x0a);
  LCD_WR_DATA ( 0xa2);
  
  // Power Control 1
  LCD_WR_REG ( 0xc0);
  LCD_WR_DATA ( 0x35);
  
  // Power Control 2
  LCD_WR_REG ( 0xc1);
  LCD_WR_DATA ( 0x11);
  
  // VCOM Control 1
  LCD_WR_REG ( 0xc5);
  LCD_WR_DATA ( 0x45);
  LCD_WR_DATA ( 0x45);
  
  // VCOM Control 2
  LCD_WR_REG ( 0xc7);
  LCD_WR_DATA ( 0xa2);
  
  // Enable 3G
  LCD_WR_REG ( 0xf2);
  LCD_WR_DATA ( 0x00);
  
  // Gamma Set
  LCD_WR_REG ( 0x26);
  LCD_WR_DATA ( 0x01);
  
  // Positive Gamma Correction
  LCD_WR_REG ( 0xe0);
  LCD_WR_DATA ( 0x0f);
  LCD_WR_DATA ( 0x26);
  LCD_WR_DATA ( 0x24);
  LCD_WR_DATA ( 0x0b);
  LCD_WR_DATA ( 0x0e);
  LCD_WR_DATA ( 0x09);
  LCD_WR_DATA ( 0x54);
  LCD_WR_DATA ( 0xa8);
  LCD_WR_DATA ( 0x46);
  LCD_WR_DATA ( 0x0c);
  LCD_WR_DATA ( 0x17);
  LCD_WR_DATA ( 0x09);
  LCD_WR_DATA ( 0x0f);
  LCD_WR_DATA ( 0x07);
  LCD_WR_DATA ( 0x00);
  
  // Negative Gamma Correction
  LCD_WR_REG ( 0xe1);
  LCD_WR_DATA ( 0x00);
  LCD_WR_DATA ( 0x19);
  LCD_WR_DATA ( 0x1b);
  LCD_WR_DATA ( 0x04);
  LCD_WR_DATA ( 0x10);
  LCD_WR_DATA ( 0x07);
  LCD_WR_DATA ( 0x2a);
  LCD_WR_DATA ( 0x47);
  LCD_WR_DATA ( 0x39);
  LCD_WR_DATA ( 0x03);
  LCD_WR_DATA ( 0x06);
  LCD_WR_DATA ( 0x06);
  LCD_WR_DATA ( 0x30);
  LCD_WR_DATA ( 0x38);
  LCD_WR_DATA ( 0x0f);
  
  // Pixel Format Set
  LCD_WR_REG ( 0x3a);
  LCD_WR_DATA ( 0x55);
  
  // Sleep Out
  LCD_WR_REG ( 0x11);
  delay_ms(120);
  
//  ILI9341_SetScanDirection(0); // 设置扫描方向
  LCD_WR_REG ( 0x29); // 允许显示显存中的图像 (后面还需要打开背光才能开显示)
 
 
  LCD_direction(USE_HORIZONTAL);//设置LCD显示方向
	
	LCD_Clear(WRITE);//清全屏白色
}

上面的初始化的命令和数据都是根据ILI9341手册上写的,如下图
在这里插入图片描述

Power control B 对应着手册上的Command cfh ,后面的数据就是对应下面的三个参数分别为 0X00 0X81 0X30
在这里插入图片描述

运行代码,现在应该是 白色了,但是我们无法确定是否真的驱动成功,所以下面我们就要对屏幕进行涂色

2. 彩屏涂色

//这段代码是卖家给出的清屏代码,函数详细我再下面代码中注释了
void LCD_Clear(u16 Color)
{
  unsigned int i,m;  
  /*这个函数是设置显示图框,显示的横纵坐标起点和终点*/
	LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);   
	LCD_CS_CLR;//将spi的cs拉低
	LCD_RS_SET;//rs置一
	for(i=0;i<lcddev.height;i++)//for循环遍历像素点
	{
    for(m=0;m<lcddev.width;m++)
    {	
			Lcd_WriteData_16Bit(Color);//将颜色数据写进去,显示在每个像素点
		}
	}
	 LCD_CS_SET;//拉高 数据发送完毕
} 

涂色,发现彩屏并不是所有像素点都显示了红色,有三横的像素点显示不正常
回到初始化彩屏代码,其中的sleep out 命令#退出低功耗模式,下面有个120ms的延时, 笔者将延时去掉
结果如上图更多横的像素点没有被涂色
所以将延时改到150ms,像素点显示正常,笔者将其定义为,彩屏未完全睡醒
注:sleep out 初始化时必须要有的不然屏幕就是一直处于低功耗状态,一直为白屏,有兴趣的朋友可以尝试通过按键来切换彩屏的状态

在这里插入图片描述

3. 结果展示

测试展示图
嘿嘿!先来看看结果视频

4. 获取资源

【获取资源】

1.资源链接:点击获取
2.关注微信公众号后台回复:SPI驱动彩屏

【注意】

资源中有彩屏文字显示测试、图片显示测试、还有图形显示测试。

后续笔者将更新彩屏文字显示等应用的文章
【关注微信公众号一起来交流】

·

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 11:11:07  更:2021-09-05 11:11:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:35:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码