logo资料库

基于51单片机的TFT液晶显示设计.pdf

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
单片机的TFT液晶显示设计 液晶显示设计 基于基于51单片机的 给出了使用51单片机配合驱动芯片来驱动TFT液晶模块, 并且配合时钟芯片以及温度采集芯片, 从而使液晶屏 上能够实时显示当前时间、日期以及温度信息的实现方法, 同时给出了各个子模块的硬件电路和软件设计思路 以及部分子程序的流程图。 0 引言 51单片机作为一种常见的通用单片机, 虽然其内部资源, 处理速度等都无法与新型高速单片机相提并论, 但其低廉的价格, 极低的入门难度以及适用于简单场合应用等特点, 依然是开发者的常用选择之一。 用51单片机驱动液晶模块通常都使用1602和12864等极为简单的液晶模块, 这里介绍用51单片机驱动QVGA分辨率的TFT液 晶模块, 以实现彩色和更为复杂的内容显示的方法。同时, 本文还将使用DS1302芯片和DS18B20芯片来实现在液晶屏上显 示实时时钟和温度。 1 硬件设计 本系统硬件电路的设计主要包括单片机最小系统电路, TFT液晶显示电路, 时钟电路, 设置电路以及温度采集电路。其系统 工作原理框图如图1所示。 图1 硬件系统原理框图 1.1 单片机最小系统 一个单片机的最小系统包括外部晶振、电源、复位电路等, 这是保证单片机正常工作的必要条件。通过单片机可控制整个系 统, 包括读取DS18B20芯片的温度数据, 读取/写入DS1302芯片的日历时钟数据, 检测是否有按键按下并进行相应的操作, 最后还要向显示驱动芯片写入数据,以使得TFT液晶屏上能够显示所需的内容。 1.2 液晶显示电路 驱动TFT液晶面板的芯片有多种选择, 本文使用的是台湾奕力科技的ILI9325芯片。该芯片能够支持320×240 (QVGA) 分辨 率, 同时内置173KB的RAM, 故其最高能显示26万色。ILI9325支持的接口方式有8/9/16/18位i80系统总线、SPI总线、RGB 接口和VSYNC接口。它的总线式接口电路方式是把液晶显示器看作外部的数据存储器,它访问液晶显示器就像访问数据存储 器的一个单元一样, 采用这种方式能充分发挥单片机的总线读写功能优势, 而且便于升级和扩展。由于本文采用的 STC89C54RD+单片机并没有SPI总线, 因此, 为了节约IO的使用, 本文最终采用8位系统总线的方式来连接ILI9325芯片。 其显示部分电路如图2所示。
图2 显示部分电路图 图2中, 除P0口用作8位总线传输数据以外,还需要5个额外的IO口分别用作驱动芯片的片选(CS), 复位(RESET), 命令/数 据选择位(RS), 写入位(WR) 和读取位(RD)。但实际上, 由于这里不需要从驱动芯片中读取数据, 因此, RD位在实际程序 中并未使用。 1.3 时钟电路 时钟电路主要由DS1302芯片组成。DS1302是DALLAS公司推出的涓流充电时钟芯片。该芯片内含一个实时时钟/日历和31 字 节的静态RAM,可与单片机通过简单的串行接口进行通信。该芯片可提供秒、分、时、日、日期、月、年等信息, 每月的天 数和闰年的天数可自动补偿, 并能计算到2100年。DS1302与单片机之间能简单地采用同步串行方式进行通信, 而且仅需用 到复位(RES)、I/O口、SCLK串行时钟三个口线。DS1302工作时的功耗很低, 其双电源管脚可用于主电源和备份电源供应, 并可为可编程涓流充电电源附加七个字节的存储器。因此, 该芯片可广泛应用于电话等便携式仪器以及电池供电的仪器仪表 等产品。图3所示是DS1302的时钟电路连接图。 此外, 设计时需要为DS1302 提供外接的32.768 Hz晶振, 而不需要接电容或电阻。 图3 时钟电路连接图 1.4 温度采集电路 DS18B20数字温度计是DALLAS公司生产的单总线器件(1-Wire)。该芯片具有线路简单, 体积小的特点。因此, 用它组成的 测温系统线路简单。它只用一根通信线就可以连接多个DS18B20数字温度计, 因此十分方便。此外, 该芯片还具有以下一些 特点:
◇ 仅需一个端口即可完成数据的读取和写入;◇ 每个DS12B20芯片都有一个独一无二的序列号, 因此, 可以在一条数据线 上挂载多个芯片;◇ 测量温度范围在-55℃到125℃之间;◇ 数字温度计的分辨率可以选择9到12位;◇ 可以设置告警温度的 上下限。 图4所示是该芯片与单片机的连接电路。表1所列是DS18B20三个引脚的定义。 图4 温度采集电路图 表1 DS18B20的引脚定义 1.5 设置电路 设置电路的主要功能是将时间和日期设置到当前时间和日期。本设计仅需使用3个按键即可完成该功能。第一个按键用于选择 更改的内容,即第一次按下该按键时, 时钟停止并且出现一指示符, 该指示符指向秒所在位置, 以后每按下该按键, 系统将 依次轮询分、时、日、月、年、星期, 这样用户便可修改系统时间和日期, 当选完星期之后, 再次按下第一个按键, 则时钟 又从设定的时间继续运行并且指示符消失。另外两个按键起“+”, “-” 的作用, 可供用户调节时间和日期时使用。需要注意的 是, 只有在调节状态时按下“+”, “-” 按钮才能起作用。 在按键去抖方面, 本设计使用的是软件去抖, 但在实际中, 有时也应该加入电容或双稳态触发器以实现硬件去抖。当然, 在 本文的实验中, 仅使用软件去抖也能很好的工作。其设置电路原理图如图5所示。 图5 设置电路原理图。 2 软件系统设计 软件部分的设计主要包括显示子程序、DS1302芯片子程序、DS18B20芯片子程序、按键处理子程序以及主程序。主程序部分 主要用于进行各个设备的初始化, 接着进行键盘扫描, 同时读取时间、温度, 最后调用显示子程序。DS1302芯片子程序主 要负责读取内部存储器中的时间、日期, 并在有相应键盘响应时将时间、日期数据存入存储器。DS18B20芯片子程序的作用 相对比较简单, 只需按一定间隔读取温度数据即可。按键子程序的目的是不停的轮询按键, 一旦有按键被按下, 程序将立即 执行相应的处理。而显示部分子程序是该项目中难度最大同时也是代码最多的子程序, 它包含显示驱动芯片的初始化函数, 同时也定义了如何向液晶屏发送指定内容的函数, 例如文字、字母、图形等。 2.1 主程序设计
主程序在完成对各器件的初始化后, 便开始执行键盘扫描, 以读取芯片数据及显示程序。其主程序流程图如图6所示。 图6 主程序流程图。 2.2 显示程序设计 显示程序的设计是本设计的难点, 究其原因, 第一, 是显示驱动芯片的寄存器配置比较复杂, ILI9325有超过40个寄存器, 这些寄存器大部分在显示初始化程序中即可配置完成, 而另外一些则可能会在其他程序中再次用到。例如在每次写入数据前 首先要确定写入的范围, 而这个范围需要在寄存器中配置。 第二, 是往显示屏上输出任何内容均需要手动编写方法。如果在1602液晶或12864液晶上写入英文字母、数字, 有的甚至可 以是中文都可以直接使用现有指令写入。但ILI9325芯片没有字库, 因而会带来一些困难, 但同时也带来了灵活的选择, 因 为这样, 字体和字号就不受限制了。 本文在制作字库时, 使用的是常见的字模软件,该软件可以生成任意大小的字模, 还可以根据图片取模。因此, 利用该软件 可获得所需的所有汉字和字母, 本文所取的汉字字模大小为40×46,数字为16×31。正是由于字模大小的不同, 本设计生成 的两个头文件均使用结构体方式来定义了索引内码和点阵码数据两个属性。特别需要注意的是, 汉字内码为2byte, 而英文数 字内码为1byte。因此, 在两个不同的索引程序的判断条件中必须将其区分开。本文还将需要使用的一些简单标志图形(如指示 时钟修改位的标志) 也都合并到了英文字库中。 解决了上述两个难点, 程序设计也就基本完成了。如果需要用到一些复杂的图形, 例如圆形、方形、三角形等, 也完全可以 额外增加几个函数。还有一点要注意的是, 从温度采集芯片和时钟芯片获得的数据必须转换为ASCII码, 否则,索引程序就 不能识别。本系统的显示程序流程图如图7所示。 图7 显示程序流程图2.3 DS1302子程序及按键处理子程序: DS1302时钟日期芯片子程序中定义了读取写入数据的函数。通过这两个函数可以确定读取芯片中时间和日期等数据的函数以 及设置这些数据的函数。设置函数将被键盘扫描程序使用, 而读取函数则将在主函数中应用。 按键处理子程序的主要目的就是轮询各按钮是否被按下, 只有当第一按键被按下时, 才会处理第二和第三按键。注意, 按下 第一功能键时,必须关闭DS1302写保护功能, 而在退出设定状态时, 则需要打开写保护。为了在更改数据时实时显示出更 改的数值, 在按键处理时, 也要用到显示函数。该流程较为简单, 本文不再赘述。 2.4 DS18B20芯片子程序 DS18B20是一种温度采集芯片。在进行温度采集前, 一般首先都需要初始化, 然后还需进行ROM操作, 待发出存储器操作 指令后才能读取温度数据。本设计使用定时器0中断, 每隔1秒读取一次温度, 这一速度已经足够满足日常要求了。 3 结束语
本文使用51单片机配合QVGA液晶实现了时间、日期和温度的实时显示。事实上, 选用TFT液晶能够更加灵活、多彩的显示 内容, 更符合未来的发展趋势。同时, 在处理简单的图像内容上, STC89C54RD+单片机已经足够满足要求, 其刷新速度在 首次刷屏后几乎没有延迟, 故可取得很好的效果。同时其硬件电路上也相当简洁, 精度也很好, 因而具有不错的应用前景。
分享到:
收藏