miniSTM32F103开发版LCD显示实验和触摸屏实验文档

合集下载

基于STM32F103的触摸屏驱动模块计划

基于STM32F103的触摸屏驱动模块计划
液晶显示器 LCD(Liquid Crystal Display):是新型平板显示器件。显示器中的液晶体并 不发光,而是控制外部光的通过量。当外部光线通过液晶分子时,液晶分子的排列扭曲状 态不同,使光线通过的多少就不同,实现了亮暗变化,可重现图像。液晶分子扭曲的大小 由加在液晶分子两边的电压差的大小决定。因而可以实现电到光的转换。即用电压的高低 控制光的通过量,从而把电信号转换成光像。
1 概述
LCD 液晶显示屏与触摸屏在嵌入式系统中的应用越来越普及。他们是非常简单、方便、 自然的人机交互方式,目前广泛应用于便携式仪器、智能家电、掌上设备等领域。触摸屏 与 LCD 液晶显示技术的紧密结合,成了主流配置。
LCD 液晶显示屏(LCD Module , LCM)是一种将液晶显示器件、连接件、集成电路、PCB 线路板、背光源以及结构件装配在仪器的组件。
触摸屏技术在我国的应用时间不是太长,但它已经成长为人们最为接受的输入方式。 利用这种技术人们只需触碰屏幕就可以对主机进行操作,是人机交互更为方便,直截了当。
本文档是对 LCD 液晶显示屏和触摸屏驱动的设计做深入介绍。
2 LCD 液晶显示屏
2.1 LCD 液晶显示屏原理
液晶(Liquid Crystal):是一种介于固态和液态之间的具有规则性分子排列,及晶体的 光学各向异性的有机化合物,液晶在受热到一定温度的时候会呈现透明状的液体状态,而 冷却则会出现结晶颗粒的混浊固体状态,因为物理上具有液体与晶体的特性,故称之为 “液晶”。
2.1 LCD 液晶显示屏原理 .........................................................................................................3 2.2 LCD 液晶显示屏分类 .........................................................................................................3 3 触摸屏驱动原理概述 ..............................................................................................................4 3.1 电阻触摸屏工作原理 .......................................................................................................4 3.2 触摸屏控制实现 ...............................................................................................................4 4 设计目标 ......................................................................................................................................4 5 系统硬件设计 ..............................................................................................................................5 5.1 STM32 微处理器 FSMC 接口 .............................................................................................5 5.2 LCD 液晶显示屏介绍 .........................................................................................................7 5.3 触摸屏控制板 ...................................................................................................................8 6 系统软件设计 ............................................................................................................................10 6.1 系统软件结构 .................................................................................................................10 6.2 头文件设计 .....................................................................................................................11 6.2 硬件初始化程序 .............................................................................................................11 6.3 3 寸 LCD 模块驱动程序 ...................................................................................................14 6.4 触摸坐标获取程序 .........................................................................................................19 6.5 LCD 控制器控制程序 .......................................................................................................22 7 总结 ............................................................................................................................................24

野火STM32F103-MINI开发板用户手册

野火STM32F103-MINI开发板用户手册

第1章整板硬件测试本章针对第一次使用本产品的用户,讲解如何对开发板进行首次开机测试。

我们所有出厂的开发板均烧录有程序且已测试,收到板子后您也可直接使用这个程序重新测试。

图 1-1 秉火F103-MINI开发板整体外观1.1 开机测试为简便起见,初次使用,不外接任何扩展模块,只要确认开发板带有液晶屏即可。

(1)使用USB线连接开发板与电脑。

开发板左侧有两个Mini USB接口,注意这里我们要接的是靠上的那个标有“USB 转串口”的接口。

(2)连接好后打开电源开关,板子左下角的红色电源指示灯亮,稍等片刻,液晶屏亮起,显示GUI界面。

图 1-2接上电源线,打开电源开关图 1-3 开机后的液晶界面截图进入主界面后,说明开发板功能正常,您可随意尝试打开各个APP,自行把玩。

当然,有很多APP是需要扩展硬件模块才可以正常使用的,所以打开后提示错误请放心,并不是开发板的问题,只是板子没有连接支持该APP的硬件模块。

特别地,其中的“USB”应用是没有实现功能的,仅为了对齐桌面的图标,用户可片自行编程增加应用功能。

可能遇到的简单故障排查:(1)打开开关后电源灯不亮。

❑检查USB线连接。

❑重复多次打开电源开关。

❑更换USB线。

❑把USB线接到另一个标有“USB Device”的接口。

(2)电源灯亮,液晶屏无现象或显示的不是以上截图的界面。

❑可能是液晶屏接触不良,把液晶屏拆下来,重新接上。

❑确认没有自行给开发板下载过其它程序,若下载过其它程序,请重新给开发板下载配套资料里的出厂测试程序。

❑使用万用表检查USB线供电的电压,在4.2-5.5V 范围可认为电压正常。

若遇到问题无法解决,请联系我们。

1.2 APP使用说明在主界面下,点击APP的图标即可运行,而在APP界面下触摸开发板的“电容按键”可返回主界面,同时蜂鸣器会响一下,也可直接点击APP右上方的“x”返回主界面。

下面对各个APP的使用方式进行说明。

1.LED点击主界面图标可打开LED应用界面,见图 1-4。

miniSTM32F103开发版LCD显示实验和触摸屏实验文档

miniSTM32F103开发版LCD显示实验和触摸屏实验文档

表 16.1.3 MY、MX、MV 设置与 LCD 扫描方向关系表 这样,我们在利用 ILI9341 显示内容的时候,就有很大灵活性了,比如显示 BMP 图片, BMP 解码数据,就是从图片的左下角开始,慢慢显示到右上角,如果设置 LCD 扫描方向为从 左到右,从下到上,那么我们只需要设置一次坐标,然后就不停的往 LCD 填充颜色数据即可, 这样可以大大提高显示速度。 接下来看指令:0X2A,这是列地址设置指令,在从左到右,从上到下的扫描方式(默认) 下面,该指令用于设置横坐标(x 坐标) ,该指令如表 16.1.4 所示:
图 16.1.4 16 位数据与显存对应关系图 从图中可以看出,ILI9341 在 16 位模式下面,数据线有用的是:D17~D13 和 D11~D1,D0 和 D12 没有用到,实际上在我们 LCD 模块里面,ILI9341 的 D0 和 D12 压根就没有引出来,这 样,ILI9341 的 D17~D13 和 D11~D1 对应 MCU 的 D15~D0。 这样 MCU 的 16 位数据,最低 5 位代表蓝色,中间 6 位为绿色,最高 5 位为红色。数值越 大,表示该颜色越深。另外,特别注意 ILI9341 所有的指令都是 8 位的(高 8 位无效) ,且参数 除了读写 GRAM 的时候是 16 位,其他操作参数,都是 8 位的,这个和 ILI9320 等驱动器不一 样,必须加以注意。 接下来,我们介绍一下 ILI9341 的几个重要命令,因为 ILI9341 的命令很多,我们这里就 不全部介绍了,有兴趣的大家可以找到 ILI9341 的 datasheet 看看。里面对这些命令有详细的介 绍。我们将介绍:0XD3,0X36,0X2A,0X2B,0X2C,0X2E 等 6 条指令。 首先来看指令: 0XD3, 这个是读 ID4 指令, 用于读取 LCD 控制器的 ID, 该指令如表 16.1.1 所示: 顺序 指令 参数 1 参数 2 参数 3 参数 4 控制 RS 0 1 1 1 1 RD 1 ↑ ↑ ↑ ↑ WR ↑ 1 1 1 1 D15~D8 XX XX XX XX XX D7 1 X 0 1 0 1 X 0 0 1 各位描述 D6 D5 0 X 0 0 0 D4 1 X 0 1 0 D3 0 X 0 0 0 D2 0 X 0 0 0 D1 1 X 0 1 0 D0 1 X 0 1 1 HEX D3H X 00H 93H 41H

基于ALIENTKE MiniSTM32开发板的触摸屏实验

基于ALIENTKE MiniSTM32开发板的触摸屏实验
2硬 件 设 计
这样只要事先在屏幕 上面显示 4个 点( 这四个 点的坐标是 已知 的) , 分别按这四个 点就可 以从触摸屏读到 4个物理坐标 , 这样就可 以通过待定系数法求 出 x f a c 、 y f a c 、 X O I T , y o f这四个 参数 。我们保存好这 四个参数 , 在 以后的使用中, 我们把所有 得到的物 理坐标都按照这个关系式来计算 , 得到的就是准确的
XP T 2 0 4 6 。XP T 2 0 4 6是一款 4导线制触摸屏控制器 ,内含 1 2 位分辨率 1 2 5 K Hz 转换速率逐步逼近型A/ D转换器。 XP T 2 0 4 6
支持从 1 . 5 V到 5 . 2 5 V 的低 电压 I / O接 口。 XP T 2 0 4 6能 通 过 执
的串扰 , 使显示液晶屏 的静态特性与扫描线数无关 , 因此大大 屏幕上的坐标 , 不 管在什 么情况下 , 触摸屏这套坐 标在 同一 点 对坐标定位, 点不准 , 这就是触摸屏最怕出现的问题: 漂移
很多应用触摸屏 的系统启动后先要执行校准程序 。通 常 应用程序中使用的 L CD坐标是以像素为单位的。比如说 : 左
坐标 , 然 后再赋给 P OS结构 , 达到坐标转换 的目的 。 校正思路: 在 了解 了校正原理之后 , 我们 可以得 出下面 的

个从物理 坐标 到像素坐标转换关系式:
LCDx -x f a c P x + xo m LCDy =y f a c P y + yo m
A L I E N T E K T F T L C D 模 块 自带 的触 摸 屏 控 制 芯 片 为
上角的坐标是一组非 0的数值 , 比如( 2 0 , 2 0 ) , 而右下角的坐标

基于STM32F103的触摸屏驱动模块设计

基于STM32F103的触摸屏驱动模块设计

基于STM32F103X的LCD触摸屏驱动的设计姓名:徐进东 _______学号:10030227 ______班级:_10计卓______目录1概述 (3)2LCD 液晶显示屏 (3)2.1LCD液晶显示屏原理 (3)22 LCD液晶显示屏分类 (3)3触摸屏驱动原理概述 (4)3.1电阻触摸屏工作原理 (4)3.2触摸屏控制实现 (4)4设计目标 (4)5系统硬件设计 (5)5.1STM32微处理器FSMC接口 (5)5.2LCD液晶显示屏介绍 (7)5.3触摸屏控制板 (8)6系统软件设计 (10)6.1系统软件结构 (10)6.2头文件设计 (11)6.2硬件初始化程序 (11)6.33寸LCD模块驱动程序 (14)6.4触摸坐标获取程序 (19)6.5LCD控制器控制程序 (22)7总结 (24)1概述LCD液晶显示屏与触摸屏在嵌入式系统中的应用越来越普及。

他们是非常简单、方便、自然的人机交互方式,目前广泛应用于便携式仪器、智能家电、掌上设备等领域。

触摸屏与LCD液晶显示技术的紧密结合,成了主流配置。

LCD液晶显示屏(LCD Module , LCM)是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源以及结构件装配在仪器的组件。

触摸屏技术在我国的应用时间不是太长,但它已经成长为人们最为接受的输入方式。

利用这种技术人们只需触碰屏幕就可以对主机进行操作,是人机交互更为方便,直截了当。

本文档是对LCD液晶显示屏和触摸屏驱动的设计做深入介绍。

2 LCD液晶显示屏2.1L CD液晶显示屏原理液晶(Liquid Crystal):是一种介于固态和液态之间的具有规则性分子排列,及晶体的光学各向异性的有机化合物,液晶在受热到一定温度的时候会呈现透明状的液体状态,而冷却则会出现结晶颗粒的混浊固体状态,因为物理上具有液体与晶体的特性,故称之为“液晶”。

液晶显示器LCD( Liquid Crystal Display):是新型平板显示器件。

基于STM32F103ZET6最小系统LCD液晶屏

基于STM32F103ZET6最小系统LCD液晶屏

基于STM32F103ZET6最小系统LCD液晶屏题目:基于STM32F103ZET6最小系统的LCD液晶屏学院:专业:班级:姓名:学号:2016 年6月12日引言:Altium Designer基于一个软件集成平台,把为电子产品开发提供完整环境所需工具全部整合在一个应用软件中。

Altium Designer 包含所有设计任务所需工具:原理图和PCB设计、基于FPGA的嵌入式系统设计和开发。

目前我们使用到的功能特点主要有以下几点:1、提供了丰富的原理图组件和PCB封装库并且为设计新的器件提供了封装,简化了封装设计过程。

2、提供了层次原理图设计方法,支持“自上向下”的设计思想,使大型电路设计的工作组开发方式称为可能。

3、提供了强大的查错功能,原理图中的ERC(电气规则检查)工具和PCB 的DRC(设计规则检查)工具能帮助设计者更快的查出和改正错误。

4、全面兼容Protel系列以前的版本,并提供orcad格式文件的转换。

一、课程设计目的1、培养学生掌握、使用实用电子线路、计算机系统设计、制板的能力;2.提高学生读图、分析线路和正确绘制设计线路、系统的能力;3.了解原理图设计基础、了解设计环境设置、学习 Altium Designer 软件的功能及使用方法;4.掌握绘制原理图的各种工具、利用软件绘制原理图;5.掌握编辑元器件的方法构造原理图元件库;6. 熟练掌握手工绘制电路版的方法,并掌握绘制编辑元件封装图的方法,自己构造印制板元件库;7.了解电路板设计的一般规则、利用软件绘制原理图并自动生成印制板图。

二、设计过程规划1、根据实物板设计方案;2、制作原理图组件;3、绘制原理图;4、选择或绘制元器件的封装;5、导入PCB图进行绘制及布线;6、进入DRC检查;三、原理图绘制✧新建工程:1.在菜单栏选择File → New → Project → PCB Project2.Projects面板出现。

3.重新命名项目文件。

lcd显示实验报告

lcd显示实验报告

lcd显示实验报告
LCD显示实验报告
实验目的:通过实验,掌握LCD显示屏的工作原理及使用方法,加深对LCD技术的理解。

实验材料:
1. LCD显示屏
2. 控制器
3. 电源适配器
4. 连接线
5. 电脑
实验步骤:
1. 将LCD显示屏与控制器连接,接上电源适配器。

2. 将控制器与电脑连接,确保连接稳固。

3. 打开电脑,进入显示设置,调整分辨率和频率。

4. 查看LCD显示屏是否正常显示。

实验结果:
经过调试,LCD显示屏显示正常,色彩鲜艳,清晰度高。

在不同分辨率和频率下,显示效果均稳定,没有闪烁或失真现象。

实验分析:
LCD显示屏是一种利用液晶材料来显示图像的平面显示器。

其工作原理是通过控制液晶分子的排列来控制光的透过与阻挡,从而显示出图像。

与传统的CRT 显示器相比,LCD显示屏具有体积小、节能、无辐射等优点,因此在现代电子
产品中得到广泛应用。

结论:
通过本次实验,我们深入了解了LCD显示屏的工作原理和使用方法,掌握了LCD显示屏的调试技巧。

这对我们今后的学习和工作都具有重要意义。

希望通过不断的实践和学习,能够更好地掌握LCD技术,为我们的科研和工程项目提供更好的支持。

战舰STM32F103开发版LCD显示实验和触摸屏实验文档

战舰STM32F103开发版LCD显示实验和触摸屏实验文档

y 坐标的时候,我们只需要带 2 个参数即可,也就是设置 SP 即可,因为如果 EP 没有变化,我
们只需要设置一次即可(在初始化 ILI9341 的时候设置),从而提高速度。
接下来看指令:0X2C,该指令是写 GRAM 指令,在发送该指令之后,我们便可以往 LCD
的 GRAM 里面写入颜色数据了,该指令支持连续写,指令描述如表 18.1.1.6 所示:
18.1 TFTLCD 简介 18.2 硬件设计 18.3 软件设计 18.4 下载验证
18.1 TFTLCD&FSMC 简介
本章我们将通过 STM32 的 FSMC 接口来控制 TFTLCD 的显示,所以本节分为两个部分, 分别介绍 TFTLCD 和 FSMC。 18.1.1 TFTLCD 简介
样,必须加以注意。
接下来,我们介绍一下 ILI9341 的几个重要命令,因为 ILI9341 的命令很多,我们这里就
不全部介绍了,有兴趣的大家可以找到 ILI9341 的 datasheet 看看。里面对这些命令有详细的介
绍。我们将介绍:0XD3,0X36,0X2A,0X2B,0X2C,0X2E 等 6 条指令。
图 18.1.1.4 16 位数据与显存对应关系图
从图中可以看出,ILI9341 在 16 位模式下面,数据线有用的是:D17~D13 和 D11~D1,D0
和 D12 没有用到,实际上在我们 LCD 模块里面,ILI9341 的 D0 和 D12 压根就没有引出来,这
样,ILI9341 的 D17~D13 和 D11~D1 对应 MCU 的 D15~D0。
TFT-LCD 即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display。TFT-LCD 与无源 TN-LCD、STN-LCD 的简单矩阵不同,它在液晶显示屏的每一个象 素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特 性与扫描线数无关,因此大大提高了图像质量。TFT-LCD 也被叫做真彩液晶显示器。

基于STM32的EMS液晶显示触摸屏设计方案.doc

基于STM32的EMS液晶显示触摸屏设计方案.doc

基于STM32的EMS显示触摸屏设计方案电动车一直以清洁环保而备受关注,加上能源危机加剧、油价不断上涨,电动车也越来越受到用户的青睐。

电动车一般采用锂电池供电,由多个单体电池串联成电池组作为动力电源。

但由于各个串联单体电池特性不能保证完全一致,因此相同的电流下充电放电速度也会不同,如果不进行均衡干预,电池寿命会大大缩短,因此需要实时监控各个单体电池的状态、总电压、总电流,根据状态适时进行电池充放电均衡,并且充放电均衡时,均衡状态也要实时进行检测,所以就有了电动车电池能量管理系统(EMS)。

实践证明EMS可以有效延长电动车电池使用寿命,是电动车中十分重要的管理系统。

EMS主要包括:信息采集模块、充放电均衡模块、信息集中处理模块以及显示模块。

图1为自主研发的电动车电池能量管理系统(EMS)的结构图,其中信息采集模块主要完成实时采集电池组以及单体电池的电压、温度、电流等状态,对电池进行实时监控的同时也为均衡模块的开启与关闭提供依据。

均衡模块主要完成对电池特性差异进行补偿,根据采集模块采集来的信息判断电池状态,对单节电池进行充放电均衡,来实现状态特性一致。

信息集中处理模块负责将采集得到的数据进行处理、分析、计算(如SOC等),并监控均衡模块的工作,对其进行控制,同时与显示模块通信,在整个系统中起着承上启下的作用。

显示模块作为唯一的人机交互接口,不仅承担着将所有数据、以及设备状态实时地显示给用户,让用户能够直观地看到电池状态和EMS工作效果,而且还为用户与EMS的控制交流提供接口,可以让用户设置参数,更改EMS工作状态,达到实时监管和控制的目的。

如果没有显示模块人们就无法看到电池和EMS的信息,EMS的报警或提示信息无法通知到客户,一些报警状态得不到及时处理轻则造成电池损坏,重则会导致电动车工作失控,酿成严重事故。

同样客户也无法根据情况来调整和控制EMS,也不能完全发挥EMS的作用。

可见显示模块的人机交互功能是EMS中不可或缺的组成部分,从显示模块所需的功能看触摸屏是不错的选择。

第20章 TFT实验

第20章 TFT实验

第20章 TFTLCD显示实验这一章我们将介绍TFT LCD 模块,该模块可以显示 16 位色的真彩图片。

在本章中,我们将使用 MiniSTM32 开发板上的 LCD 接口,来点亮 TFTLCD,并实现彩色的显示。

本章分为如下几个部分:20.1 TFTLCD 简介20.2 硬件设计20.3 软件设计20.4 下载验证20.1 TFTLCD 简介TFTLCD模块的控制有两种方式,一种是使用STM32的普通IO进行模拟,另一种是使用STM32的FSMC接口。

因为STM32F103RBT6没有FSMC接口,所以本章我们将通过 STM32 的普通IO接口来控制 TFTLCD 的显示。

TFTLCD模块的主要参数下面给大家介绍一下 TFT 彩屏模块的几个主要参数:1:TFT 液晶模块的尺寸,也就是我们平时说的屏幕的大小(屏幕的对角线的长度),常用的有 1.6,2.0,2.2,2.4,2.8,3.0,3.2,3.5,4.3,6.0,15,17,21 英寸等等。

2:分辨率,分辨率就是指屏幕水平像素和垂直像素总的数量,我们的开发板上配套的 2.4 英寸的彩屏液晶模块的分辨率是 320*2403:点距,就是指相邻 2 个像素的距离。

4:屏幕的宽高比,小尺寸的屏幕一般是 4:3 的,大屏幕的一般是 16:9 的。

5:帧,显示屏所显示的一幅完整画面就是一帧。

6:像素,是构成数字图像的最小单位。

我们若把数字图像放大数倍,就会发现数字图像其实是许多色彩相近的小方点所组成,这些小方点就是“像素”。

TFTLCD模块原理简介LCD,即液晶显示器,因为其功耗低、体积小,承载的信息量大,因而被广泛用于信息输出、与用户进行交互,目前仍是各种电子显示设备的主流。

因为 STM32 内部没有集成专用的液晶屏和触摸屏的控制接口,所以在显示面板中应自带含有这些驱动芯片的驱动电路(液晶屏和触摸屏的驱动电路是独立的),STM32 芯片通过驱动芯片来控制液晶屏和触摸屏。

STM32F103启航号,4.3寸LCD测试

STM32F103启航号,4.3寸LCD测试

启航号STM32 之 4.3寸lcd测试(ssd1963)——旺宝电子 实验目的:学会4.3寸屏的使用及ssd1963简介Ssd1963简介:最高有1215K 字节的缓存,支持864*480 24位显示支持TFT的18位或24位的RGB格式接口支持8位的串行RGB接口可以支持硬件旋转支持窗口显示通过编程控制亮度对比度饱和度通过PWM实现动态背光控制和mcu有8、9、16、18、24位接口内建PLL各种省电模式下面是块图从这张图可以看出SSD1963有几大模块1.和mcu通信接口2.时钟复位管理3.时钟产生4.流缓冲5.lcd控制器6.和lcd的接口可以看出控制数据是通过mcu接口直接就写到寄存器了,而显示数据则是先写到了流缓冲寄存器,然后经过lcd控制器的一系列处理,然后送到lcd上让其显示这个就是上面说到的硬件旋转,至于到底是什么东东,我也没用过,估计就是让屏幕旋转下图是我们4.3模块原理图实际上这只是和stm32的接口部分从图中可以看出我们用了16个IO口给ssd1963传送数据,然后看下图从图中可以看出16位有两种传送模式,第一种是RGB 565格式,第二种就是发送两次RGB,共包含16位R 16位G 16位B,我们大部分采用的第二种方式还要注意一点,ssd1963,和我们其他几块屏不同,ssd1963设置寄存器的时候,每个寄存器的参数不是固定的,因此我们一般是发送了写寄存器命令,然后在发送寄存器的参数,(可以将其封装起来,写成函数)下面介绍ssd1963几个重要的寄存器set_display_on 0x29 ;设置显示打开,配置完成后设置该寄存器才能打开显示,否则无显示set_display_off 0x28;设置显示关闭,在配置完成之前应该设置该寄存器set_column_address 0x2a,设置列的显示的范围,不设置,则显示不正常,或无法显示set_page_address 0x2b ,设置页页地址(行)不设置无法显示write_memory_start 0x2c在向ssd1963的内存写数据前要先写该寄存器set_lcd_mode 0xb0,设置lcd接口的模式等set_pll 0xe0 使能或不使能PLLset_pll_mn 0xe2设置PLL的使用规则set_pixel_data_interface 0xf0,设置和stm32的接口,就是传送数据时以什么格式传输,就是上面提到那个有颜色那个图本程序是通过FSMC驱动4.3寸LCD的,接口部分和3.2的一样,关于更详细的信息看上面的3.2寸的程序有较详细介绍,现在分析程序int main(void){u8 x=0;SystemInit(); //系统时钟配置// NVIC_Configuration(); //中断向量表注册函数Usart_Init(); //串口引脚配置Usart_Configuration(115200);//串口配置设置波特率为115200// LED_Init(); //LED初始化// KEY_Init(); //按键初始化LCD_Init(); //LCD初始化while(1){switch(x){case 0:LCD_Clear(WHITE);break;case 1:LCD_Clear(BLACK);break;case 2:LCD_Clear(BROWN);break;case 3:LCD_Clear(RED);break;case 4:LCD_Clear(MAGENTA);break;case 5:LCD_Clear(GREEN);break;case 6:LCD_Clear(CYAN);break;case 7:LCD_Clear(GRAY);break;case 8:LCD_Clear(BRRED);break;case 9:LCD_Clear(YELLOW);break;case 10:LCD_Clear(BLUE);break;}x++;if(x>10) x=0;else{LED1=~LED1;Delay_Ms(400); //LED1闪烁,系统运行正常}}}这个程序就是在lcd上循环显示颜色,这个和一般的有点不一样,这是通过switch语句散转的,关于swith 语句,相信一般人都比较熟悉了,在每次switch跳出后,会使led的状态改变,并且延时400ms关于lcd初始化函数void LCD_Init(void){FSMC_LCDInit(); //LCD对应的FSMC接口初始化GPIO_LCDInit(); //LCD对应的IO接口初始化DeviceID = Read_LCDReg(0x0000); //读取LCD的ID:对应我们1289的屏的ID是0x8999printf("DeviceID=0x%x\r\n",DeviceID); //以十六进制方式输出LCD读取的IDif(DeviceID == 0x8999){//************* Start Initial Sequence **********//Write_LCDReg(0x00, 0x0001); // 开启内部时钟#if LCD_ID_AM == 110Write_LCDReg(0x01, 0x3B3F); //输出驱动控制: RL=0;REV=1;GD=1;BGR=0;SM=0;TB=1#elif LCD_ID_AM == 001Write_LCDReg(0x01, 0x7B3F); //输出驱动控制:RL=1;REV=1;GD=1;BGR=0;SM=0;TB=1#endifWrite_LCDReg(0x02, 0x0600); //set 1 line inversion//************* Power control setup ************/Write_LCDReg(0x0C, 0x0007); // Adjust VCIX2 output voltageWrite_LCDReg(0x0D, 0x0006); // Set amplitude magnification of VLCD63Write_LCDReg(0x0E, 0x3200); // Set alternating amplitude of VCOMWrite_LCDReg(0x1E, 0x00BB); // Set VcomH voltageWrite_LCDReg(0x03, 0x6A64); // Step-up factor/cycle setting//************ RAM position control **********/Write_LCDReg(0x0F, 0x0000); // Gate scan position start at G0.Write_LCDReg(0x44, 0xEF00); // Horizontal RAM address positionWrite_LCDReg(0x45, 0x0000); // Vertical RAM address start positionWrite_LCDReg(0x46, 0x013F); // Vertical RAM address end position// ----------- Adjust the Gamma Curve ----------//Write_LCDReg(0x30, 0x0000);Write_LCDReg(0x31, 0x0706);Write_LCDReg(0x32, 0x0206);Write_LCDReg(0x33, 0x0300);Write_LCDReg(0x34, 0x0002);Write_LCDReg(0x35, 0x0000);Write_LCDReg(0x36, 0x0707);Write_LCDReg(0x37, 0x0200);Write_LCDReg(0x3A, 0x0908);Write_LCDReg(0x3B, 0x0F0D);//************* Special command **************/Write_LCDReg(0x28, 0x0006); // Enable test commandWrite_LCDReg(0x2F, 0x12EB); // RAM speed tuningWrite_LCDReg(0x26, 0x7000); // Internal Bandgap strengthWrite_LCDReg(0x20, 0xB0E3); // Internal Vcom strengthWrite_LCDReg(0x27, 0x0044); // Internal Vcomh/VcomL timingWrite_LCDReg(0x2E, 0x7E45); // VCOM charge sharing time//************* Turn On display ******************/Write_LCDReg(0x10, 0x0000); // Sleep mode off.Delay_Ms(3); // Wait 30mS#if LCD_ID_AM == 000Write_LCDReg(0x11, 0x6840); //262K色彩水平方向送数据,水平和垂直方向地址递减#elif LCD_ID_AM == 010Write_LCDReg(0x11, 0x6850); //262K色彩Entry mode setup. 262K type B, take care on the data bus with 16it only#elif LCD_ID_AM == 100Write_LCDReg(0x11, 0x6860); //262K色彩Entry mode setup. 262K type B, take care on the data bus with 16it only#elif LCD_ID_AM == 110Write_LCDReg(0x11, 0x6870); //262K色彩Entry mode setup. 262K type B, take care on the data bus with 16it only#elif LCD_ID_AM == 001Write_LCDReg(0x11, 0x6848); //262K色彩Entry mode setup. 262K type B, take care on the data bus with 16it only#elif LCD_ID_AM == 011Write_LCDReg(0x11, 0x6858); //262K色彩Entry mode setup. 262K type B, take care on the data bus with 16it only#elif LCD_ID_AM == 101Write_LCDReg(0x11, 0x6868); //262K色彩Entry mode setup. 262K type B, take care on the data bus with 16it only#elif LCD_ID_AM == 111Write_LCDReg(0x11, 0x6878); //262K色彩Entry mode setup. 262K type B, take care on the data bus with 16it only#endifWrite_LCDReg(0x07, 0x0033); // Display ON */}else{LCD_WR_REG(0x00E2); //PLL multiplier, set PLL clock to 120MLCD_WR_DATA(0x0023); //N=0x36 for 6.5M, 0x23 for 10M crystal LCD_WR_DATA(0x0002);LCD_WR_DATA(0x0004);LCD_WR_REG(0x00E0); // PLL enableLCD_WR_DATA(0x0001);Delay_Ms(1);LCD_WR_REG(0x00E0);LCD_WR_DATA(0x0003);Delay_Ms(5);LCD_WR_REG(0x0001); // software resetDelay_Ms(5);LCD_WR_REG(0x00E6); //PLL setting for PCLK, depends on resolution LCD_WR_DATA(0x0001);LCD_WR_DATA(0x0033);LCD_WR_DATA(0x0032);LCD_WR_REG(0x00B0); //LCD SPECIFICATIONLCD_WR_DATA(0x0020);LCD_WR_DATA(0x0000);LCD_WR_DATA((HDP>>8)&0X00FF); //Set HDPLCD_WR_DATA(HDP&0X00FF);LCD_WR_DATA((VDP>>8)&0X00FF); //Set VDPLCD_WR_DATA(VDP&0X00FF);LCD_WR_DATA(0x0000);LCD_WR_REG(0x00B4); //HSYNCLCD_WR_DATA((HT>>8)&0X00FF); //Set HTLCD_WR_DATA(HT&0X00FF);LCD_WR_DATA((HPS>>8)&0X00FF); //Set HPSLCD_WR_DATA(HPS&0X00FF);LCD_WR_DATA(HPW); //Set HPWLCD_WR_DATA((LPS>>8)&0X00FF); //Set HPSLCD_WR_DATA(LPS&0X00FF);LCD_WR_DATA(0x0000);LCD_WR_REG(0x00B6); //VSYNCLCD_WR_DATA((VT>>8)&0X00FF); //Set VTLCD_WR_DATA(VT&0X00FF);LCD_WR_DATA((VPS>>8)&0X00FF); //Set VPSLCD_WR_DATA(VPS&0X00FF);LCD_WR_DATA(VPW); //Set VPWLCD_WR_DATA((FPS>>8)&0X00FF); //Set FPSLCD_WR_DATA(FPS&0X00FF);// Write_LCDReg(0x00BA);// LCD_WR_DATA(0x000F); //GPIO[3:0] out 1// Write_LCDReg(0x00B8);// LCD_WR_DATA(0x0007); //GPIO3=input, GPIO[2:0]=output// LCD_WR_DATA(0x0001); //GPIO0 normal// Write_LCDReg(0x0036); //rotation// LCD_WR_DATA(0x0000);// LCD_WR_DATA(0x0060);//============================================//============================================// Write_LCDReg(0x003A); //rotation// LCD_WR_DATA(0x0050);// Write_LCDReg(0x0026); //rotation// LCD_WR_DATA(0x0003);// Write_LCDReg(0x0030); //rotation// LCD_WR_DATA(0x0000);//=============================================//=============================================LCD_WR_REG(0x00F0); //pixel data interfaceLCD_WR_DATA(0x0002);Delay_Ms(5);LCD_Clear(BLACK);LCD_WR_REG(0x0029); //display onDelay_Ms(50);}LCD_Clear(BLACK);}这个初始化函数可以对两种lcd初始化,一种是我们的3.2寸屏,一种是我们的4.3寸屏ssd1963 关于fsmc 和GPIO初始化,还有3.2的初始化已经说过了,下面是对应4.3的初始化代码else{LCD_WR_REG(0x00E2); //PLL multiplier, set PLL clock to 120MLCD_WR_DATA(0x0023); //N=0x36 for 6.5M, 0x23 for 10M crystalLCD_WR_DATA(0x0002);LCD_WR_DATA(0x0004);LCD_WR_REG(0x00E0); // PLL enableLCD_WR_DATA(0x0001);Delay_Ms(1);LCD_WR_REG(0x00E0);LCD_WR_DATA(0x0003);Delay_Ms(5);LCD_WR_REG(0x0001); // software resetDelay_Ms(5);LCD_WR_REG(0x00E6); //PLL setting for PCLK, depends on resolutionLCD_WR_DATA(0x0001);LCD_WR_DATA(0x0033);LCD_WR_DATA(0x0032);LCD_WR_REG(0x00B0); //LCD SPECIFICATIONLCD_WR_DATA(0x0020);LCD_WR_DATA(0x0000);LCD_WR_DATA((HDP>>8)&0X00FF); //Set HDPLCD_WR_DATA(HDP&0X00FF);LCD_WR_DATA((VDP>>8)&0X00FF); //Set VDPLCD_WR_DATA(VDP&0X00FF);LCD_WR_DATA(0x0000);LCD_WR_REG(0x00B4); //HSYNCLCD_WR_DATA((HT>>8)&0X00FF); //Set HTLCD_WR_DATA(HT&0X00FF);LCD_WR_DATA((HPS>>8)&0X00FF); //Set HPSLCD_WR_DATA(HPS&0X00FF);LCD_WR_DATA(HPW); //Set HPWLCD_WR_DATA((LPS>>8)&0X00FF); //Set HPSLCD_WR_DATA(LPS&0X00FF);LCD_WR_DATA(0x0000);LCD_WR_REG(0x00B6); //VSYNCLCD_WR_DATA((VT>>8)&0X00FF); //Set VTLCD_WR_DATA(VT&0X00FF);LCD_WR_DATA((VPS>>8)&0X00FF); //Set VPSLCD_WR_DATA(VPS&0X00FF);LCD_WR_DATA(VPW); //Set VPWLCD_WR_DATA((FPS>>8)&0X00FF); //Set FPSLCD_WR_DATA(FPS&0X00FF);// Write_LCDReg(0x00BA);// LCD_WR_DATA(0x000F); //GPIO[3:0] out 1// Write_LCDReg(0x00B8);// LCD_WR_DATA(0x0007); //GPIO3=input, GPIO[2:0]=output// LCD_WR_DATA(0x0001); //GPIO0 normal// Write_LCDReg(0x0036); //rotation// LCD_WR_DATA(0x0000);// LCD_WR_DATA(0x0060);//============================================//============================================// Write_LCDReg(0x003A); //rotation// LCD_WR_DATA(0x0050);// Write_LCDReg(0x0026); //rotation// LCD_WR_DATA(0x0003);// Write_LCDReg(0x0030); //rotation// LCD_WR_DATA(0x0000);//=============================================//=============================================LCD_WR_REG(0x00F0); //pixel data interfaceLCD_WR_DATA(0x0002);Delay_Ms(5);LCD_Clear(BLACK);LCD_WR_REG(0x0029); //display onDelay_Ms(50);}LCD_WR_REG(0x00E0); 使能了PLLLCD_WR_REG(0x00E6); //PLL setting for PCLK, depends on resolutionLCD_WR_DATA(0x0001);LCD_WR_DATA(0x0033);LCD_WR_DATA(0x0032);这4句配置了PLL,第一句是命令后面的3字节是配置的参数LCD_WR_REG(0x00B0); //LCD SPECIFICATIONLCD_WR_DATA(0x0020);LCD_WR_DATA(0x0000);LCD_WR_DATA((HDP>>8)&0X00FF); //Set HDPLCD_WR_DATA(HDP&0X00FF);LCD_WR_DATA((VDP>>8)&0X00FF); //Set VDPLCD_WR_DATA(VDP&0X00FF);LCD_WR_DATA(0x0000);这几句设置了lcd的屏幕的大小,也就是显示的范围i还有像素点后lcd的接口,像素点后stm32的接口等,就不在一一讲述,请参照ssd1963手册在分析一下清屏函数void LCD_Clear(uint32_t color){int i = 0 ,tmp = 1;unsigned int l=480,w;unsigned char rcode,gcode,bcode;if(color>0xffff00) tmp = 2;rcode = (unsigned char)(color >> 16);gcode = (unsigned char)(color >> 8);bcode = (unsigned char)color;LCD_WR_REG(0x002a);LCD_WR_DATA(0);LCD_WR_DATA(0);LCD_WR_DATA(HDP>>8);LCD_WR_DATA(HDP&0x00ff);LCD_WR_REG(0x002b);LCD_WR_DATA(0);LCD_WR_DATA(0);LCD_WR_DATA(VDP>>8);LCD_WR_DATA(VDP&0x00ff);LCD_WR_REG(0x002c);while(l--){for(w=0;w<272;w++){LCD_WR_DATA((rcode << 8) | (gcode));LCD_WR_DATA((bcode << 8) | (rcode));LCD_WR_DATA((gcode << 8) | (bcode));for(i = 25*tmp;i>0;i--);}}}rcode = (unsigned char)(color >> 16);gcode = (unsigned char)(color >> 8);bcode = (unsigned char)color;这三句把部分的RGB提取出来,这里相信大家不一定看得懂,请参照下面的代码和下面的图片思考代码:LCD_WR_DATA((rcode << 8) | (gcode));LCD_WR_DATA((bcode << 8) | (rcode));LCD_WR_DATA((gcode << 8) | (bcode));图片:while(l--){for(w=0;w<272;w++){LCD_WR_DATA((rcode << 8) | (gcode));LCD_WR_DATA((bcode << 8) | (rcode));LCD_WR_DATA((gcode << 8) | (bcode));for(i = 25*tmp;i>0;i--);}}I = 480的4.3 屏是272*480的,所以这里I是480,这里就循环480*272次,循环一次就会发送,6字节数据,为啥会发送6字节呢,因为一次会发送16位,一共发送3次,为什么发送3次,因为,我们用的1字节代表RGB中的一个可以看出来,这里的关于所有的lcd代码都是先写寄存器,然后在跟几个参数(有些没有参数),这样看起来没有3.2寸的方便,我们可以将这些写成一个函数如,lcd_write(unsigned int reg,unsignd char ** arg,unsigned char i); 第一个是写的寄存器,第二个是参数列表,第三个事参数个数,我们不这样写,因为这样调用一共函数的话,可能会有很多参数的入栈,还有参数的出栈,这样会消耗大量时间,不过对于不分应用,这点时间也不算什么。

基于STM32F103的触摸屏驱动模块设计综述

基于STM32F103的触摸屏驱动模块设计综述

基于STM32F103x的LCD触摸屏驱动的设计姓名:______徐进东_______学号:______10030227_____班级:______10 计卓______目录1 概述 (3)2 LCD液晶显示屏 (3)2.1 LCD液晶显示屏原理 (3)2.2 LCD液晶显示屏分类 (3)3 触摸屏驱动原理概述 (4)3.1 电阻触摸屏工作原理 (4)3.2 触摸屏控制实现 (4)4 设计目标 (4)5 系统硬件设计 (5)5.1 STM32微处理器FSMC接口 (5)5.2 LCD液晶显示屏介绍 (7)5.3 触摸屏控制板 (8)6 系统软件设计 (10)6.1 系统软件结构 (10)6.2 头文件设计 (11)6.2 硬件初始化程序 (11)6.3 3寸LCD模块驱动程序 (14)6.4 触摸坐标获取程序 (19)6.5 LCD控制器控制程序 (22)7 总结 (24)1 概述LCD液晶显示屏与触摸屏在嵌入式系统中的应用越来越普及。

他们是非常简单、方便、自然的人机交互方式,目前广泛应用于便携式仪器、智能家电、掌上设备等领域。

触摸屏与LCD液晶显示技术的紧密结合,成了主流配置。

LCD液晶显示屏(LCD Module , LCM)是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源以及结构件装配在仪器的组件。

触摸屏技术在我国的应用时间不是太长,但它已经成长为人们最为接受的输入方式。

利用这种技术人们只需触碰屏幕就可以对主机进行操作,是人机交互更为方便,直截了当。

本文档是对LCD液晶显示屏和触摸屏驱动的设计做深入介绍。

2 LCD液晶显示屏2.1 LCD液晶显示屏原理液晶(Liquid Crystal):是一种介于固态和液态之间的具有规则性分子排列,及晶体的光学各向异性的有机化合物,液晶在受热到一定温度的时候会呈现透明状的液体状态,而冷却则会出现结晶颗粒的混浊固体状态,因为物理上具有液体与晶体的特性,故称之为“液晶”。

电子信息-基于ALIENTKE MiniSTM32开发板的触摸屏实验

电子信息-基于ALIENTKE MiniSTM32开发板的触摸屏实验

基于ALIENTKE MiniSTM32开发板的触摸屏实验摘要:ALIENTKE MiniSTM32开发板本身并没有触摸屏控制器,但是它支持触摸屏,可以通过外接带触摸屏的LCD模块(比如ALIENTEK TFTLCD模块),来实现触摸屏控制。

利用软件模拟来实现对TFTLCD模块的触摸屏控制,最终实现手写功能。

关键词:ALIENTKE MiniSTM32开发板;TFTLCD模块;触摸屏控制;手写功能英文摘要序言嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。

通常嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。

事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。

ALIENTKE MiniSTM32是基于ARM Cortex-M3内核的32位处理器,具有较低的功耗控制以及众多的外设接口,而且最重要的是它的性价比非常高,同时STM32支持JTAG/SWD,支持串口下载,其主要特点如下:(1)复用IO口重映摄功能。

由于有些复用功能可以重映射,使得STM32在PCB设计的时候,方便很多。

(2)全部引脚都可以作为中断输入。

全部IO口都可以作为中断输入,这点比很多ARM好,当要使用中断的时候,随便那个IO口都可以,而不需要接到特定的几个脚上,这样极大的方便了电路图设计。

(3)SWD调试支持。

STM32支持SWD调试,只需要2跟IO线,就可以用来调试和下载代码,对引脚不多的型号尤其适用。

(4)串口下载程序。

串口下载代码是很多ARM芯片都具有的功能,STM32也保留了这一优秀设计,极大的降低了开发成本(不需要什么JLINK、ULINK之类的了,也不需要专门的下载器)。

1 触摸屏TFTLCD简介液晶所用的触摸屏,一般是电阻式触摸屏(多点触摸属于电容式触摸屏,比如M8,IPhone等支持多点触摸的手机所用的屏就是电容式的触摸屏),TFTLCD 就属于电阻式触摸屏。

《stm32f103单片机应用开发实例》

《stm32f103单片机应用开发实例》

一、介绍STM32F103单片机STM32F103是STMicroelectronics公司推出的一款基于ARM Cortex-M3内核的微控制器,具有丰富的外设和强大的性能,被广泛应用于工业控制、汽车电子、消费类电子等领域。

本文将通过一些实际的应用开发示例,介绍STM32F103单片机的应用开发。

二、STM32F103单片机开发环境搭建1. 硬件环境2. 软件环境3. 开发工具的选择和配置4. 开发过程中常见问题的解决方法三、基本的STM32F103单片机应用开发1. 点亮LED灯2. 控制LED灯的闪烁3. 串口通信4. 定时器应用5. 外部中断应用四、STM32F103单片机外设的应用开发1. 通用定时器 (TIM) 的应用开发2. 串行外设接口 (SPI) 的应用开发3. 串行通信接口 (USART) 的应用开发4. 直接存储器访问 (DMA) 的应用开发5. PWM 的应用开发五、STM32F103单片机高级应用开发1. 定时器中断和DMA传输的应用2. 外部中断和定时器的结合应用3. 外设之间的协同工作应用开发4. 看门狗 (Watchdog) 的应用开发5. 低功耗模式下的应用开发六、实例分析和实验结果1. 确定应用目标2. 使用STM32CubeMX生成代码3. 编写应用程序代码4. 调试和验证5. 总结和改进七、总结和展望通过以上的实例分析和实验结果,我们对STM32F103单片机的应用开发有了更深入的理解。

在未来,随着技术的不断发展,STM32F103单片机的应用将会更加广泛,我们也将在实际项目中不断总结经验,进一步完善应用开发方法,为相关领域的技术创新和应用发展做出更大的贡献。

以上就是《STM32F103单片机应用开发实例》的相关内容,希望可以对您有所帮助。

八、实例分析和实验结果为了更好地理解STM32F103单片机的应用开发,我们将具体分析一个LED灯控制的实例,并展示实验结果。

单片机STM32实验报告

单片机STM32实验报告

单片机STM32实验报告

STM32单片机实验报告
实验目的
通过本实验,掌握STM32单片机的编程,掌握实验板的控制,熟悉STM32外设,以及学习ARM Cortex-M3架构。

实验内容
本实验使用STM32F103ZET6开发板,实现了LED灯的闪烁,LCD和5*5键盘显示数字键的输入。

实验原理
实验中LED灯的功能使用GPIO口的控制,将PD2脚接线到LED灯,通过编程让PD2脚的低逻辑电平将输出口设置为低电平,实现LED灯的闪烁;LCD1602的数字输入口使用4*4数字键盘,使用其端口旁路输出,实现输入检测;5*5键盘使用端口旁路输出,对输入的检测,并将输入的数字键显示在LCD1602上,实现数字键盘编程。

实验结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

表 16.1.1 0XD3 指令描述 从上表可以看出, 0XD3 指令后面跟了 4 个参数, 最后 2 个参数, 读出来是 0X93 和 0X41, 刚好是我们控制器 ILI9341 的数字部分,从而,通过该指令,即可判别所用的 LCD 驱动器是什 么型号,这样,我们的代码,就可以根据控制器的型号去执行对应驱动 IC 的初始化代码,从而 兼容不同驱动 IC 的屏,使得一个代码支持多款 LCD。 接下来看指令:0X36,这是存储访问控制指令,可以控制 ILI9341 存储器的读写方向,简 单的说,就是在连续写 GRAM 的时候,可以控制 GRAM 指针的增长方向,从而控制显示方式
16.1 TFTLCD 简介
本章我们将通过 STM32 的普通 IO 口模拟 8080 总线来控制 TFTLCD 的显示。TFT-LCD 即 薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display。TFT-LCD 与无源 TN-LCD、STN-LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄 膜晶体管(TFT) ,可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关, 因此大大提高了图像质量。TFT-LCD 也被叫做真彩液晶显示器。 上一章介绍了 OLED 模块,本章,我们给大家介绍 ALIENTEK TFTLCD 模块,该模块有 如下特点: 1,2.4’/2.8’/3.5’/4.3’/7’ 5 种大小的屏幕可选。 2,320×240 的分辨率(3.5’分辨率为:320*480,4.3’和 7’分辨率为:800*480) 。 3,16 位真彩显示。 4,自带触摸屏,可以用来作为控制输入。 本章,我们以 2.8 寸的 ALIENTEK TFTLCD 模块为例介绍,该模块支持 65K 色显示,显示 分辨率为 320×240,接口为 16 位的 80 并口,自带触摸屏。 该模块的外观图如图 16.1.1 所示:
表 16.1.3 MY、MX、MV 设置与 LCD 扫描方向关系表 这样,我们在利用 ILI9341 显示内容的时候,就有很大灵活性了,比如显示 BMP 图片, BMP 解码数据,就是从图片的左下角开始,慢慢显示到右上角,如果设置 LCD 扫描方向为从 左到右,从下到上,那么我们只需要设置一次坐标,然后就不停的往 LCD 填充颜色数据即可, 这样可以大大提高显示速度。 接下来看指令:0X2A,这是列地址设置指令,在从左到右,从上到下的扫描方式(默认) 下面,该指令用于设置横坐标(x 坐标) ,该指令如表 16.1.4 所示:
各位描述 HEX RS WR D15~D8 D7 D6 D5 D4 D3 D2 D1 D0 指令 0 ↑ XX 0 0 1 0 1 0 1 0 2AH 参数 1 1 ↑ XX SC15 SC14 SC13 SC12 SC11 SC10 SC9 SC8 SC 参数 2 1 ↑ XX SC7 SC6 SC5 SC4 SC3 SC2 SC1 SC0 参数 3 1 ↑ XX EC15 EC14 EC13 EC12 EC11 EC10 EC9 EC8 EC 参数 4 1 ↑ XX EC7 EC6 EC5 EC4 EC3 EC2 EC1 EC0 表 16.1.4 0X2A 指令描述 在默认扫描方式时, 该指令用于设置 x 坐标, 该指令带有 4 个参数, 实际上是 2 个坐标值: SC 和 EC,即列地址的起始值和结束值,SC 必须小于等于 EC,且 0≤SC/EC≤239。一般在设 置 x 坐标的时候,我们只需要带 2 个参数即可,也就是设置 SC 即可,因为如果 EC 没有变化, 我们只需要设置一次即可(在初始化 ILI9341 的时候设置) ,从而提高速度。 与 0X2A 指令类似,指令:0X2B,是页地址设置指令,在从左到右,从上到下的扫描方式 (默认)下面,该指令用于设置纵坐标(y 坐标) 。该指令如表 16.1.5 所示: 顺序
模块的 RST 信号线是直接接到 STM32 的复位脚上,并不由软件控制,这样可以省下来一个 IO 口。另外我们还需要一个背光控制线来控制 TFTLCD 的背光。所以,我们总共需要的 IO 口数 目为 21 个。这里还需要注意,我们标注的 DB1~DB8,DB10~DB17,是相对于 LCD 控制 IC 标 注的,实际上大家可以把他们就等同于 D0~D15(按从小到大顺序) ,这样理解起来简单点。 ALIENTEK 提供 2.8/3.5/4.3/7 寸等不同尺寸的 TFTLCD 模块,其驱动芯片有很多种类型, 比如有:ILI9341/ILI9325/RM68042/RM68021/ILI9320/ILI9328/LGDP4531/LGDP4535/SPFD5408 /SSD1289/1505/B505/C505/NT35310/NT35510/SSD1963 等(具体的型号, 大家可以通过下载本章 实验代码,通过串口或者 LCD 显示查看),这里我们仅以 ILI9341 控制器为例进行介绍,其他 的控制基本都类似,我们就不详细阐述了。 ILI9341 液晶控制器自带显存,其显存总大小为 172800(240*320*18/8) ,即 18 位模式(26 万色)下的显存量。在 16 位模式下,ILI9341 采用 RGB565 格式存储颜色数据,此时 ILI9341 的 18 位数据线与 MCU 的 16 位数据线以及 LCD GRAM 的对应关系如图 16.1.4 所示:
表 16.1.2 0X36 指令描述 从上表可以看出,0X36 指令后面,紧跟一个参数,这里我们主要关注:MY、MX、MV 这三个位,通过这三个位的设置,我们可以控制整个 ILI9341 的全部扫描方向,如表 16.1.3 所 示: 控制位 MY 0 1 0 1 0 0 1 1 MX 0 0 1 1 0 1 0 1 MV 0 0 0 0 1 1 1 1 效果 LCD 扫描方向(GRAM 自增方式) 从左到右,从上到下 从左到右,从下到上 从右到左,从上到下 从右到左,从下到上 从上到下,从左到右 从上到下,从右到左 从下到上,从左到右 从下到上,从右到左
图 16.1.1 ALIENTEK 2.8 寸 TFTLCD 外观图 模块原理图如图 16.1.2 所示:
图 16.1.2 ALIENTEK 2.8 寸 TFTLCD 模块原理图 TFTLCD 模块采用 2*17 的 2.54 公排针与外部连接,接口定义如图 16.1.3 所示:
图 16.1.3 ALIENTEK 2.8 寸 TFTLCD 模块接口图 从图 16.1.3 可以看出,ALIENTEK TFTLCD 模块采用 16 位的并方式与外部连接,之所以 不采用 8 位的方式, 是因为彩屏的数据量比较大, 尤其在显示图片的时候, 如果用 8 位数据线, 就会比 16 位方式慢一倍以上, 我们当然希望速度越快越好, 所以我们选择 16 位的接口。 图 16.1.3 还列出了触摸屏芯片的接口,关于触摸屏本章我们不多介绍,后面的章节会有详细的介绍。该 模块的 80 并口有如下一些信号线: CS:TFTLCD 片选信号。 WR:向 TFTLCD 写入数据。 RD:从 TFTLCD 读取数据。 D[15:0]:16 位双向数据线。 RST:硬复位 TFTLCD。 RS:命令/数据标志(0,读写命令;1,读写数据) 。 80 并口在上一节我们已经有详细的介绍了, 这里我们就不再介绍, 需要说明的是, TFTLCD

(读 GRAM 也是一样) 。该指令如表 16.1.2 所示: 顺序 指令 参数 控制 RS 0 1 RD 1 1 WR ↑ ↑ D15~D8 XX XX D7 0 MY D6 0 MX 各位描述 D5 1 MV D4 1 ML D3 0 BGR D2 1 MH D1 1 0 D0 0 0 HEX 36H 0
第十六章 TFTLCD 显示实验
上一章我们介绍了 OLED 模块及其显示,但是该模块只能显示单色/双色,不能显示彩色, 而且尺寸也较小。本章我们将介绍 ALIENTEK 2.8 寸 TFT LCD 模块,该模块采用 TFTLCD 面 板,可以显示 16 位色的真彩图片。在本章中,我们将使用 MiniSTM32 开发板上的 LCD 接口, 来点亮 TFTLCD,并实现 ASCII 字符和彩色的显示等功能,并在串口打印 LCD 控制器 ID,同 时在 LCD 上面显示。本章分为如下几个部分: 16.1 TFTLCD 简介 16.2 硬件设计 16.3 软件设计 16.4 下载验证
控制 RD 1 1 1 1 1
各位描述 HEX RS WR D15~D8 D7 D6 D5 D4 D3 D2 D1 D0 指令 0 ↑ XX 0 0 1 0 1 0 1 0 2BH 参数 1 1 ↑ XX SP15 SP14 SP13 SP12 SP11 SP10 SP9 SP8 SP 参数 2 1 ↑ XX SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 参数 3 1 ↑ XX EP15 EP14 EP13 EP12 EP11 EP10 EP9 EP8 EP 参数 4 1 ↑ XX EP7 EP6 EP5 EP4 EP3 EP2 EP1 EP0 表 16.1.5 0X2B 指令描述 在默认扫描方式时, 该指令用于设置 y 坐标, 该指令带有 4 个参数, 实际上是 2 个坐标值: SP 和 EP,即页地址的起始值和结束值,SP 必须小于等于 EP,且 0≤SP/EP≤319。一般在设置 y 坐标的时候,我们只需要带 2 个参数即可,也就是设置 SP 即可,因为如果 EP 没有变化,我 们只需要设置一次即可(在初始化 ILI9341 的时候设置) ,从而提高速度。 接下来看指令:0X2C,该指令是写 GRAM 指令,在发送该指令之后,我们便可以往 LCD 的 GRAM 里面写入颜色数据了,该指令支持连续写,指令描述如表 16.1.6 所示: 控制 各位描述 顺序 HEX RS RD WR D15~D8 D7 D6 D5 D4 D3 D2 D1 D0 指令 0 1 ↑ XX 0 0 1 0 1 1 0 0 2CH 参数 1 1 1 ↑ D1[15:0] XX …… 1 1 ↑ D2[15:0] XX 参数 n 1 1 ↑ Dn[15:0] XX 表 16.1.6 0X2C 指令描述 从上表可知,在收到指令 0X2C 之后,数据有效位宽变为 16 位,我们可以连续写入 LCD GRAM 值,而 GRAM 的地址将根据 MY/MX/MV 设置的扫描方向进行自增。例如:假设设置 的是从左到右,从上到下的扫描方式,那么设置好起始坐标(通过 SC,SP 设置)后,每写入 一个颜色值,GRAM 地址将会自动自增 1(SC++) ,如果碰到 EC,则回到 SC,同时 SP++,一 直到坐标:EC,EP 结束,其间无需再次设置的坐标,从而大大提高写入速度。 最后, 来看看指令: 0X2E, 该指令是读 GRAM 指令, 用于读取 ILI9341 的显存 (GRAM) , 该指令在 ILI9341 的数据手册上面的描述是有误的,真实的输出情况如表 16.1.7 所示: 控制 各位描述 顺序 HEX RS RD WR D15~D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 指令 0 1 ↑ XX 0 0 1 0 1 1 1 0 2EH 参数 1 1 ↑ 1 XX dummy 参数 2 1 ↑ 1 R1[4:0] XX G1[5:0] XX R1G1 参数 3 1 ↑ 1 B1[4:0] XX R2[4:0] XX B1R2 参数 4 1 ↑ 1 G2[5:0] XX B2[4:0] XX G2B2 参数 5 1 ↑ 1 R3[4:0] XX G3[5:0] XX R3G3 参数 N 1 ↑ 1 按以上规律输出 表 16.1.7 0X2E 指令描述 该指令用于读取 GRAM, 如表 16.1.7 所示, ILI9341 在收到该指令后, 第一次输出的是 dummy 数据,也就是无效的数据,第二次开始,读取到的才是有效的 GRAM 数据(从坐标:SC,SP 开始) ,输出规律为:每个颜色分量占 8 个位,一次输出 2 个颜色分量。比如:第一次输出是 R1G1,随后的规律为:B1R2G2B2R3G3B3R4G4B4R5G5... 以此类推。如果我们只 需要读取一个点的颜色值,那么只需要接收到参数 3 即可,如果要连续读取(利用 GRAM 地址 顺序
相关文档
最新文档