FPGA- RGB_TFT显示屏原理及驱动逻辑

news/2024/4/19 13:38:59/文章来源:https://blog.csdn.net/weixin_46897065/article/details/136401589

 下图是TFT显示屏的显示效果

该显示屏共分为 2 个版本,4.3 寸版本的 TFT4.3’’_V3.0 和 5.0 寸版本的 TFT5.0’’_V3.0。 两者 PCB 背板电路完全相同,接口脚位定义完全相同,接口时序完全相同,仅使用的显示屏 模组尺寸不同。设计两个尺寸的主要目的是适配不同的开发板使用,以获得较好的物理结构兼容性。

如下图:

排针连接开发板示意图:

FPC 接口连接开发板示意图:

连接注意事项:

触摸功能的话就是相较于电阻触摸屏,电容触摸屏的触摸坐标定位实现更加的复杂,一般都需要使用专用的电容触摸控制器来完成多点触摸信号的感应。所以大部分电容触摸模组都集成好了该电容控制器,对外提供标准的12C总线接口,使用时,只需要主机通过12C总线读取该触摸控制器芯片中存储的实时坐标即可,不需要做其他的操作,去读它这里面寄存器的值就可以了。也因此在电容触摸屏对外的接口上,只需要IIC的信号就可以了。

通用显示屏模组,通用显示屏模组采用的是4.3寸或者5寸的显示屏模组,这两种模组功能相同,接口相同,时序参数也都相同,且在FPC排线的物理位置上的区别,他们也通过不同的PCB板实现了兼容,所以最终使用的时候的程序和驱动完全通用。

RGB888->RGB565

该屏幕的颜色数据支持 24 位输入,即每种颜色(RGB)有 8 位表 示。但是在很多对颜色效果要求不高的系统中,为了节约存储器带宽和控制器的引脚数量, 会使用 16 位色(RGB565)进行图像显示。 

实现代码如FPGA-VGA实现是一样的 只需在输出中加入背光信号

代码如下:

`include "disp_parameter_cfg.v" 
//800x480
//H_Right_Borde = 0      V_Bottom_Bord   =  8
//H_Front_Porch = 40     V_Front_Porch   =  2
//H_Sync_Time   = 128    V_Sync_Time     =  2
//H_Back_Porch  = 88     V_Back_Porch    =  25
//H_Left_Border = 0      V_Top_Border    =  8
//H_Data_Time   = 800    V_Data_Time     =  480
//H_Total_Time  = 1056   V_Total_Time    =  525module TFT_Ctrl(Clk_33M   ,Reset_n   ,Data_in   ,hcount    ,   //行扫描位置(显示图像行扫描地址)vcount    ,   //场扫描位置(显示图像场扫描地址)TFT_HS    ,   //行同步信号TFT_VS    ,   //场同步信号TFT_DE   ,   //有效数据输出 TFT_CLK   ,   TFT_DATA ,     //红绿蓝三色 分别8位量化 R[7:0]G[7:0]B[7:0]  TFT_BL);input            Clk_33M;input            Reset_n;input   [23:0]   Data_in;output  [11:0]   hcount;output  [11:0]   vcount;output           TFT_HS;output           TFT_VS;output           TFT_DE;output           TFT_CLK;output  [23:0]   TFT_DATA;  //红绿蓝三色 分别8位量化 R[7:0]G[7:0]B[7:0]  output           TFT_BL;
//    parameter  VGA_HS_end = 11'd127  ,
//                hdat_begin = 11'd216  ,
//                hdat_end   = 11'd1016 ,
//                hpixel_end = 11'd1055 ,
//                VGA_VS_end = 11'd1    , 
//                vdat_begin = 11'd35   ,
//                vdat_end   = 11'd515  ,
//                vline_end  = 11'd524  ;parameter TFT_HS_end = `H_Sync_Time-1  ;parameter hdat_begin = `H_Sync_Time + `H_Back_Porch +`H_Left_Border - 1'b1;parameter hdat_end = `H_Total_Time - `H_Right_Border -`H_Front_Porch - 1'b1;parameter vdat_begin = `V_Sync_Time + `V_Back_Porch +`V_Top_Border - 1'b1;parameter vdat_end = `V_Total_Time - `V_Bottom_Border -`V_Front_Porch - 1'b1;    parameter hpixel_end = `H_Total_Time -1 ;parameter TFT_VS_end = `V_Sync_Time-1  ;     parameter vline_end  = `V_Total_Time -1 ; reg [11:0] hcount_r;reg [11:0] vcount_r;always@(posedge Clk_33M or negedge Reset_n)if(!Reset_n)hcount_r <= 11'd0; else if(hcount_r == hpixel_end )hcount_r <= 11'd0;elsehcount_r <= hcount_r + 1'd1;always@(posedge Clk_33M or negedge Reset_n)if(!Reset_n)vcount_r <= 11'd0; else if(hcount_r == hpixel_end) if(vcount_r == vline_end )vcount_r <= 11'd0;elsevcount_r <= vcount_r + 1'd1;elsevcount_r <= vcount_r;assign  TFT_DE   =  ((hcount_r >= hdat_begin) && (hcount_r < hdat_end)&&(vcount_r >= vdat_begin) && (vcount_r < vdat_end)) ? 1'b1 : 1'b0;  assign  hcount   =   TFT_DE ? (hcount_r - hdat_begin) : 10'd0;  assign  vcount   =   TFT_DE ? (vcount_r - vdat_begin) : 10'd0;               assign  TFT_HS   =  (hcount_r > TFT_HS_end)? 1'b1 :1'b0;   assign  TFT_VS   =  (vcount_r > TFT_VS_end)? 1'b1 :1'b0;  assign  TFT_DATA =  (TFT_DE) ? Data_in : 24'h000000;assign  TFT_CLK  =  ~Clk_33M;assign  TFT_BL = 1;endmodule

其中disp_parameter_cfg.v中定义了不同分辨率的参数:

//`define Resolution_480x272 1 //时钟为 9MHz
//`define Resolution_640x480 1 //时钟为 25.175MHz
//`define Resolution_800x480 1 //时钟为 33MHz
//`define Resolution_800x600 1 //时钟为 40MHz
//`define Resolution_1024x768 1 //时钟为 65MHz
//`define Resolution_1280x720 1 //时钟为 74.25MHz
`define Resolution_1920x1080 1 //时钟为 148.5MHz
//定义不同分辨率的时序参数
`ifdef Resolution_480x272`define H_Total_Time 12'd525`define H_Right_Border 12'd0`define H_Front_Porch 12'd2`define H_Sync_Time 12'd41`define H_Back_Porch 12'd2`define H_Left_Border 12'd0`define V_Total_Time 12'd286`define V_Bottom_Border 12'd0`define V_Front_Porch 12'd2`define V_Sync_Time 12'd10`define V_Back_Porch 12'd2`define V_Top_Border 12'd0
`elsif Resolution_640x480`define H_Total_Time 12'd800`define H_Right_Border 12'd8`define H_Front_Porch 12'd8`define H_Sync_Time 12'd96`define H_Back_Porch 12'd40`define H_Left_Border 12'd8`define V_Total_Time 12'd525`define V_Bottom_Border 12'd8`define V_Front_Porch 12'd2`define V_Sync_Time 12'd2`define V_Back_Porch 12'd25`define V_Top_Border 12'd8
`elsif Resolution_800x480`define H_Total_Time 12'd1056`define H_Right_Border 12'd0`define H_Front_Porch 12'd40`define H_Sync_Time 12'd128`define H_Back_Porch 12'd88`define H_Left_Border 12'd0`define V_Total_Time 12'd525`define V_Bottom_Border 12'd8`define V_Front_Porch 12'd2`define V_Sync_Time 12'd2`define V_Back_Porch 12'd25`define V_Top_Border 12'd8
`elsif Resolution_800x600`define H_Total_Time 12'd1056`define H_Right_Border 12'd0`define H_Front_Porch 12'd40`define H_Sync_Time 12'd128`define H_Back_Porch 12'd88`define H_Left_Border 12'd0`define V_Total_Time 12'd628`define V_Bottom_Border 12'd0`define V_Front_Porch 12'd1`define V_Sync_Time 12'd4`define V_Back_Porch 12'd23`define V_Top_Border 12'd0
`elsif Resolution_1024x768`define H_Total_Time 12'd1344`define H_Right_Border 12'd0`define H_Front_Porch 12'd24`define H_Sync_Time 12'd136`define H_Back_Porch 12'd160`define H_Left_Border 12'd0`define V_Total_Time 12'd806`define V_Bottom_Border 12'd0`define V_Front_Porch 12'd3`define V_Sync_Time 12'd6`define V_Back_Porch 12'd29`define V_Top_Border 12'd0
`elsif Resolution_1280x720`define H_Total_Time 12'd1650`define H_Right_Border 12'd0`define H_Front_Porch 12'd110`define H_Sync_Time 12'd40`define H_Back_Porch 12'd220`define H_Left_Border 12'd0`define V_Total_Time 12'd750`define V_Bottom_Border 12'd0`define V_Front_Porch 12'd5`define V_Sync_Time 12'd5`define V_Back_Porch 12'd20`define V_Top_Border 12'd0
`elsif Resolution_1920x1080`define H_Total_Time 12'd2200`define H_Right_Border 12'd0`define H_Front_Porch 12'd88`define H_Sync_Time 12'd44`define H_Back_Porch 12'd148`define H_Left_Border 12'd0`define V_Total_Time 12'd1125`define V_Bottom_Border 12'd0`define V_Front_Porch 12'd4`define V_Sync_Time 12'd5`define V_Back_Porch 12'd36`define V_Top_Border 12'd0
`endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_996825.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp直接连接wifi(含有ios和安卓的注意事项)

前言 小程序中直接连接wifi-----微信小程序 代码 启动 //启动wifistartWifi() {return new Promise((resolve, reject) > {uni.startWifi({success: (res) > {console.log(启动wifi 成功, res)resolve(true)},fail: (err) > {console.error(启动wifi 失败, err)uni.s…

【Web安全】XSS攻击与绕过

【Web安全】XSS攻击与绕过 【Web安全靶场】xss-labs-master 1-20 文章目录 【Web安全】XSS攻击与绕过1. XSS攻击是啥&#xff1f;2. XSS如何发生&#xff1f;3. XSS分类3.1. 反射型3.2. 存储型3.3. DOM型 4. XSS攻击方式1. script标签2. img标签3. input标签4. details标签5.…

强化学习中动作价值函数和状态价值函数的联系区别?

在强化学习中&#xff0c;动作价值函数&#xff08;Q函数&#xff09;和状态价值函数&#xff08;V函数&#xff09;都是值函数&#xff0c;用于评估在不同状态或状态动作对下的值。它们之间存在联系&#xff0c;但有一些区别&#xff1a; 动作价值函数&#xff08;Q函数&#…

MySQL 学习笔记(基础篇 Day2)

「写在前面」 本文为黑马程序员 MySQL 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. MySQL 学习笔记&#xff08;基础篇 Day1&#xff09; 目录 3 函数 3.1 字符串函数 3…

QPS 提升 10 倍!滴滴借助 StarRocks 物化视图实现低成本精确去重

作者&#xff1a;滴滴 OLAP 开发工程师 刘雨飞 小编导读&#xff1a; 滴滴于 2022 年引入了 StarRocks。经过一年多的努力&#xff0c;StarRocks 逐渐替代了原有技术栈&#xff0c;成为滴滴内部主要的 OLAP 引擎。截至 2023 年 12 月&#xff0c;滴滴已经成功建立了超过 40 个 …

解决:Information:java: javacTask: 源发行版 8 需要目标发行版 1.8

解决&#xff1a;Information:java: javacTask: 源发行版 8 需要目标发行版 1.8 先点击 Project Structure 查看jdk是否为1.8版本 我这jdk版本为1.8版本的&#xff0c;但还是运行还是报错 据以上错误显示以及上述配置&#xff0c;我选择的编译器是jdk1.8的&#xff0c;但是在i…

算法沉淀——动态规划之其它背包问题与卡特兰数(leetcode真题剖析)

算法沉淀——动态规划之其它背包问题与卡特兰数 二维费用的背包问题01.一和零02.盈利计划 似包非包组合总和 Ⅳ 卡特兰数不同的二叉搜索树 二维费用的背包问题 01.一和零 题目链接&#xff1a;https://leetcode.cn/problems/ones-and-zeroes/ 给你一个二进制字符串数组 strs…

论文阅读-高效构建检查点

论文标题&#xff1a;On Efficient Constructions of Checkpoints 摘要 高效构建检查点/快照是训练和诊断深度学习模型的关键工具。在本文中&#xff0c;我们提出了一种适用于检查点构建的有损压缩方案&#xff08;称为LC-Checkpoint&#xff09;。LC-Checkpoint同时最大化了…

使用 llama.cpp 在本地部署 AI 大模型的一次尝试

对于刚刚落下帷幕的2023年,人们曾经给予其高度评价——AIGC元年。随着 ChatGPT 的火爆出圈,大语言模型、AI 生成内容、多模态、提示词、量化…等等名词开始相继频频出现在人们的视野当中,而在这场足以引发第四次工业革命的技术浪潮里,人们对于人工智能的态度,正从一开始的…

LeetCode73题:矩阵置零(python3)

代码思路&#xff1a; 这里用矩阵的第一行和第一列来标记是否含有0的元素&#xff0c;但这样会导致原数组的第一行和第一列被修改&#xff0c;无法记录它们是否原本包含 0。因此我们需要额外使用两个标记变量分别记录第一行和第一列是否原本包含 0。 class Solution:def setZe…

STM32CubeMX学习笔记14 ---SPI总线

1. 简介 1.1 SPI总线介绍 SPI 是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。 SPI&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在…

前端实现一个绕圆心转动的功能

前言&#xff1a; 今天遇到了一个有意思的需求&#xff0c;如何实现一个元素绕某一个点来进行圆周运动&#xff0c;用到了一些初高中的数学知识&#xff0c;实现起来还是挺有趣的&#xff0c;特来分享&#x1f381;。 一. 效果展示 我们先展示效果&#xff0c;如下图所示&…

改进YOLO系列 | YOLOv5/v7 引入通用高效层聚合网络 GELAN | YOLOv9 新模块

今天的深度学习方法专注于如何设计最合适的目标函数,以使模型的预测结果最接近真实情况。同时,必须设计一个合适的架构,以便为预测提供足够的信息。现有方法忽视了一个事实,即当输入数据经过逐层特征提取和空间转换时,会丢失大量信息。本文将深入探讨数据通过深度网络传输…

视频编码中常用的测试YUV系列及说明

vcc最新规定的测试序列如下所示&#xff0c;对于RA和LD配置&#xff0c;所有序列的所有帧都需要测试&#xff0c;对于intra配置仅需测试前8帧。 每列含义如下&#xff1a; A1、A2测试序列在LD配置下编码时应编码帧数为帧率的三倍。 “M”表示在该配置下必须测试这条序列。 …

基于 LLaMA 和 LangChain 实践本地 AI 知识库

有时候,我难免不由地感慨,真实的人类世界,本就是一个巨大的娱乐圈,即使是在英雄辈出的 IT 行业。数日前,Google 正式对外发布了 Gemini 1.5 Pro,一个建立在 Transformer 和 MoE 架构上的多模态模型。可惜,这个被 Google 寄予厚望的产品并未激起多少水花,因为就在同一天…

根据标签出现的频次渲染不同大小的圆和文字,圆随机摆放且相互之间不重叠

效果图&#xff1a; 按每个标签出现的频次大小渲染出不同比例大小的圆&#xff0c;渲染的圆的宽度区间为 [40, 160] &#xff0c;其中的文字的大小区间为 [12, 30] &#xff0c;圆的位置随机摆放且不重叠。 根据已知条件可得出&#xff0c;标签中频次最高的对应圆的宽度(直径…

Mac Pro 突然不能双击打开文件夹

当Mac Pro 突然不能双击打开文件夹 不防右击看看这儿 有没有勾选 如果勾选就会在打开的瞬间 闪退关掉文件夹

如何恢复edge的自动翻译功能

介绍&#xff1a;对于英文不好的小伙伴&#xff0c;把英语翻译成中文是有帮助的&#xff0c;而edge可以直接对英文页面翻译这一功能更是受人喜爱&#xff0c;但是&#xff0c;最近发现这一项功能消失了。 原始界面&#xff1a; 下面展示如何恢复该功能。 1.打开edge&#xff…

docker自定义镜像与上传

alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻型Linux发行版&#xff0c;它不同于通常的Linux发行版&#xff0c;Alpine采用了musl libc 和 BusyBox以减少系统的体积和运行时的资源消耗。 2.Alpine Linux提供了自己的包管理工具&#xff1a;apk(注意&#xff1a;…

【nowcoder】NC248 左叶子之和

NC248 左叶子之和 计算给定二叉树的左叶子之和。 树上叶子节点指没有后继节点的节点&#xff0c;左叶子指连向父节点的左侧的叶子节点。 int sumOfLeftLeaves(struct TreeNode* root ) {if (root ! NULL) {int sum 0;if (root->left ! NULL && root->left->…