基于51单片机设计的TFT液晶显示
在本文的实验中, 仅使用软件去抖也能很好的工作。其设置电路原理图如图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+单片机已经足够满足要求, 其刷新速度在首次刷屏后几乎没有延迟, 故可取得很好的效果。同时其硬件电路上也相当简洁, 精度也很好, 因而具有不错的应用前景。
- 关于RTX51 TINY的分析与探讨(05-30)
- 浅析8051模块化编程技巧(05-28)
- 基于DSP和单片机通信的液晶显示设计方案(07-20)
- 锁相环控制及初始化简析(08-27)
- 基于MSP430自动胀管控制器的研究(09-07)
- 嵌入式C实现延时程序的不同变量的区别(03-01)