本章将讲述TFTLCD显示实验,小白总结,如有错误,请大神指教。

一、TFTLCD 简介

1.TFT-LCD 即薄膜晶体管液晶显示器。TFT-LCD具有:亮度好、对比度高、层次感强、颜色鲜艳等特点。是目前最主流的LCD显示器。广泛应用于各种电子产品。

注意:模块是3.3V供电的,不支持5V电压的MCU,如果是5VMCU,必须在信号线串接120欧的电阻使用。

2.2.8寸TFTLCD模块原理图如下:

图上的X-,Y-,Y+,X+应与XPT2046触摸屏相连,触摸屏原理图如下:

我们可能会用到的接口如下:

1.CS:TFTLCD 片选信号。

2.WR:向 TFTLCD 写入数据。

3.RD:从 TFTLCD 读取数据。

4.D[15:0](零到十五的意思):16 位双向数据线。

5.RST:硬复位 TFTLCD。

6.RS:命令/数据标志(0,读写命令;1,读写数据)。

7.BL_CTR:背光控制信号

8.触摸屏接口信号:T_MISO/T_MOSI/T_PEN/T_CS/T_CLK(这些看功能需要来决定,如不需要可不设置)。

3.TFTLCD模块的8080并口读/写的过程:

1.先根据要写入/读取的数据的类型,设置RS为高(数据)/低(命令),然后拉低片选,选中ILI9341,接着我们根据是读数据,还是要写数据置RD/WR为低,然后:

(1)读数据:在RD的上升沿,读取数据线上的数据;

(2)写数据:在WR的上升沿,使数据写入到ILI9341里面。

4.TFTLCD的驱动流程:

5.ILI9341 采用 RGB565 格式存储颜色数据:

R5:指有五个红色,G6:指有六个绿色,B5:指有五个蓝色,合在一起便是RGB565格式。

例如:0xf800即为纯红色。

6.指令简介:

(1)0xD3:是一个检测LCD型号的工具,由于可以检测型号,因此使得代码的可移植性增强。

(2)0x36:为存储访问控制指令,可以控制存储器的读写方向,实现GRAM自增方式,加大速度

(3)0x2A:在从左到右,从上到下的方式下面,设置x的坐标。

(4)0x2B:在从左到右,从上到下的方式下面,设置y的坐标。

(5)0x2C:设置颜色数据的。

(6)0x2E:读取显存,也就是大体颜色。

7.在硬件上,TFTLCD 模块与 MiniSTM32 开发板的IO口对应关系如下: 
 LCD_LED 对应 PC10; 
 LCD_CS 对应 PC9; 
 LCD _RS 对应 PC8; 
 LCD _WR 对应 PC7; 
 LCD _RD 对应 PC6; 
 LCD _D[17:1]对应 PB[15:0];

二、软件设计

1.先介绍一个lcd的重要结构体:

typedef struct
{ u16 width; //LCD 宽度 u16 height; //LCD 高度 u16 id; //LCD ID u8 dir; //横屏还是竖屏控制:0,竖屏;1,横屏。 u16 wramcmd; //开始写 gram 指令 u16 setxcmd; //设置 x 坐标指令 u16 setycmd; //设置 y 坐标指令
}_lcd_dev;
//LCD 参数
extern _lcd_dev lcddev; //管理 LCD 重要参数

2.写数据函数:

//写数据函数
#define LCD_WR_DATA(data){\
LCD_RS_SET;\
LCD_CS_CLR;\
DATAOUT(data);\
LCD_WR_CLR;\
LCD_WR_SET;\
LCD_CS_SET;\
}

3.写寄存器命令函数:

//写寄存器函数
//data:寄存器值
void LCD_WR_REG(u16 data)
{ LCD_RS_CLR;//写地址 LCD_CS_CLR; DATAOUT(data); LCD_WR_CLR; LCD_WR_SET; LCD_CS_SET;
}

4.读寄存器数据函数:

//读 LCD 寄存器数据
//返回值:读到的值
u16 LCD_RD_DATA(void)
{ u16 t; GPIOB->CRL=0X88888888; //PB0-7 上拉输入 GPIOB->CRH=0X88888888; //PB8-15 上拉输入 GPIOB->ODR=0X0000; //全部输出 0 LCD_RS_SET; LCD_CS_CLR; LCD_RD_CLR; //读取数据(读寄存器时,并不需要读 2 次) if(lcddev.id==0X8989)delay_us(2);//FOR 8989,延时 2us t=DATAIN; LCD_RD_SET; LCD_CS_SET; GPIOB->CRL=0X33333333; //PB0-7 上拉输出 GPIOB->CRH=0X33333333; //PB8-15 上拉输出 GPIOB->ODR=0XFFFF; //全部输出高 return t;
} 

5. LCD 寄存器操作的函数

//LCD_Reg:寄存器编号
//LCD_RegValue:要写入的值
void LCD_WriteReg(u16 LCD_Reg,u16 LCD_RegValue)
{ LCD_WR_REG(LCD_Reg); LCD_WR_DATA(LCD_RegValue);
}
//读寄存器
//LCD_Reg:寄存器编号
//返回值:读到的值
u16 LCD_ReadReg(u16 LCD_Reg)
{ LCD_WR_REG(LCD_Reg); //写入要读的寄存器号 return LCD_RD_DATA();
} 

6.设置光标函数:

//设置光标位置
//Xpos:横坐标
//Ypos:纵坐标
void LCD_SetCursor(u16 Xpos, u16 Ypos)
{ if(lcddev.id==0X9341||lcddev.id==0X5310) { LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA(Xpos>>8); LCD_WR_DATA(Xpos&0XFF); LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA(Ypos>>8); LCD_WR_DATA(Ypos&0XFF); }else if(lcddev.id==0X6804) { if(lcddev.dir==1)Xpos=lcddev.width-1-Xpos;//横屏时处理 LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA(Xpos>>8); LCD_WR_DATA(Xpos&0XFF); LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA(Ypos>>8); LCD_WR_DATA(Ypos&0XFF); }else if(lcddev.id==0X5510) { LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA(Xpos>>8); LCD_WR_REG(lcddev.setxcmd+1); LCD_WR_DATA(Xpos&0XFF); LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA(Ypos>>8); LCD_WR_REG(lcddev.setycmd+1); LCD_WR_DATA(Ypos&0XFF); }else { if(lcddev.dir==1)Xpos=lcddev.width-1-Xpos;//横屏其实就是调转 x,y 坐标 LCD_WriteReg(lcddev.setxcmd, Xpos); LCD_WriteReg(lcddev.setycmd, Ypos); }
}

由于实际代码过于多,可评论QQ,我把源文件发你,本人接撰写51和32的撰写代码的,可以私聊哇。

基于正点原子stm32的mini板的TFTLCD显示实验相关推荐

  1. STM32基于正点原子ALIENTEK探索者开发板的跑马灯实验

    一.首先我们来了解建立好的工程框架 1.USER 组USER下面主要存放的是用户代码. main.c是主函数 system_stm32f4xx.c文件是片上外设接入层系统文件,主要是申明设置系统及总线 ...

  2. STM32下载程序至SRAM——基于正点原子精英STM32F103ZET6开发板

    STM32下载程序至SRAM--基于正点原子精英STM32F103ZET6开发板 如题,由于STM32的FLASH烧写寿命在1万次左右,对于本人这样的改一行代码都想下载到开发板中测试的强迫症患者,真是 ...

  3. 【正点原子STM32连载】第二十章 基本定时器实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  4. 【正点原子STM32连载】 第三十章 DMA实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  5. FPGA课程设计——数字电子时钟VERILOG(基于正点原子新起点开发板,支持8位或6位共阳极数码管显示时分秒毫秒,可校时,可设闹钟,闹钟开关,led指示)

    2019级电子科学与技术专业FPGA课程设计 报   告 2022  年 5 月 20 日 多功能数字电子钟的设计 摘要 电子设计自动化(EDA)是一种实现电子系统或电子产品自动化设计的技术,使用ED ...

  6. 正点原子 i.mx6ull裸板RGB屏 显示彩色图片 (单片机显示彩色图片通用)取模软件

    编者注:阅读之前需要完成屏幕指定位置画点操作,屏幕画点本文不展开. 软件:Image2Lcd 2.9       vscode 硬件:正点原子阿尔法开发板(i.mx6ull),原子哥看到请联系我,打钱 ...

  7. 基于正点原子F103精英板和CubeIDE的Hal库LCD驱动移植(从零开始)

    最近在学习王维波老师的<STM32Cube高效开发教程>,王老师移植的是普中科技的驱动,而我手动移植了一下正点原子的lcd驱动,看了网上的诸多教程,有的博客存在一些bug,于是乎手动整理了 ...

  8. 正点原子STM32(基于HAL库)3

    目录 高级定时器实验 高级定时器简介 高级定时器输出指定个数PWM 实验 高级定时器输出指定个数PWM原理 TIM1/TIM8 寄存器 硬件设计 课堂源码(输出指定个数PWM灯就闪几次) 程序设计 下 ...

  9. 基于正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2)的个人自学记录

    基于正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2)的个人自学记录 硬件环境 正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2) 底板+核 ...

最新文章

  1. (转载)HTML--- input type=hidden
  2. 【mysql 】sql删除重复记录 You can't specify target table '表名' for update in FROM clause
  3. kubectl命令自动补全功能
  4. 轻量易用的微信Sdk发布——Magicodes.Wx.Sdk
  5. 二叉搜索树的插入与删除(C语言)
  6. 在java中生成二维码,并直接输出到jsp页面
  7. 利用Contacts Provider读取手机联系人信息
  8. 记,当找不到图片时,显示默认图片
  9. 参加IBM武汉分公司10周年庆
  10. Linux服务器监控性能测试
  11. 《算法笔记》——基础篇习题选择结构
  12. 深夜切题——Doubles
  13. android 怎么刷新view,android – 如何在ViewPager中刷新当前视图
  14. 17.Rust中函数式语言功能:迭代器与闭包
  15. C语言程序设计(第三版)
  16. 怎么把图片拼接成长图,3招教你快速处理
  17. 图:邻接矩阵表示法创建无向图并深度优先搜索遍历
  18. 路缘石滑模机在作业中进行效率作业的底气
  19. jsp mysql留言板制作_Jsp+mysql 制作留言板
  20. 内网安全建设思路(转)

热门文章

  1. 【Qt入门第1篇】 基础(一)Qt开发环境的搭建和hello world
  2. 火山PC无边框窗口尺寸的调整方法教程
  3. android sdk manager设置国内镜像快速下载sdk
  4. JAVA基础知识点-入门必备
  5. Android 大前端进化史
  6. 神经网络----萤火虫算法
  7. Proxy error: Could not proxy request... 问题解决
  8. 安装envi5.3时找不到证书license
  9. 快速下载 arXiv论文(arXiv PDF论文下载缓慢及中国镜像更新不及时解决方法)
  10. Euler-Maruyama 方法数值算例