
truly-LCD-12864-驱动-软件设计书(供初学者参考).doc
25页软件详细设计模板□秘密 □机密 □绝密软件详细设计(仅供内部使用)文 件 编 号:版 本 号:V 0. 1实 施 日 期:2011-08-05保 密 等 级:□秘密 □机密 □绝密编 制:审 核:会 签:批 准:修订记录日期版本号描述作者2011-08-050.1初稿完成,功能还待完善目录1 概述 52 硬件及开发模板 52.1 truly液晶 52.2 LCD板 82.3 ADS开发模板 82.4 ADS的仿真 193 基本设计 193.1 设计原理 193.1.1 国际ASCII码 193.1.2 汉字点阵字库原理 193.1.3 Bresenham算法 193.1.4 基于Bresenham的中心点画圆法 193.2 函数说明 193.2.1 Disp_En 193.2.2 Disp_Ch 193.2.3 Disp_One 193.2.4 Disp_Str 193.2.5 Draw_Piexl 193.2.6 Draw_Line 193.2.7 Draw_Circle 193.2.8 Disp_Pic 193.3 流程图 193.3.1 显示中英文ASCII码字符程序Disp_En、Disp_Ch 193.3.2 显示单个字符Disp_One 203.3.3 显示字符串Disp_Str 213.3.4 显示像素Draw_Piexl 223.3.5 画直线Draw_Line 233.3.6 显示图片Disp_Pic 244 参考资料 25关键词:TRULY液晶驱动摘 要:主要实现显示字符,图片,画点画直线功能缩略语清单:缩略语原 文中文含义版权所有,侵权必究 第2页 共25页1 概述该本驱动采用品牌为truly 型号为MSG12864-42-E的液晶,该液晶为128×64点阵,左右屏分别有片选信号CS1和CS2,为64×64点阵。
纵向取模字节倒序的方式下个部分详细介绍其他硬件环境是基于3AE硬件基础,只是替换了原LCD屏,并增加了一个负向电压用于提供该液晶对比度所需编译和仿真环境为ADS1.2本驱动主要实现了:8×16(8为横向,16位纵向,一个液晶点为单位1)的国际ASCII码、16×16的一级常用汉字国标码、显示已知宽高的图片、建立了以屏幕最下一行为X轴,最左边的一列为Y轴的坐标系、并以此为画板的画直线函数、画圆函数、2 硬件及开发模板****truly液晶型号为MSG12864-42-E组成软件部分为H-JTAG、ADS1.2集成的开发环境(主要使用编译组件Code Warrior,仿真组件AXD Debug)其中ADS中工程建立是以‘LPC2294.H’为核心的模板2.1 truly液晶truly液晶的主要操作部分CS1H/L左半屏片选信号,CS1B=L输入有效CS2H/L右半屏片选信号,CS2B=L输入有效GND0V接地VCC5.0V逻辑供电电压V0---LCD供电电压,-4到-5V最佳RSH/LH:数据信号、L:命令信号R/WH/L读写信号:H:读信号,CPU可读DB0-DB7;L:写信号,当片选信号CS=L,E的下降沿H→L触发,LCD处理发送至DB0-DB7数据EH, H→L使能信号:H:读模式(R/W=H) →DB0-DB7产生数据;H→L:写模式(R/W=L) →DB0-DB7数据被锁定DB0H/L数据位0DB1H/L数据位1DB2H/L数据位2DB3H/L数据位3DB4H/L数据位4DB5H/L数据位5DB6H/L数据位6DB7H/L数据位7SLA4.2V背光灯阳极SLK0V背光灯阴极该液晶datasheet见附件。
该液晶显示模块的指令系统比较简单,常用的有六种现分别介绍如下:1. 显示开、关指令R/WD/IDB7DB6DB5DB4DB3DB2DB1DB00000111111/0当DB0=1时,LCD开启显示;DB0=0时,关闭显示2. 显示起始行设置指令R/WD/IDB7DB6DB5DB4DB3DB2DB1DB00011显示起始行(0~63)该指令设置了对应液晶屏幕最上一行的显示RAM的行号,有规律地改变显示起始行,可以实现滚屏效果3. 页设置指令R/WD/IDB7DB6DB5DB4DB3DB2DB1DB00010111页号(0~7)显示RAM共64行,分8页,每页8行4. 列地址设置指令R/WD/IDB7DB6DB5DB4DB3DB2DB1DB00001显示列地址(0~63)设置了页地址和列地址就唯一确定了显示RAM中的一个单元5. 读状态指令R/WD/IDB7DB6DB5DB4DB3DB2DB1DB010BUSY0ON/OFFRESET0000该指令用来查询液晶显示模块内部控制器的状态各参量含义如下:BUSY :1-内部在工作 0-正常状态ON/OFF :1-显示关闭 0-显示打开RESET :1-复位状态 0-正常状态在BUSY和RESET状态时,除读状态指令外,其他指令均不对液晶显示模块产生作用。
在对液晶显示模块进行操作之前要查询BUSY状态,以确定是否可以对液晶显示模块进行操作6. 写数据指令R/WD/IDB7DB6DB5DB4DB3DB2DB1DB001写数据2.2 3AE的LCD板LCD板ARM芯片问为LPC2136,大部分液晶接口都兼容trulyMSG12864-42-E下面是LCD板对液晶接口J1与Truly液晶对接表格LCD板J1序号LCD板J1接口Truly液晶接口序号Truly液晶接口LCD板J1序号LCD板J1接口Truly液晶接口序号Truly液晶接口1GND3GND11DB413DB42V+54VCC12DB514DB53VO外接负压VO13DB615DB64D/I6RS14DB716DB75R/W7R/W15CS11CS16E8E16CS22CS27DB09DB017RES--8DB110DB118VOUT--9DB211DB219LED+17SLA10DB312DB320LED-18SLK注:原液晶采用正压供电,trulyMSG12864-42-E采用负压供电LCD板电路图见附件2.3 ADS开发模板< 该驱动在ADS编程环境,以LPC2294.h为核心的工程模板,为基础开发。
LPC2294兼容LPC2136的各项设置模板原始文件包括mem_a.scf、mem_b.scf、mem_c.scf、target.h、config.h、Starup.s、target.c、IRQ.s、main.c 模板建立之后,还需要定义IO口的文件,还需要把LPC2294.h添加到config.h中由于我是嫁接的3AELCD所以IO口设置和操作也和3AE一样LPC21XX系列包含有GPIO,以下是相关资料:GPIO寄存器映射通用名称描述复位值IOPINGPIO引脚值IO0PIN的位0~位31对应P0.0~P0.31未定义IOSETGPIO输出置位,IOSET的位0~位31对应P0.0~P0.31写入1对应引脚高电平,写入0无效IODIRGPIO方向寄存器该寄存器单独控制每个I/O口的方向IODIR的位0~位31对应P0.0~P0.31IOCLRGPIO输出清零寄存器2.4 ADS的仿真< 编译通过之后就可以开始检查程序运行效果了这里我们选择的是DebugInFLASH在连接好H-JTAG口之后,使用软件H-JTAG进行连接,连接成功的话会显示芯片型号然后再回到ADS选择DebugInFLASH即可。
仿真过程可观察变量,单步执行,找出错误3 基本设计对液晶屏的读写操作与以前的类似,只是注意液晶屏显示单元的模式,做相应调整显示ASCII码字符注意是一个字符占2页,在第一页(字符上半部分)显示完之后需要自己将页地址加1,及列地址重置(由于LCD显示完一个单元,自动指向下个列地址)如果遇到字符恰好占了左右两个屏,那么需要逐个显示左上部分,右上部分,左下部分,右下部分字模数组的默认排列顺序:先上后下,先左后右当然你也可以计算出各部分的数组,然后先左后右的显示由于是跨屏,那么右半部分的列地址就一定是首列(0x40)页地址不变由显示固定大小的字模扩展,显示已知大小的图片,并支持多页,跨屏显示画直线:如果使用传统的DDA画法,即使用斜率得出(x,y)值由于涉及到大量的浮点数除法运算该类运算使用的运算周期比较大,故采用经典的Bresenham算法,Bresenham算法是计算机图形学领域使用最广泛的直线扫描转换方法画圆:由Bresenham算法可得到启发,使用中心点判断画圆法计算y和y-1的中心点y-0.5到圆心的距离与半径r比较,来判断理想的圆离(x+1,y)、(x+1,y-1)哪点近,y就取哪点的值。
且圆是高度对称的理论上只要计算1/8就可以得出剩下的7/8在这里考虑到屏幕分辨率比较小1/8与1/8组成的1/4的中间交接点可能有差尺,所以改计算1/4,然后换手剩下的3/43.1 设计原理3.1.1 国际ASCII码下表是ASCII表完整版ASCII码表完整版 ASCII值控制字符ASCII值控制字符ASCII值控制字符ASCII值控制字符 0NUT32(space)64@96、1SOH33!65A97a2STX34”66B98b3。












