有两个LCD机架显示找不到模块模块,想找一家做一批,怎么选

最全点阵LCD的显示原理与使用方法详解
点阵LCD的显示原理
在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。
那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的&A&在字模的记载方式如图1所示:
图1 &A&字模图
而中文的&你&在字模中的记载却如图2所示:
图2 &你&字模图
12864点阵型LCD简介
12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128&64全点阵液晶显示器组成。可完成图形显示,也可以显示8&4个(16&16点阵)汉字。
在使用12864LCD前先必须了解以下功能器件才能进行编程。12864内部功能器件及相关功能如下:
1. 指令寄存器(IR)
IR是用于寄存指令码,与数据寄存器数据相对应。当D/I=0时,在E信号下降沿的作用下,指令码写入IR。
2.数据寄存器(DR)
DR是用于寄存数据的,与指令寄存器寄存指令相对应。当D/I=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7∽DB0数据总线。DR和DDRAM之间的数据传输是模块内部自动执行的。
3.忙标志:BF
BF标志提供内部工作情况。BF=1表示模块在内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。
利用STATUS READ指令,可以将BF读到DB7总线,从检验模块之工作状态。
4.显示控制触发器DFF
此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY OFF),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。
DDF的状态是指令DISPLAY ON/OFF和RST信号控制的。
5.XY地址计数器
XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。
X地址计数器是没有记数功能的,只能用指令设置。
Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。
6.显示数据RAM(DDRAM)
DDRAM是存储图形显示数据的。数据为1表示显示选择,数据为0表示显示非选择。DDRAM与地址和显示位置的关系见DDRAM地址表。
7.Z地址计数器
Z地址计数器是一个6位计数器,此计数器具备循环记数功能,它是用于显示行扫描同步。当一行扫描完成,此地址计数器自动加1,指向下一行扫描数据,RST复位后Z地址计数器为0。
Z地址计数器可以用指令DISPLAY START LINE预置。因此,显示屏幕的起始行就由此指令控制,即DDRAM的数据从哪一行开始显示在屏幕的第一行。此模块的DDRAM共64行,屏幕可以循环滚动显示64行。
12864LCD的指令系统及时序
该类液晶显示模块(即KS0108B及其兼容控制驱动器)的指令系统比较简单,总共只有七种。其指令表如表2所示:
各功能指令分别介绍如下。
显示开/关指令
该指令设置了对应液晶屏最上一行的显示RAM的行号,有规律地改变显示起始行,可以使LCD实现显示滚屏的效果。
3、页(PAGE)设置指令
该指令用来查询液晶显示模块内部控制器的状态,各参量含义如下:
BUSY:1-内部在工作0-正常状态
ON/OFF:1-显示关闭0-显示打开
RESET:1-复位状态0-正常状态
在BUSY和RESET状态时,除读状态指令外,其它指令均不对液晶显示模块产生作用。
在对液晶显示模块操作之前要查询BUSY状态,以确定是否可以对液晶显示模块进行操作。
6、写数据指令
11读显示数据
读、写数据指令每执行完一次读、写操作,列地址就自动增一。必须注意的是,进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。
12864点阵型LCD软硬件设计实例
通过以上学习,现在就来实际应用12864LCD的软硬件设计。本实例将在LCD上显示如图3所示内容:
图3 模拟显示效果图
在调试前先将显示切换开关切换到LCD显示状态。
图4 128*64LCD实验演示图
硬件原理图
图5 硬件原理图
程序流程图
图6 软件流程图
在编写软件代码之前必须要先掌握汉字取模的方法。要得到上表中的文字,我们可以借助取模软件来完成。目前点阵LCD的取模软件有很多,我们以本开发板配套的取模软件为例来介绍一下汉字的取模方法。
打开取模软件出现如下显示界面:
在文字输入区中输入文字,我们以输入一个欢迎的&欢&字为例,了解其取模过程。在文字输入区中输入&欢&后按CTRL+ENTER组合键后就看到&欢&字已经在模拟显示区显示出来了
在&取模方式&中选择&C51格式&就可以在&点阵生成区&得到你要的汉字&欢&的显示代码。
经过以上步骤后一个汉字就取模成功了,在程序中只要调用这段代码就可显示出汉字&欢&了,其它汉字也用同样的方法。取完要显示的全部汉字代码后我们就可以编程了。
关注电子发烧友微信
有趣有料的资讯及技术干货
下载发烧友APP
打造属于您的人脉电子圈
关注发烧友课堂
锁定最新课程活动及技术直播
2017对于显示设备市场来说是具卓越意义的一年,营收增长30%达247亿美金如图一所示,密集投资的O...
手机屏幕开始呈现LCD和OLED的分化,OLED是好处在于色域更广、亮度更高、更省电,同时也是异形全...
以柔性全色OLED显示屏为例,目前三星生产的OLED屏可以实现弯曲,再下一步就是要做到可卷,最后是做...
分此前我们曾报道,LG 今年的新旗舰G7由于考虑成本,可能不会配备OLED屏幕,不过LG目前还暂未最...
韩国媒体报道称,LG的下一代旗舰产品G7手机将会推出两个版本,一种采用OLED屏幕,另外一种采用LC...
Zoom 今天宣布新的 H1n 手持录音机已经上市销售。这是一款小巧的适用于电影、音乐、博客等的录音...
在LCD背光源的材料组成中,扩散膜几乎是必不可少的材料之一。扩散膜按制作方法分类,有涂布式及非涂布式...
该文以ARM11处理器S3C6410为平台,基于Linux操作系统设计了一种在ARM11内核直接控制...
按照目前主流的分类,屏幕有 LCD 和 OLED。这两种因为显示机制和生产工艺的不同,在产线世代上也...
如何充分利用成本低、资源少的单片机系统实现完善的人机交互功能已成为单片机设计者需要解决的一个问题。
友达光电董事长彭双浪表示,2018年全球面板供给与需求增幅大约都在6~8%,显示供需大致还平衡,公司...
说起 LCD,你一定不陌生,毕竟手机、电脑、显示器都已经用了很多年了。但说到 OLCD,你可能会觉得...
液晶屏幕的结构比较复杂,分背光层和液晶材料层,而震动又会对液晶分子的偏转产生影响。所以以屏幕震动产生...
Android系统在正常启动中,刷屏功能一般在内核中执行,而Bootloader的任务应该是执行硬件...
台湾显示器制造商中华映管(CPT)在Touch Taiwan台湾触控、面板暨光学膜展览会上展出了采用...
柔板显示是非常具有前景的显示技术,通过很多的研究者和工程师的努力开发,柔性显示技术发展迅速。在不久的...
LCM英文全称Liquid Crystal Display Module,即LCD显示模组、液晶模块...
大家都在期待OLED/量子点会带来更多的突破,但是根据目前状况来看,OLED也许表现的根本没那么好,...
京东方作为我国供给侧改革创新的典范,推动中国面板产业升级。同时京东方物联网布局提速,与英特尔共同发布...
苹果已经开始下代2018年新款iPhone的屏幕订单,包括5.8英寸和6.5英寸两款OLED屏,以及...
苹果在2018年将会推出三款类似 iPhone X 设计的新机,其中包括两款5.8英寸和6.5英寸的...
随着近几年面板行业的变化,三星逐渐在缩减液晶面板产能,之前强推OLED面板,目前又主推的是QLED面...
LCD显示屏的应用越来越广,数量越来越多。LCD显示屏应用广泛,无处不在。小到家庭各种电器设备,大到...
通过彩色液晶显示器(LCD)取景是数码相机优于传统相机的重要特性之一,它解决了使用取景框取景带来的各...
随着人机界面(GUI)在医疗、工业以及消费电子各应用领域需求的日益增长,高集成度、高性能的TFT液晶...
随着各种图形、图像内容质量的不断提升以及系统运行实时显示的需要,金融、通信、交通、能源、安全、军事等...
不差钱差在哪 LED与LCD拆解对比测试 本周三我们PChome电脑之家推出了围绕在LCD与LED两...
LCD一般就指液晶显示器,是目前市场上的绝对主流产品。液晶显示器可以分为传统CCFL背光、LED背光...
现在国家对家用的电器产品的功耗要求很严格,对功耗的要求还分为了正常工作下的功耗和待机功耗。以目前市场...
OLED具有可弯曲的特点,很多人认为OLED电视将是电视产业的未来之星而不是液晶电视或等离子电视。但...
随着信息化技术的提高,人们对于视觉欣赏的要求越来越高。视觉冲击力成为人们评判显示性能的一个标准。视觉...
本文主要介绍了一种基于STM32芯片和TFT-LCD的便携式心电图仪设计,心电信号由电极获取,送入心...
最近的显示器行业,量子点显示技术大火,各大厂商们趋之若鹜,纷纷开始生产量子点显示器,但显示器行业不可...
LCD的接口有多种,分类很细。主要看LCD的驱动方式和控制方式,目前手机上的彩色LCD的连接方式一般...
LCD是发展较为成熟的显示技术,占据着当今显示领域的主要市场份额。
看日报是个好习惯!
三星在面临夏普取消面板供应之后陷入了面板短缺困境,后来曾多次与LGD洽谈。据悉LGD本月底为三星提供...
IPS技术是日立公司于2001推出的液晶面板技术,俗称“Super TFT”。针对IPS屏幕是什么意...
液晶屏幕拖影多,插黑算法来帮忙;OLED会烧屏,偏移算法来缓解;CPU设计有Bug,补丁BIOS来解...
目前三星电视仍旧是以LCD为主,需要外购面板来作为支撑,其中当时的日本夏普公司供应的LCD面板约50...
我们很容易看到,自然光中的短波光,会通过晶状体,进入人眼,和其他光一样在视网膜成像。
ELQD显示器有可能在未来十年中破坏显示器行业。显示器不需要背光,因为每个子像素都是可寻址的,所以当...
现在越来越多的笔记本厂商开始尝试使用OLED屏幕,作为一种新型的屏幕类型,OLED有着无需背光源,可...
TFT是LCD的一个变种,TFT,Thin Film Transistor薄膜晶体管,是有源矩阵类型...
由于液晶显示器(LCD)的像素相对较大,因此有可能将内存整合在每个像素点的主动式内存背板中;日本夏普...
随着可穿戴设备、智能家居等物联网应用的纵向高速发展,人们寄希望于这些产品也能具有像智能手机一样直观的...
本文主要介绍C52单片机的连接、编程烧录以及测试供大家参考。
导电聚合物材料的电学特性是通过掺杂来控制其电阻率来改变的。因此精确测量导电聚合物的电阻率具有重要意义...
人们生活中的家用电器种类日益增多,遥控器的种类也随之增加,不同种类的遥控器之间一般不能相互替代,这给...
51单片机STC89C52RC是本方案的选用芯片,以其8位处理和极低的价格来看,是很适合进行本次实验...
韩国LGDisplay继关闭3.5代厂后,近期再关闭五代厂,四代厂也将在年底歇业,全力发展AMOLE...
据韩国商报报道,LG最近关闭了位于Gumi(龟尾市)的5代线P4工厂,这是继3.5代线P2工厂后又一...
IHS Markit统计指出,2018年柔性AMOLED面板净面积产能有望达到440万平方米,较20...
在嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路有的需要CPU为之...
LCD的接口有多种,分类很细。主要看LCD的驱动方式和控制方式,目前手机上的彩色LCD的连接方式一般...
这是我十三年前读研究生的时候写的系列文章《C语言嵌入式系统编程修炼》系列文章中的一小节,是一个用面向...
LCD的接口有多种,分类很细。主要看LCD的驱动方式和控制方式,目前手机上的彩色LCD的连接方式一般...
LCD的接口有多种,分类很细。主要看LCD的驱动方式和控制方式,目前手机上的彩色LCD的连接方式一般...
据51单片机和液晶屏1602的原理和相关电路图焊接了一个简单的电子时钟,程序没有问题,但放到焊接的电...
 lcd1602液晶显示怎么编写程序?这边文章主要就是说明LCD1602液晶显示完全资料,但是在编写...
为了可以让大家清楚的了解到lcd1602显示数字程序,小编用89S52单片机做了个程序实验。先来科普...
把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。汇编程序输入的是用汇编语言书写的源程序,...
LCD1602是很多单片机爱好者较早接触的字符型液晶显示器,它的主控芯片是HD44780或者其它兼容...
LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示原理 ...
 LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示原理...
研调机构IHS指出,手机用有机发光二极体(OLED)面板成本逐步降低,接近液晶显示面板(LCD),但...
LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示原理 ...
LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。1602液晶也叫1602字符...
LED显示器与LCD显示器相比,LED在亮度、功耗、可视角度和刷新速率等方面,都更具优势已取消到该网...
lcd1602能否显示汉字 1602液晶是字符型液晶,总共有2行,每行16个字符。每个字符有效的可显...
用LCD显示一个字符时比较复杂在分析lcd1602显示程序之前我们先看看汉字的显示一般采用图形的方式...
在《应用物理快报》(Applied Physics Letters)期刊中,研究人员发表了这项主题为...
DLP是“Digital Light Procession”的缩写,即为数字光处理,也就是说这种技术...
在我国在液晶显示器(LCD)制造关键材料上一直都是无法掌控,主要都是依靠国外进口。近日了解到,北京化...
虽然看一下整个OLED面板出货量的预期,我们就可以看到未来将会呈现持续增加的态势,但是这并不意味着L...
美国加州、MILPITAS --- 日 — 全球领先的半导体解决方案供应商瑞萨电子...
MCU(Microcontroller Unit)即单片机是大家都比较熟悉并常用的电子器件,由于其广...
日前举办的“2017年松山湖中国IC创新高峰论坛”上,集创北方GM兼全球销售副总裁张宁三博士发表重要...
有机发光二极管(Organic Light-Emitting Diode, UIV OLED)又称为...
有机发光二极管(Organic Light-Emitting Diode, UIV OLED)又称为...
全球领先的整合单片机、混合信号、模拟器件和闪存专利解决方案的供应商——Microchip Techn...
使用几小时或几天后,电极变色出现黑、棕色“字迹”,液晶盒产生气泡,以致不能显示。这是由于驱动电压直流...
M6800模式支持可选择的总线宽度8/9/16/18-bit(默认为8位),其实际设计思想是与I80...
单片机控制电路如下图所示,SW3为复位开关,当按下复位开关SW3时,电路复位,单片机处于起始工作状态...
读取一位数码的字形码需要1个周期T(实际只用前半个周期),经测量,T=16.318ms。读取全部位数...
但是,如果是有规律的闪烁或是经常不明原因的闪烁,那就可能是屏幕真的有问题了。先检查是否有接触不良,如...
LCD驱动IC可运用其驱动控制手法来提升液晶画质,由于传统CRT(阴极射线管,俗称:映像管)的显示是...
坏点就是CCD元件上不能成像的点。具体表现就是:每张照片的固定位置出现全白或全黑的斑点,就是CCD元...
其成员函数都在linux/driver/video/fbmem.c中定义,其中的函数对具体的硬件进行...
可能对于保点、售后这些选购基本常识您早已了如指掌,但是,在我们走访卖场以及对产品进行评测的时候发现,...
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司
电信与信息服务业务经营许可证:粤B2-找一家做TN液晶屏的厂家~~_百度知道
找一家做TN液晶屏的厂家~~
定制TN段码式的液晶屏,要是模组的,带驱动IC的,谁推荐个有规模点的厂家。我是研发工程师,要开发新产品,找个厂家合作一下,我们厂是几千人的上市公司。
我有更好的答案
请问你是哪里的?如果是在广东的话那就多了,做LCD玻璃和LCM模块的厂家在广东是特别多,我们也有做,看你的要求建议你这样操作:先去网上搜下,然后选择几家再去考察下,这样会比较稳妥些!
采纳率:28%
为您推荐:
其他类似问题
您可能关注的内容
液晶屏的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。追赶,超越
液晶显示模块的分类和基本知识
液晶显示模块
液晶显示模块是即“Liquid Crystal Display Module”,简称“LCM”,是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源、结构件装配在一起的组件。主要完成液晶显示器的连接功能。
液晶显示模块的分类
一、数显液晶
数显液晶模块是一种由段型件与专用的集成电路组装成一体的功能部件,只能显示数字和一些标识符号。段型液晶显示器件大多应用在便携、袖珍设备上。由于达些设备体积小,所以尽可能不将显示部分设计成单独的部件,即使一些应用领域需要单独的显示组件,那么也应该使其除具有显示功能外,还应具有一些信息接收、处理、存储传递等功能,由于它们具有某种通用的、特定的功能而受市场的欢迎。常见的的数显液晶显示模块有以下几种。
1.计数模块
这是一种由不同位数的七段型液晶显示器件与译码驱动器,或再加上装配成的计数显示部件。它具有记录、处理、显示数字的功能。目前我国市场上能够见到的主要产品有由CD55译码驱动器驱动的单位液晶显示器件显示模块,以及由M72ll,ICM7231,ICM7232,CDl4543,UPDl45001,等集成电路与相应配套的液晶显示器件组装成的4位、6位、8位、10位、位、位计数模块。
2.计量模块
计量模块是一种有多位段型液晶显示器件和具有译码、驱动、计数、A/D转换功能的集成电路片组装而成的模块。由于所用的集成电路中具有A/D转换功能,所以可以将输入的模拟量电信号转换成数字量显示出来。我们知道任何物理量,甚至化学量(如酸碱度等)都可以转换为模拟电量,所以只要配上一定的,这种模块就可以实现任何量值的碉量和显示,使用起来十分方便。计量模块所用的集成电路型号主要有、ICL76、ICL7126、ICL7136、、等,这些集成电路的功能、特性决定了计量模块的功能和特性。作为计量产品,按规定必须进行计量鉴定。经计量部门批准在产品上贴有计量合格证。
3.计时模块
计时模块将液晶显示器件用于计时历史最久,将一个液晶显示器件与一块计时集成电路装配在一起就是一个功能完整的计时器。声于它没有成品钟表的,所以称之为计时模块。计时模块虽然用途很广,但通用、标准型的计时模块却很难在市场上买到,只能到钟表生产厂家去选购或定购合适的表芯,计时模块和计数模块虽然外观相似,但它们的的显示方式不同,计时模块显示的数字是由两位一组两位一组的数字组成的.而计数模块每位数字均是连续排列的。由于不少计时模块还具有定时、控制功能,因此这类模块可广泛装配到一些加电、设备上,如收录机、CD机、微波炉、电饭煲等电器上。
二、液晶点阵字符模块
液晶点阵字符模块是由点阵字符液晶显示器件和专用的行、列驱动器、控制器及必要的连接件,结构件装配而成的,可以显示数字和西文字符。这种点阵字符模块本身具有字符发生器,显示容量大,功能丰富。一般该种模块最少也可以显示8位1行或16位l行以上的字符。这种模块的点阵排列是由5×7、5×8或5×11的一组组像素点阵排列组成的。每组为1位,每位间有一点的间隔,每行间也有一行的间隔,所以不能显示图形,其规格主要如右表所示:
一般在模块控制、驱动器内具有已固化好192个字符字模的字符库CGROM,还具有让用户自定义建立专用字符的随机存储器CGRAM,允许用户建立8个5×8点阵的字符。
三、点阵图形液晶模块
点阵图形液晶模块也是点阵模块的一种,其特点是点阵像素连续排列,行和列在排布中均没有空隔。因此可以显示了连续、完整的图形。由于它也是有X-Y矩阵像素构成的,所以除显示图形外,也可以显示字符。主要有以下几种类型:
1.行、列驱动型
2.行、列驱动-控制型
3.行、列控制型
液晶显示模块的连接方式
1、斑马条连接
2、金属插脚连接()
3、斑马纸连接
4、热压集成电路芯片(COG)
5、热压带载封装片
液晶显示模块的主要参数
分辨率是一个非常重要的性能指标。它指的是屏幕上水平和垂直方向所能够显示的点数(屏幕上显示的线和面都是由点构成的)的多少,分辨率越高,同一屏幕内能够容纳的信息就越多。对于一台能够支持1280x10分辨率的CRT来说,无论是320x240还是1280x分辨率,都能够比较完美地表现出来(因为电子束可以做弹性调整)。但它的最大分辨率未必是最合适的分辨率,因为如果17寸显示器上到分辨率的话,WINDOWS的字体会很小,时间一长眼睛就容易疲劳,所以17寸显示器的最佳分辨率应为。
液晶面板制造时选用的控制IC、滤光片和定向膜等配件,与面板的对比度有关,对一般用户而言,对比度能够达到350:1就足够了,但在专业领域这样的对比度平还不能满足用户的需求。相对CRT显示器轻易达到500:1甚至更高的对比度而言。只有高档液晶显示器才能达到这样如此程度,由于对比度很难通过仪器准确测量,所以挑的时候还是要自己亲自去看才行。
液晶是一种介于与液态之间的物质,本身是不能发光的,需借助要额外的光源才行。因此,灯管数目关系着液晶显示器亮度。最早的液晶显示器只有上下两个灯管,发展到现在,普及型的最低也是四灯,高端的是六灯。四灯管设计分为三种摆放形式:一种是四个边各有一个灯管,但缺点是中间会出现黑影,解决的方法就是由上到下四个灯管平排列的方式,最后一种是“U”型的摆放形式,其实是两灯变相产生的两根灯管。六灯管设计实际使用的是三根灯管,厂商将三根灯管都弯成“U”型,然后平行放置,以达到六根灯管的效果。
4、信号响应时间
响应时间指的是液晶显示器对于输入信号的反应速度,也就是液晶由暗转亮或由亮转暗的反应时间,通常是以毫秒()为单位。要说清这一点我们还要从人眼对动态图像的感知谈起。人眼存在“视觉残留”的现象,高速运动的画面在人脑中会形成短暂的印象。动画片、电影等一直到现在最新的游戏正是应用了视觉残留的原理,让一系列渐变的图像在人眼前快速连续显示,便形成动态的影像。人能够接受的画面显示速度一般为每秒24张,这也是电影每秒24帧播放速度的由来,如果显示速度低于这一标准,人就会明显感到画面的停顿和不适。按照这一指标计算,每张画面显示的时间需要小于40ms。这样,对于液晶显示器来说,响应时间40ms就成了一道坎,低于40ms的显示器便会出现明显的“拖尾”或者“残影”现象,让人有混沌之感。要是想让图像画面达到流畅的程度,则就需要达到每秒60帧的速度。
5、可视角度
液晶的可视角度是一个让人头疼的问题,当通过偏极片、液晶和取向层之后,输出的光线便具有了方向性。也就是说大多数光都是从屏幕中垂直射出来的,所以从某一个较大的角度观看液晶显示器时,便不能看到原本的颜色,甚至只能看到全白或全黑。为了解决这个问题,制造厂商们也着手开发广角技术,到目前为止有三种比较流行的技术,分别是:TN+FILM、IPS(IN-PLANE
-SWITCHING)和(MULTI-DOMAIN VERTICAL alignMENT)。
液晶显示模块使用注意事项
一、操作注意事项:
1、显示屏为玻璃制作,请勿施予机械冲击,如从高处坠落等。
2、若显示屏损坏,内部液晶泄漏,切勿使其进入口中。若沾到衣服或皮肤上,迅速用肥皂和水清洗。
3、勿对显示屏表面或,一定正确接地。
c、为了减少产生静电,不要在干燥环境下实施装配及工作。
d、 模块有一层保护显示屏的膜。撕掉这层保护膜时要小心,因为可能会产生静电。
2、尽量减少电极腐蚀。水滴、潮气凝结或高温环境下的可能加速电极腐蚀。
1、 在低温(低于存贮温度范围)下,液晶凝固会导致方向性缺陷或产生气泡(黑色或白色的)。当液晶模块在低温下受到强烈振动时也会产生气泡。
2、如果LCD 模块长时间工作且显示相同的图案,该图案就会象幻影一样保留在屏上并会出现细微的对比的差别。若想重新获得正常的工作状态可暂时停止使用一会儿。值得注意的是这种现象不会对性能的可靠性产生不良作用。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!查看: 5409|回复: 0
STM32学习笔记8:LCD的显示
1.& & LCD/LCM的基本概念液晶显示器(Liquid Crystal Display:LCD)的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。LCM(LCD Module)即LCD显示模组、液晶模块,是指将液晶显示器件,连接件,控制与驱动等外围电路,PCB电路板,背光源,结构件等装配在一起的组件。在平时的学习开发中,我们一般使用的是LCM,带有驱动IC和LCD屏幕等多个模块。
2.& & FSMC的基本概念在STM32上开发LCD显示,可以有两种方式来对LCD进行操作,一种是通过普通的IO口,连接LCM的相应引脚来进行操作,第2种是通过FSMC来进行操作。可变静态存储控制器(Flexible Static Memory Controller: FSMC)是STM32系列中内部集成256 KB以上FlaSh,后缀为xC、xD和xE的高存储密度微控制器特有的存储控制机制。之所以称为“可变”,是由于通过对特殊功能寄存器的设置,FSMC能够根据不同的外部存储器类型,发出相应的数据/地址/控制信号类型以匹配信号的速度,从而使得STM32系列微控制器不仅能够应用各种不同类型、不同速度的外部静态存储器,而且能够在不增加外部器件的情况下同时扩展多种不同类型的静态存储器,满足系统设计对存储容量、产品体积以及成本的综合要求。FSMC有很多优点:1.& && &支持多种静态存储器类型。STM32通过FSMC可以与SRAM、ROM、PSRAM、NOR Flash和NANDFlash存储器的引脚直接相连。2.& && &支持丰富的存储操作方法。FSMC不仅支持多种数据宽度的异步读/写操作,而且支持对NOR、PSRAM、NAND存储器的同步突发访问方式。3.& && &支持同时扩展多种存储器。FSMC的映射地址空间中,不同的BANK是独立的,可用于扩展不同类型的存储器。当系统中扩展和使用多个外部存储器时,FSMC会通过总线悬空延迟时间参数的设置,防止各存储器对总线的访问冲突。4.& && &支持更为广泛的存储器型号。通过对FSMC的时间参数设置,扩大了系统中可用存储器的速度范围,为用户提供了灵活的存储芯片选择空间。5.& && &支持代码从FSMC扩展的外部存储器中直接运行,而不需要首先调入内部SRAM。FSMC包含两类控制器:1.& && &1个NOR闪存/SRAM控制器,可以与NOR闪存、SRAM和PSRAM存储器接口。2.& && &1个NAND闪存/PC卡控制器,可以与NAND闪存、PC卡,CF卡和CF+存储器接口。控制器产生所有驱动这些存储器的信号时序:1.& && &16位数据线,用于连接8位或16位的存储器;2.& && &26位地址线,最多可连续64MB的存储器(这里不包括片选线);3.& && &5位独立的片选信号线;4.& && &1组适合不同类型存储器的控制信号线:-& && && &控制读/写操作-& && && &与存储器通信,提供就绪/繁忙信号和中断信号-& && && &与所用配置的PC卡接口:PC存储卡、PC I/O卡和真正的IDE接口从FSMC的角度看,可以把外部存储器划分为固定大小为256MB的4个存储块· 存储块1用于访问最多4个NOR闪存或者PSRAM存储设备。这个存储区被划分为4个NOR/PSRAM区,并有4个专用的片选。
· 存储块2和3用于访问NAND闪存设备,每个存储块连接一个NAND闪存。· 存储块4用于访问PC卡设备每一个存储块上的存储器类型是由用户在配置寄存器中定义的。
注意:FSMC只是提供了一个控制器,并不提供相应的存储设备,至于外设接的是什么设备,完全是由用户自己选择,只要能用于FSMC控制,就可以,像本次实验中,我们接的就是LCM。
3.& & 本例中FSMC的使用由于本例只是利用FSMC对LCM进行操作,因此不用完全懂得FSMC的所有功能,而是懂得一部分相应的操作即可。1.& && &FSMC包括哪几个部分FSMC包含以下4个模块:· AHB接口(包含FSMC配置寄存器)· NOR闪存和PSRAM控制器· NAND闪存和PC卡控制器· 外部设备接口需要注意的是,FSMC可以请求AHB进行数据宽度操作。如果AHB操作的数据宽度大于外部设备(NOR或NAND或LCD)的宽度,此时FSMC将AHB操作分割成几个连续的较小的数据宽度,以适应外部设备的数据宽度。2.& && &FSMC对外部设备的地址映像FSMC对外部设备的地址映像从0x开始,到0x9FFF FFFF结束,一共4个地址块,每个地址块256MB,而每个地址块又分成4个分地址块,大小为64MB。对于NOR的地址映像来说,我们可以通过选择HADDR[27:26] 来确定当前使用的是哪个64M的分地址块。而这四个分存储块的片选,则使用NE[4:1]来选择。数据线/地址线/控制线是共享的。这里的HADDR 是需要转换到外部设备的内部AHB地址线,每个地址对应一个字节单元。因此,若外部设备的地址宽度是8位的,则HADDR[25:0]与STM32的CPU引脚FSMC_A[25:0]一一对应,最大可以访问64M字节的空间。若外部设备的地址宽度是16位的,则是HADDR[25:1]与STM32的CPU引脚FSMC_A[24:0]一一对应。在应用的时候,可以将FSMC_A总线连接到存储器或其他外设的地址总线引脚上。
4.& & ILI9325由于我们使用的是奋斗STM32 V3开发板,其内部自带的是一个LCM,产品的编号是:QD024CPS25-36AV0,其中的详细规格参数可以参考QD024CPS25-36AV0规格书中的记载。而LCM中的驱动IC就是采用的ILI9325。ILI9325的功能很多,在此无法一一说明,但是参考ILI9325的Datasheet我们发现有几个引脚还是非常重要的,而只要操作好了这几个引脚,基本上就可以实现简单的对LCM的控制了。nCS: IC的片选信号。如果是低电平,则ILI9325是被选中,并且可以进行操作,如果是高电平,这不被选中。RS: 寄存器选择信号。如果是低电平,则选择的是索引或者状态寄存器,如果是高电平,则选择控制寄存器。nWR/SCL: 写使能信号,低电平有效。nRD: 读使能信号,低电平有效。以上内容是从ILI9325的Datasheet里面找到的,但是根据我的实际操作发现,似乎高电平也是有效的。而且,不管是高电平还是低电平,都可以成功驱动LCD,如果有了解情况的可以讨论一下。ILI9325的寄存器非常多,详细的各个寄存器的功能请参考ILI9325的Datasheet。在对ILI9325进行操作时,应该先写地址,然后再写数据,设置好各个寄存器之后,ILI9325就可以开始工作了。
5.& & 电路设计1.& && &信号线的连接STM32F10x FSMC有4个不同的banks,每一个64MB,可支持NOR以及其他类似的存储器。这些外部设备的地址线、数据线和控制线是共享的。每个设备的访问时通过片选信号来决定的,而每次只能访问一个设备。我们的LCM就是连接在NOR的bank上面。
FSMC_D[15:0]:16bit的数据总线,连接ILI9325的数据线;
FSMC_NEx:分配给NOR的256MB的地址空间还可以分为4个banks,每一个区用来分配一个外设,这4个外设分别就是NE1-NE4;
FSMC_NOE:输出使能,连接ILI9325的nRD引脚;
FSMC_NWE:写使能,连接ILI9325的nWR引脚;
FSMC_Ax:用在LCD显示RAM和寄存器之间进行选择的地址线,这个和ILI9325的RS引脚相连。该线可用任意一根地址线,范围是FSMC_A[25:0]。当RS=0时,表示读写寄存器,RS=1时,表示读写数据RAM。
其实关于RS的表述也并不完全准确,应该这么理解,RS=0的时候,向这个地址写的数表示了选择什么寄存器进行操作,然而要对寄存器进行什么操作,则要看当RS=1时,送入的数据了。关于地址的计算,如果我们选择NOR的第一个存储区,并且使用FSMC_A16来控制ILI9325的RS引脚,则如果要访问寄存器地址(RS=0),那么地址是0x(起始地址),如果要访问数据区(RS=1),那么基地址应该是0x。
有人会问,为什么不是0x呢?因为FSMC_A16=1。因为在前文中已经说过,若外部设备的地址宽度是16位的,则是HADDR[25:1]与STM32的CPU引脚FSMC_A[24:0]一一对应。也就是说,内部产生的地址应该要左移一位,FSMC_A16=1,代表着第17位为1,而不是第16位为1。如果外部设备的地址宽度是8位的话,则不会出现这个问题。
再举一个例子,如果选择NOR的第4个存储区,使用FSMC_A0来控制RS引脚,则访问数据区的地址为0x,访问LCD寄存器的地址为:0x。
2.& && &时序问题一般使用模式2来做LCD的接口控制,不使用外扩模式。并且读写操作的时序一样。此种情况下,我们需要使用3个参数:ADDSET、DATAST、ADDHOLD。时序的计算需要根据NOR闪存存储器的特性和STM32F10x的时钟HCLK来计算这些参数。
写或读访问时序是存储器片选信号的下降沿与上升沿之间的时间,这个时间可以由FSMC时序参数的函数计算得到:
写/读访问时间= ((ADDSET + 1) + (DATAST + 1))× HCLK在写操作中,DATAST用于衡量写信号的下降沿与上升沿之间的时间参数:
写使能信号从低变高的时间 = t WP&&= DATAST× HCLK为了得到正确的FSMC时序配置,下列时序应予以考虑:
最大的读/写访问时间、不同的FSMC内部延迟、不同的存储器内部延迟
因此得到:
((ADDSET + 1) + (DATAST + 1)) × HCLK = max (t WC ,t RC )DATAST × HCLK = tWPDATAST必须满足:
DATAST = (tAVQV+ tsu(Data_NE) + tv(A_NE) )/HCLK –ADDSET – 4由于我没有找到ILI9325的这些时序的参数,所以就参考了一些以前别人写的程序里面的时序配置:当 HCLK 的频率是 72MHZ,使用模式B,则有如下时序:地址建立时间:0x1地址保持时间:0x0数据建立时间:0x5
6.& & 程序编写步骤对于程序的编写,一般步骤是:1.& && &初始化RCC;2.& && &初始化GPIO;3.& && &初始化FSMC;4.& && &初始化LCD;5.& && &往GRAM里面写入显示数据。其中RCC、GPIO、FSMC的初始化函数在STM32的固件库中已经有相应的函数,在此就不一一赘述了,如果有不懂的,可以参考以前我写的学习笔记。FSMC的初始化参数很多,而且基本上可以通用,因此在此也不对每一个参数具体有什么用进行解释了,一般来说,用通用参数就足够普通的开发了。而对LCD的初始化,则需要自己编写相应的代码。基本原则是,首先向寄存器地址写入需要操作的寄存器地址(代码),然后再根据Datasheet,向数据区地址写入相应的数据,以实现某些操作。具体的操作在ILI9325的Datasheet 第8节RegisterDescriptions中,有详细的解释。而LCD的初始化只要按照Datasheet里面的,把每一个寄存器都给配置好了,就没有问题了。而这些寄存器的配置,大部分都是通用的,只是有一些屏幕方向选择,坐标系等会略有差别。LCD配置好之后,就可以往GRAM里面写入图像数据了,在这里推荐一个软件“Image2LCD”,这个软件能读取图像,然后生成C代码的数据,只要将这些生成的代码直接写入GRAM中,就可以显示出图像了。不过要记住,在图像转换的时候,输出数据类型选择“C语言数组”,扫描模式选择“水平扫描”,输出灰度“16位真彩色”,最大宽度和高度“320”“240”勾选“高位在前(MSB First)”。这些配置都是和ILI9325的寄存器配置相对应的,如果说ILI9325的配置和本文中的不一样,则需要相应的选择其他的选项。7.& & 程序源代码main.c文件中的代码:
#include &stm32f10x_lib.h&
#include &stm32f10x_lcd.h&
extern unsigned char LCD_Image_BIT[];
extern unsigned char LCD_Image_HIT[];
void RCC_cfg();
void FSMC_cfg();
void LCD_cfg();
void GPIO_cfg();
void LCD_Show(unsigned char * LCD_Image);
int main()
& && & RCC_cfg();
& && & GPIO_cfg();
& && & FSMC_cfg();
& && & LCD_cfg();
& && & while(1)
& && && && &&&LCD_Show(LCD_Image_HIT);
& && && && &&&Delay();
& && && && &&&LCD_Show(LCD_Image_BIT);
& && && && &&&Delay();
//RCC时钟配置
void RCC_cfg()
& && & //定义错误状态变量
& && & ErrorStatus HSEStartUpS
& && & //将RCC寄存器重新设置为默认值
& && & RCC_DeInit();
& && & //打开外部高速时钟晶振
& && & RCC_HSEConfig(RCC_HSE_ON);
& && & //等待外部高速时钟晶振工作
& && & HSEStartUpStatus = RCC_WaitForHSEStartUp();
& && & if(HSEStartUpStatus == SUCCESS)
& && && && &&&//设置AHB时钟(HCLK)为系统时钟
& && && && &&&RCC_HCLKConfig(RCC_SYSCLK_Div1);
& && && && &&&//设置高速AHB时钟(APB2)为HCLK时钟
& && && && &&&RCC_PCLK2Config(RCC_HCLK_Div1);
& && && && &&&//设置低速AHB时钟(APB1)为HCLK的2分频
& && && && &&&RCC_PCLK1Config(RCC_HCLK_Div2);
& && && && &
& && && && &&&//设置FLASH代码延时
& && && && &&&FLASH_SetLatency(FLASH_Latency_2);
& && && && &&&//使能预取指缓存
& && && && &&&FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
& && && && &&&//设置PLL时钟,为HSE的9倍频 8MHz * 9 = 72MHz
& && && && &&&RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
& && && && &&&//使能PLL
& && && && &&&RCC_PLLCmd(ENABLE);
& && && && &&&//等待PLL准备就绪
& && && && &&&while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
& && && && &&&//设置PLL为系统时钟源
& && && && &&&RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
& && && && &&&//判断PLL是否是系统时钟
& && && && &&&while(RCC_GetSYSCLKSource() != 0x08);
& && && &//打开GPIO时钟,复用功能
& && && &RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);
& && && &//打开FSMC时钟
& && && &RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
//FSMC配置
void FSMC_cfg()
& && & FSMC_NORSRAMInitTypeDef&&FSMC_NORSRAMInitS
& && & FSMC_NORSRAMTimingInitTypeDef&&p;
& && & //设置地址建立时间
& && & p.FSMC_AddressSetupTime = 0x02;
& && & //设置地址保持时间
& && & p.FSMC_AddressHoldTime = 0x00;
& && & //设置数据建立时间
& && & p.FSMC_DataSetupTime = 0x05;
& && & //总线返转时间
& && & p.FSMC_BusTurnAroundDuration = 0x00;
& && & //时钟分频
& && & p.FSMC_CLKDivision = 0x00;
& && & //数据保持时间
& && & p.FSMC_DataLatency = 0x00;
& && & //设置FSMC访问模式
& && & p.FSMC_AccessMode = FSMC_AccessMode_B;
& && & //选择设置的BANK以及片选信号(BANK1中的第一个block)
& && & FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
& && & //设置是否数据地址总线时分复用(No)
& && & FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_D
& && & //设置存储器类型(NOR)
& && & FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
& && & //设置数据宽度(16bit)
& && & FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
& && & //设置是否使用迸发访问模式(连续读写模式)(No)
& && & FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_D
& && & //设置WAIT信号的有效电平(低电平有效)
& && & FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_L
& && & //设置是否使用还回模式(No)
& && & FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_D
& && & //设置WAIT信号有效时机(在wait状态之前)
& && & FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitS
& && & //设置是否使能写操作(Yes)
& && & FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_E
& && & //设置是否使用WAIT信号(No)
& && & FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_D
& && & //设置是否使用扩展模式(读写时序相互独立)(No)
& && & FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_D
& && & //设置是否使用异步等待信号(No)
& && & FSMC_NORSRAMInitStructure.FSMC_AsyncWait = FSMC_AsyncWait_D
& && & //设置是否使用迸发写模式(No)
& && & FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_D
& && & //设定读写时序
& && & FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
& && & //设定写时序
& && & FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;& &&&
& && & FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
& && & //使能Bank1中的block1
& && & FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
//GPIO配置
void GPIO_cfg()
& && & GPIO_InitTypeDef GPIO_InitS
& && & //背光控制
& && & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
& && & GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
& && & GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
& && & GPIO_Init(GPIOD, &GPIO_InitStructure);
& && & //LCD复位
& && & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
& && & GPIO_Init(GPIOE, &GPIO_InitStructure);
& && & //打开FSMC的数据端口D[15:0]
& && & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
& && && && && && && && && && && & GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
& && & GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
& && & GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
& && & GPIO_Init(GPIOD, &GPIO_InitStructure);
& && & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
& && && && && && && && && && && & GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
& && && && && && && && && && && & GPIO_Pin_15;
& && & GPIO_Init(GPIOE, &GPIO_InitStructure);
& && & //打开FSMC功能端口,PD.4=RD(nOE);PD.5=WR(nWE)
& && & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
& && & GPIO_Init(GPIOD, &GPIO_InitStructure);
& && & //打开NE1设置
& && & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
& && & GPIO_Init(GPIOD, &GPIO_InitStructure);
& && & //打开RS设置
& && & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ;
& && & GPIO_Init(GPIOD, &GPIO_InitStructure);
& && & //NE1=1
& && & GPIO_SetBits(GPIOD, GPIO_Pin_7);
& && & //LCD_RESET=0
& && & GPIO_ResetBits(GPIOE, GPIO_Pin_1);
& && & //LCD_RD=1(nOE)
& && & GPIO_SetBits(GPIOD, GPIO_Pin_4);
& && & //LCD_WR=1(nWE)
& && & GPIO_SetBits(GPIOD, GPIO_Pin_5);
& && & //背光LIGHT=1
& && & GPIO_SetBits(GPIOD, GPIO_Pin_13);
//LCD初始化
void LCD_cfg()
& && & //复位LCD
& && & LCD_rst();
& && & //LCD初始化
& && & LCD_Init();
//LCD显示图片
//根据LCD_Init里面的配置,LCD的原点在左下角,终点在右上角;先纵向增长,再横向增长
void LCD_Show(unsigned char * LCD_Image)
& && & u32 n = 0;
& && & u16 temp = 0;
& && & //设置进入模式
& && & //AM=1:地址在水平写入方向上更新
& && & //I/D[1:0]=01:水平方向递增,垂直方向递减
& && & //BGR=1:RGB数据转换为BGR数据
& && & //TRI=0;DFM=0;
& && & //详细信息参考ILI.5 Entry Mode
& && & LCD_WR_CMD(0x8);& &&&
& && & //GRAM的水平地址
& && & //8.2.18 GRAM Horizontal/Vertical Address Set
& && & LCD_WR_CMD(0x0);& &&&
& && & //GRAM的垂直地址
& && & LCD_WR_CMD(0xF);& &&&
& && & //水平方向开始地址
& && & LCD_WR_CMD(0x0);
& && & //水平方向结束地址(0-239)
& && & LCD_WR_CMD(0xEF);
& && & //垂直方向开始地址
& && & LCD_WR_CMD(0x0);
& && & //垂直方向结束地址(0-319)
& && & LCD_WR_CMD(0xF);
& && & //写数据地址
& && & //因为是16bits一起写入,而图像数据数组中是每个数据8bits,
& && & //所以是2个8bits的数据合并成一个16bits的数据,再写入GRAM
& && & LCD_WR_ADD(0x0022);
& && & while(n&153600)
& && && && &&&temp = (u16)(LCD_Image[n]&&8) + LCD_Image[n+1];
& && && && &&&LCD_WR_DATA(temp);
& && && && &&&n += 2;& &
stm32f10x_lcd.c中的代码
#include &stm32f10x_lcd.h&
//数据区地址
#define Bank1_LCD_Data& &&&((u32)0x)
//寄存器区地址
#define Bank1_LCD_Reg& && &((u32)0x)
u32 color1 = 0;
//延时函数
void Delay(u32 nCount)
& && & for(; nCount != 0; nCount--);
void LCD_rst()
& && & //PE.1连接LCD的reset引脚
& && & GPIO_ResetBits(GPIOE, GPIO_Pin_1);
& && & Delay(0xAFFFFf);& && && && && && && && && && &
& & GPIO_SetBits(GPIOE, GPIO_Pin_1 );& && && && &&&
& && & Delay(0xAFFFFf);
//LCD写寄存器地址函数
void LCD_WR_ADD(u16 index)
& && & *(vu16 *)(Bank1_LCD_Reg) =
//LCD写数据函数
void LCD_WR_DATA(u16 val)
& && & *(vu16 *)(Bank1_LCD_Data) =& &
//LCD写寄存器命令函数,先将命令地址写到Reg中,然后再将命令的数值写到Data中
//具体地址和配置参照ILI9325的Datasheet
void LCD_WR_CMD(u16 index, u16 val)
& && & *(vu16 *)(Bank1_LCD_Reg) =
& && & *(vu16 *)(Bank1_LCD_Data) =& &
void LCD_Init()
& && & //设置内部时钟
& && & LCD_WR_CMD(0x00E3, 0x3008);
& && & LCD_WR_CMD(0x00E7, 0x0012);
& && & LCD_WR_CMD(0x00EF, 0x1231);& &&&
& && & //启动振荡,ILI9325可以不要这一句
& && & LCD_WR_CMD(0x1);
& && & //设置驱动器输出控制,SS=1,SM=0
& && & //当SS=0时,源输出信号从S1开始至S720结束;
& && & //当SS=1时,源输出信号从S720开始至S1结束。
& && & //SM和GS搭配使用,具体查看ILI.3 Driver Output Contorl
& && & LCD_WR_CMD(0x0);
& && & //LCD波形控制
& && & //B/C=1:行反转;
& && & //EOR=1和B/C=1:设置行反转
& && & //8.2.4 LCD Driving Wave Control
& && & LCD_WR_CMD(0x0);
& && & //设置进入模式
& && & //AM=1:地址在水平写入方向上更新
& && & //I/D[1:0]=01:水平方向递增,垂直方向递减
& && & //BGR=1:RGB数据转换为BGR数据
& && & //TRI=0;DFM=0;
& && & //详细信息参考ILI.5 Entry Mode
& && & LCD_WR_CMD(0x8);
& && & //重新调整控制寄存器大小
& && & //8.2.6 Resizing Control Register
& && & LCD_WR_CMD(0x0);
& && & //显示器控制2
& && & //FP[3:0]=0010;
& && & //BP[3:0]=0010;
& && & //详细信息参考ILI.8 Display Control 2
& && & LCD_WR_CMD(0x2);
& && & //显示器控制3
& && & //设置非显示区域刷新
& && & //8.2.9 Display Control 3
& && & LCD_WR_CMD(0x0);
& && & //显示器控制4
& && & //FMARK信号设置
& && & //8.2.10 Display Control 4
& && & LCD_WR_CMD(0x000A, 0x0000);
& && & //RGB显示接口控制1
& && & //8.2.11 RGB Display Interface Control 1
& && & LCD_WR_CMD(0x000C, 0x0000);
& && & //帧标记位置
& && & //8.2.12 Frame Marker Position
& && & LCD_WR_CMD(0x000D, 0x0000);
& && & //RGB显示接口控制2
& && & //8.2.13 RGB Display Interface Control 2
& && & LCD_WR_CMD(0x000F, 0x0000);
& && & //功率控制1
& && & //8.2.14 Power Control 1
& && & LCD_WR_CMD(0x0);
& && & //功率控制2
& && & //8.2.15 Power Control 2
& && & //VC[2:0]=111:参考电压为Vci
& && & LCD_WR_CMD(0x7);
& && & //功率控制3
& && & //8.2.16 Power Control 3
& && & LCD_WR_CMD(0x0);
& && & //功率控制4
& && & //8.2.17 Power Control 4
& && & LCD_WR_CMD(0x0);
& && & //延时,放电
& && & Delay(200);
& && & //功率控制1
& && & //SAP=1:源驱动程序被启动
& && & //BT[2:0]=110:
& && & //APE=1:开始供应电力
& && & //AP[2:0]=001:伽马驱动放大和源驱动放大
& && & LCD_WR_CMD(0x0);
& && & //功率控制2
& && & //DC1[2:0]=010:选择升压电路2工作频率Fosc/16
& && & //DC0[2:0]=010:选择升压电路1工作频率Fosc/4
& && & //VC[2:0]=111:参考电压为Vci
& && & LCD_WR_CMD(0x7);
& && & //延时
& && & Delay(50);
& && & //功率控制3
& && & //PON=1:控制线路3(VGL)开启
& && & //VRH[3:0]=1100:设置外部参考电压
& && & LCD_WR_CMD(0xC);
& && & //延时
& && & Delay(50);
& && & //功率控制4
& && & //VDV[4:0]=11000:设置Vcom的电压振幅交替
& && & LCD_WR_CMD(0x0);
& && & //功率控制7
& && & //8.2.21 Power Control 7
& && & //VCM[5:0]=011100:设置内部VcomH电压
& && & LCD_WR_CMD(0xC);
& && & //帧速率和色彩控制
& && & //8.2.22 Frame Rate and Color Control
& && & //FRS[3:0]:1101:帧率128
& && & LCD_WR_CMD(0x002B, 0x000D);
& && & //延时
& && & Delay(50);
& && & //GRAM的水平地址
& && & //8.2.18 GRAM Horizontal/Vertical Address Set
& && & LCD_WR_CMD(0x0);& &&&
& && & //GRAM的垂直地址
& && & LCD_WR_CMD(0x0);& &&&
& && & //伽马控制
& && & //8.2.23 Gamma Control
& && & LCD_WR_CMD(0x7);
& && & LCD_WR_CMD(0x2);
& && & LCD_WR_CMD(0x5);
& && & LCD_WR_CMD(0x6);
& && & LCD_WR_CMD(0x8);
& && & LCD_WR_CMD(0x6);
& && & LCD_WR_CMD(0x4);
& && & LCD_WR_CMD(0x7);
& && & LCD_WR_CMD(0x003C, 0x0105);
& && & LCD_WR_CMD(0x003D, 0x0808);
& && & //水平和垂直位置的RAM地址
& && & //8.2.24 Horizontal and Vertical RAM Address Position
& && & //水平方向开始地址
& && & LCD_WR_CMD(0x0);
& && & //水平方向结束地址(0-239)
& && & LCD_WR_CMD(0xEF);
& && & //垂直方向开始地址
& && & LCD_WR_CMD(0x0);
& && & //垂直方向结束地址(0-319)
& && & LCD_WR_CMD(0xF);
& && & //门扫描控制
& && & //8.2.25 Gate Scan Control
& && & //GS=1:扫描方向是从G320到G1
& && & //NL[5:0]=100111
& && & LCD_WR_CMD(0x0);
& && & //NDL=0:在非显示区域设置源驱动器的输出极
& && & //VLE=0:垂直滚动显示不可用
& && & //REV=1:图像灰度反转
& && & LCD_WR_CMD(0x1);
& && & //VL[8:0]=0
& && & LCD_WR_CMD(0x006A, 0x0000);
& && & //局部影像1显示位置
& && & //8.2.26 Partial Image 1 Display Position
& && & LCD_WR_CMD(0x0);
& && & //局部影像1RAM开始/结束地址
& && & //8.2.27 Partial Image 1 RAM Start/End Address
& && & LCD_WR_CMD(0x0);
& && & LCD_WR_CMD(0x0);
& && & //局部影像2显示位置
& && & //8.2.28. Partial Image 2 Display Position
& && & LCD_WR_CMD(0x0);
& && & //局部影像2RAM开始/结束地址
& && & //8.2.29 Partial Image 2 RAM Start/End Address
& && & LCD_WR_CMD(0x0);
& && & LCD_WR_CMD(0x0);
& && & //平板接口控制1
& && & //8.2.30 Panel Interface Control 1
& && & //RTNI[4:0]=10000:设置内部时钟运行模式中1线时钟的数目:16个
& && & LCD_WR_CMD(0x0);
& && & //平板接口控制2
& && & //8.2.31 Panel Interface Control 2
& && & LCD_WR_CMD(0x0);
& && & LCD_WR_CMD(0x3);
& && & //平板接口控制4
& && & //8.2.32 Panel Interface Control 4
& && & LCD_WR_CMD(0x0);
& && & LCD_WR_CMD(0x0);
& && & LCD_WR_CMD(0x0);
& && & //显示控制1
& && & //8.2.7 Display Control 1
& && & //BASEE=1:显示基本图像
& && & //GON=1 DTE=1:正常显示
& && & //D[1:0]=11:打开显示面板
& && & LCD_WR_CMD(0x3);
& && & //GRAM写入数据,用黑色清屏
& && & LCD_WR_ADD(0x0022);
& && & for(color1=0;color1&320*240;color1++)
& && && &LCD_WR_DATA(0x0000);& && & //
& && & color1=0;
stm32f10x_lcd.h中的代码
#include &stm32f10x_lib.h& //LCD复位函数void LCD_rst();//LCD初始化函数void LCD_Init();//延时函数void Delay(u32 nCount);//LCD写寄存器地址函数void LCD_WR_ADD(u16 index);//LCD写数据函数void LCD_WR_DATA(u16 val);
pic_bit.c中的代码和pic_hit.c中的代码由于太长了,所以并没有贴出来,其实就是根据某一幅图片用Image2LCD生成的,其数组名分别叫const unsigned char LCD_Image_BIT[153600]const unsigned char LCD_Image_HIT[153600]
Powered by

我要回帖

更多关于 液晶显示模块 的文章

 

随机推荐