浅谈LCD屏幕引脚定义识别

news2024/11/27 12:52:44

        学习单片机,总要驱动LCD屏幕,但是对于没有引脚定义的LCD屏幕该如何应对?

        本人研究不深,只谈体会。

        比如下面这款屏幕

        

 

 一、第一种方法

        百度大法查引脚定义。查询条件可以是FPC上的丝印,或者是屏幕的尺寸,引脚数,如2.2寸,19pin,屏幕,这些信息。

        有一定概率可以查到一模一样的屏幕,并且有引脚定义。之前通过这个方法查询到过2个屏幕,真是运气爆棚了。

        但是,大部分情况一无所获。

二、第二种方法

 1、准备工作        

        在开始工作以前先准备一些工具:

        1、带英寸刻度的尺子

         2、一个放大镜,不用太高级,当然放大倍数越高越好

        3、还需要一个手机 

2、开始

       第一种方法不行,就只能自力更生,自己来判断。

        LCD的显示IC本身是一种芯片,和所有IC一样只要和IC手册对应上,就可以判读引脚定义。但显示IC实在是太小了,必须要放大。有显微镜最好,没有用前面准备的工具一样可以做到。

        1、首先用尺寸测量以下屏幕对角线

        上面的屏幕测量了一下,大概2.2寸。百度一下,2.2寸大概率是ST7775,ili9225这些。

        2、用手机微距功能叠加加放大镜拍下屏幕和引脚情况

电脑上放大一些屏幕的白点大概是220*176分辨率,ST7775,ili9225恰好是这个分辨率。

        

已经很清楚了,可以用电脑的看图工具放大观察了。

       3、找出手册对引脚定义

然后找来ST7775手册,找的PAD ARRANGEMENT 的一页,有引脚定义,截了一段如下:

这个屏是19pin的,大概率是8位并口屏,并口屏要用到DB17-DB10做为数据传输总线,所以截取了上面的部分。

两张图对应上去,可得:

还可以确定IM3-IM0:[0011],8080,8bit         

4、跟踪线路确认引出定义

1-BL-,2-BL+,3-GND,4-VDD,5-VDD,6-/CS ,7-/RESET,8-/RS ,9-/WR ,10-/RD,11-18-DB7-DB0(高8位),19-GND       

         5、GND和VDD是怎么确认的

        GND和覆铜部分连接。VDD的线路比数据线路粗一些。

三、接好线找来例程跑一下,如果运行OK,就基本没问题了

        略

四、进一步明确,就查Driver Code ID吧

ST775的寄存器命令:

可以看到如果查询00h寄存器,返回0x7775就可以得到最准确的确认。


void lcd_write_comm_word(uint16_t cmd);

//
void SetLcdDBIn(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    GPIO_InitStructure.GPIO_Pin =     LCD_DB8|LCD_DB9|LCD_DB10|LCD_DB11|LCD_DB12|LCD_DB13|LCD_DB14|LCD_DB15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}


//
void SetLcdDBOut(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    GPIO_InitStructure.GPIO_Pin = LCD_DB8|LCD_DB9|LCD_DB10|LCD_DB11|LCD_DB12|LCD_DB13|LCD_DB14|LCD_DB15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}

/**
 * @prief LCD_ReadData
 */
uint16_t LCD_ReadData(void)
{
    uint16_t dat=0x0000;
    SetLcdDBIn();

    LCD_CS_CLR;
    LCD_RS_SET;
    LCD_WR_SET;
    LCD_RD_CLR;

    Delay_Us(20);
    //dat=LCD_DB_IN;
    dat|=(GPIO_ReadInputDataBit(GPIOB,LCD_DB8)<<0)&0x01;
    dat|=(GPIO_ReadInputDataBit(GPIOB,LCD_DB9)<<1)&0x02;
    dat|=(GPIO_ReadInputDataBit(GPIOB,LCD_DB10)<<2)&0x04;
    dat|=(GPIO_ReadInputDataBit(GPIOB,LCD_DB11)<<3)&0x08;
    dat|=(GPIO_ReadInputDataBit(GPIOB,LCD_DB12)<<4)&0x10;
    dat|=(GPIO_ReadInputDataBit(GPIOB,LCD_DB13)<<5)&0x20;
    dat|=(GPIO_ReadInputDataBit(GPIOB,LCD_DB14)<<6)&0x40;
    dat|=(GPIO_ReadInputDataBit(GPIOB,LCD_DB15)<<7)&0x80;

    LCD_RD_SET;
    LCD_CS_SET;

    SetLcdDBOut();
    return dat;

}


//查Driver code ID
uint16_t ReadID(void)
{
    uint16_t id;
    lcd_write_comm_word(0x0000);
    LCD_ReadData();
    LCD_ReadData();
    id=LCD_ReadData();
    id=id<<8;
    id|=LCD_ReadData();
    return id;
}

//查其他寄存器
uint16_t ReadRegister(unsigned char reg)
{
    uint16_t id;
    lcd_write_comm_word(reg);
    LCD_ReadData();
    LCD_ReadData();
    id=LCD_ReadData();

    id=id<<8;
    id|=LCD_ReadData();
    return id;
}


void gpio_lcd_write_data(unsigned char *data, size_t size) {
    LCD_RD_SET;
    for (int i=0;i<size;i++) {
        GPIO_WriteBit(GPIOB, LCD_DB8,data[i]&0x01);
        GPIO_WriteBit(GPIOB, LCD_DB9,data[i]&0x02);
        GPIO_WriteBit(GPIOB, LCD_DB10,data[i]&0x04);
        GPIO_WriteBit(GPIOB, LCD_DB11,data[i]&0x08);
        GPIO_WriteBit(GPIOB, LCD_DB12,data[i]&0x10);
        GPIO_WriteBit(GPIOB, LCD_DB13,data[i]&0x20);
        GPIO_WriteBit(GPIOB, LCD_DB14,data[i]&0x40);
        GPIO_WriteBit(GPIOB, LCD_DB15,data[i]&0x80);
     LCD_WR_CLR;
     LCD_WR_SET;
    }
}

void lcd_write_comm_word(uint16_t cmd)
{
    unsigned char c[2];
    c[0] = (cmd >> 8) & 0xFF;
    c[1] = cmd & 0xFF;

    LCD_CS_CLR;
    LCD_RS_CLR;

    gpio_lcd_write_data(c, 2);

    LCD_CS_SET;
}

ReadID()返回0x7775就OK了。

五、其他

1、为什么了不从ili9225入手?

        因为ili9225需要好多外围电容,而这个FPC上没有。

2、分辨率和显示IC(以ST为例)对应关系

ST其他
128*128ST7735
220*176ST7775
320*240ST7789
128*64ST7567

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sublime如何取消运行代码状态

sublime如何取消运行代码状态 解决方案待续、更新中 解决方案 1 顶部取消: 工具-----取消编译 这个看自己编译器sublime取消编译是否可用,可用则用 ,否则使用下面方法 2 底部栏取消–如图所示: 取消成功: 待续、更新中 ————————————————————— 以上就…

2024前端炫酷源码分享(附效果图及在线演示)

分享10款非常有趣的前端特效源码 其中包含css动画特效、js原生特效、svg特效以及小游戏等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 GSAP-火箭动画特效 GSAP 火箭动画 当氮气充足的情况下 火箭会冲出 并继续飞行 图片…

【Java】设计模式之顺序控制

实际开发中&#xff0c;有时候一些场景需求让多个线程按照固定的顺序依次执行。这个时候就会使用这种模式。 这种模式说白了&#xff0c;就是给线程设定不同的条件&#xff0c;不符合条件的话&#xff0c;就算线程拿到锁也会释放锁进入等待&#xff1b;符合条件才让线程拿到锁…

【解决方案】电能质量在线监测装置和防孤岛保护装置在特斯拉工厂分布式光伏项目的应用

摘要&#xff1a; 随着全球对可再生能源的关注度不断提高&#xff0c;分布式光伏发电系统在近年来得到了广泛应用。分布式光伏发电系统具有环保、灵活等优势&#xff0c;能够有效地缓解能源短缺和环境污染问题。同时&#xff0c;电能质量在线监测装置和防孤岛保护装置在分布式…

leetcode:412. Fizz Buzz(python3解法)

难度&#xff1a;简单 给你一个整数 n &#xff0c;找出从 1 到 n 各个整数的 Fizz Buzz 表示&#xff0c;并用字符串数组 answer&#xff08;下标从 1 开始&#xff09;返回结果&#xff0c;其中&#xff1a; answer[i] "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。a…

开心自走棋:使用 Laf 云开发支撑数百万玩家

先介绍一下开心自走棋 开心自走棋是一款剑与魔法的烧脑自走棋游戏。以著名的魔幻世界观为蓝本&#xff0c;采用了轻松可爱的画面风格&#xff0c;精致细腻的动画和特效来还原魔兽之战。 现在市面上自走棋游戏多是 PvP 玩法为主&#xff0c;而开心自走棋是以 PvE 玩法为主的&a…

刷了四百道算法题,我在项目里用过哪几道呢?

大家好&#xff0c;我是老三&#xff0c;今天和大家聊一个话题&#xff1a;项目中用到的力扣算法。 不知道从什么时候起&#xff0c;算法已经成为了互联网面试的标配&#xff0c;在十年前&#xff0c;哪怕如日中天的百度&#xff0c;面试也最多考个冒泡排序。后来&#xff0c;…

VTK将二维图像向三维空间中无参数化的曲面表面进行纹理映射(含代码)

实现纹理映射主要是建立纹理空间与模型空间、模型空间与屏幕空间之间的映射关系(见图 6-28)&#xff1a; 其中纹理空间可以定义为u-v 空间&#xff0c;每个轴标范围为 (0.1)。其中对于一个纹理图像&#xff0c;其左下角 v 标为 0.0)&#xff0c;右上角标为 1.1)。而对于简单的参…

假设与灵敏度分析

灵敏度分析 关系究竟有多敏感&#xff0c;就要进行灵敏度分析 如果你改变了系统参数后&#xff0c;引起这个模型&#xff08;公式&#xff09;输出的变化的程度不大&#xff0c;则说明你的模型稳定性较强&#xff08;即灵敏性较差&#xff09;&#xff0c;反之则反&#xff01…

【Python期末】动态爬取电影Top250数据可视化处理(有GUI界面/无数据库)

诚接计算机专业编程作业(C语言、C、Python、Java、HTML、JavaScript、Vue等)&#xff0c;10/15R左右&#xff0c;如有需要请私信我&#xff0c;或者加我的企鹅号&#xff1a;1404293476 本文资源&#xff1a;https://download.csdn.net/download/weixin_47040861/88713693 目录…

简析云能耗管理系统在某高校建筑系统平台的设计与应用

叶根胜 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;根据本项目&#xff0c;依托某学院电能计量管理系统、供水计量监督系统、供热计量管理系统等基础平台&#xff0c;制定了高校建筑能耗综合管理系统平台应用的总体框架和方案。该系统可以实时监控、统计能耗和…

https配置证书

HTTPS 基本原理 https 介绍 HTTPS&#xff08;全称&#xff1a;HyperText Transfer Protocol over Secure Socket Layer&#xff09;&#xff0c;其实 HTTPS 并不是一个新鲜协议&#xff0c;Google 很早就开始启用了&#xff0c;初衷是为了保证数据安全。 国内外的大型互联网…

STM32CubeMX教程20 SPI - W25Q128驱动

目录 1、准备材料 2、实验目标 3、实验流程 3.0、前提知识 3.1、CubeMX相关配置 3.1.1、时钟树配置 3.1.2、外设参数配置 3.1.3、外设中断配置 3.2、生成代码 3.2.1、外设初始化调用流程 3.2.2、外设中断调用流程 3.2.3、添加其他必要代码 4、常用函数 5、烧录验…

互联网干洗店洗鞋店搭建一套私域小程序有哪些优势?

在快节奏的现代生活中&#xff0c;我们常常面临衣物堆积如山、时间却捉襟见肘的困境。 干洗店在中国各大城市随处可见&#xff0c;假如每位顾客每月都需要一套干洗服务&#xff0c;那么一个50万人口的城市每月就有50万套干洗需求。若每家店日均处理100套衣物&#xff0c;那么至…

AE (4)_ 直方图调整的理论

#灵感# 在短暂的高通平台调试中&#xff0c;很看重直方图调整的理解。后来其它平台&#xff0c;不怎么调整这个了。但还是记录一下。 我个人还是倾向 招式简单&#xff0c;但应用到极致。 绝大部分内容来自&#xff1a;刘斯宁&#xff0c;Image Enhancement - CLAHE - 知乎 (z…

图论算法(数学建模)算法以后更新

无权值&#xff0c;无向&#xff0c;当成1就行 有向 有向赋权 顶点度的概念 Dijkstra算法 Dijkstra算法能求-一个顶点到另一-顶点最短路径。它是由Di jkstra于1959年提出的。实际它能出始点到其它所有顶点的最短路径Dijkstra算法是一种标号法:给赋权图的每一一个顶点记一个数&a…

特斯拉难挽倒退?比亚迪为中国汽车市场改写历史

对于电动汽车这个新兴产业&#xff0c;特斯拉长期以来一直处于领头羊的位置&#xff0c;近年来也面临诸多测试。去年底欧洲报道特斯拉在瑞典遭遇罢工冲击&#xff0c;运营陷入诸多困扰&#xff0c;实在出人意料。更让人讶异的是&#xff0c;年终宣布新王者比亚迪在全球销量首次…

【前端设计】文字聚光灯

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 案例 文字聚光灯效果可以用于网站标题 html <!DOCTYPE html> <html lang"en&quo…

Unity组件开发--短连接HTTP

1.网络请求管理器 using LitJson; using Cysharp.Threading.Tasks; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using UnityEngine.Events;using System.Web; using System.Text; using Sy…

SSM框架学习笔记01 | 注解开发

文章目录 1. 注解形式定义bean2.纯注解开发3.bean管理4. 依赖注入5. 第三方bean管理总结 1. 注解形式定义bean Compoenet ControllerServiceRepository 配合代码块 <context:component-scan /> 使用 2.纯注解开发 Configuration ComponentScan AnnotationConfigApplicati…