基于正点原子stm32的mini板的TFTLCD显示实验
本章将讲述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显示实验相关推荐
- STM32基于正点原子ALIENTEK探索者开发板的跑马灯实验
一.首先我们来了解建立好的工程框架 1.USER 组USER下面主要存放的是用户代码. main.c是主函数 system_stm32f4xx.c文件是片上外设接入层系统文件,主要是申明设置系统及总线 ...
- STM32下载程序至SRAM——基于正点原子精英STM32F103ZET6开发板
STM32下载程序至SRAM--基于正点原子精英STM32F103ZET6开发板 如题,由于STM32的FLASH烧写寿命在1万次左右,对于本人这样的改一行代码都想下载到开发板中测试的强迫症患者,真是 ...
- 【正点原子STM32连载】第二十章 基本定时器实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- 【正点原子STM32连载】 第三十章 DMA实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- FPGA课程设计——数字电子时钟VERILOG(基于正点原子新起点开发板,支持8位或6位共阳极数码管显示时分秒毫秒,可校时,可设闹钟,闹钟开关,led指示)
2019级电子科学与技术专业FPGA课程设计 报 告 2022 年 5 月 20 日 多功能数字电子钟的设计 摘要 电子设计自动化(EDA)是一种实现电子系统或电子产品自动化设计的技术,使用ED ...
- 正点原子 i.mx6ull裸板RGB屏 显示彩色图片 (单片机显示彩色图片通用)取模软件
编者注:阅读之前需要完成屏幕指定位置画点操作,屏幕画点本文不展开. 软件:Image2Lcd 2.9 vscode 硬件:正点原子阿尔法开发板(i.mx6ull),原子哥看到请联系我,打钱 ...
- 基于正点原子F103精英板和CubeIDE的Hal库LCD驱动移植(从零开始)
最近在学习王维波老师的<STM32Cube高效开发教程>,王老师移植的是普中科技的驱动,而我手动移植了一下正点原子的lcd驱动,看了网上的诸多教程,有的博客存在一些bug,于是乎手动整理了 ...
- 正点原子STM32(基于HAL库)3
目录 高级定时器实验 高级定时器简介 高级定时器输出指定个数PWM 实验 高级定时器输出指定个数PWM原理 TIM1/TIM8 寄存器 硬件设计 课堂源码(输出指定个数PWM灯就闪几次) 程序设计 下 ...
- 基于正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2)的个人自学记录
基于正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2)的个人自学记录 硬件环境 正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2) 底板+核 ...
最新文章
- (转载)HTML--- input type=hidden
- 【mysql 】sql删除重复记录 You can't specify target table '表名' for update in FROM clause
- kubectl命令自动补全功能
- 轻量易用的微信Sdk发布——Magicodes.Wx.Sdk
- 二叉搜索树的插入与删除(C语言)
- 在java中生成二维码,并直接输出到jsp页面
- 利用Contacts Provider读取手机联系人信息
- 记,当找不到图片时,显示默认图片
- 参加IBM武汉分公司10周年庆
- Linux服务器监控性能测试
- 《算法笔记》——基础篇习题选择结构
- 深夜切题——Doubles
- android 怎么刷新view,android – 如何在ViewPager中刷新当前视图
- 17.Rust中函数式语言功能:迭代器与闭包
- C语言程序设计(第三版)
- 怎么把图片拼接成长图,3招教你快速处理
- 图:邻接矩阵表示法创建无向图并深度优先搜索遍历
- 路缘石滑模机在作业中进行效率作业的底气
- jsp mysql留言板制作_Jsp+mysql 制作留言板
- 内网安全建设思路(转)
热门文章
- 【Qt入门第1篇】 基础(一)Qt开发环境的搭建和hello world
- 火山PC无边框窗口尺寸的调整方法教程
- android sdk manager设置国内镜像快速下载sdk
- JAVA基础知识点-入门必备
- Android 大前端进化史
- 神经网络----萤火虫算法
- Proxy error: Could not proxy request... 问题解决
- 安装envi5.3时找不到证书license
- 快速下载 arXiv论文(arXiv PDF论文下载缓慢及中国镜像更新不及时解决方法)
- Euler-Maruyama 方法数值算例